【发布时间】:2019-10-03 20:55:10
【问题描述】:
我有一个定期更新的 Keras 神经网络模型。对于历史可追溯性,我想在数据库中保留每个训练模型(架构 + 权重 + 优化器状态)的副本。 Keras will export an HDF5 file 包含有关模型的所有信息。有没有办法将此文件转换为可以存储在 SQL 数据库记录中的格式,以便以后可以检索/使用完整模型,即使检索速度不是很快?
我正在使用 Python3 来构建/训练模型并与 SQL 数据库进行交互。另外,如果这有所不同,我将使用 MS SQL Server 作为数据库。
更新:
基于 cmets,我正在保存 HDF5 文件,然后将该文件读回 Python,如下所示:
filepath = 'C:\\path\\to\\file.h5'
model.save(filepath)
with open(filepath, "rb") as f:
model_bytes = f.read()
当我尝试将 INSERT model_bytes 值放入 MSSQL 中的 VARBINARY(MAX) 列时,我收到以下错误:
pypyodbc.DataError: ('22018', '[22018] [Microsoft][ODBC SQL Server 驱动程序][SQL Server]操作数类型冲突:ntext 不兼容 varbinary(max)')
关于如何在 Python 中预处理字节数据类型以使其在 SQL 中正确插入的任何想法?
当我将model_bytes 打印到屏幕上时,它看起来像这样:
b'\x89HDF\r\n\x1a\n\x00\x00\x00\x00\x00\x08\x08\x00\x04\x00\x10\x00\x00\x00\x00\x00\x00\ x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff@\x13\x01\x00\x00\x00\x00\x00\xff\xff\xff \xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00`\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\ x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\xa8\x02\x00\x00\x00\x00\x00\x00\x01\x00\x08\x00\x01\ x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x10\x00\x10\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\ x00\x18\x01\x00\x00\x00\x00\x00\x00TREE\x00\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\ xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x18\x00\x00...
【问题讨论】:
-
您可以将文件存储在
varbinary(max)列中。您可能应该使用Filetable 来简化文件管理,尤其是对于大文件 -
在我调用 SQL INSERT 语句将文件上传到带有
varbinary(max)列的Filetable之前,是否需要进行任何数据转换/准备?
标签: python sql keras byte hdf5