将Keras模型HDF5文件存储到SQL数据库

时间:2019-05-16 14:29:25

标签: python sql keras byte hdf5

我有一个Keras神经网络模型,该模型会定期更新。为了实现历史可追溯性,我想在数据库中保留每个受过训练的模型(体系结构+权重+优化器状态)的副本。 "Multi-class AdaBoost"包含有关模型的所有信息。有没有一种方法可以将该文件转换为可以存储在SQL数据库记录中的格式,以使完整的模型可以在以后检索/使用,即使检索速度不是很快。

我正在使用Python3构建/训练模型并与SQL数据库进行交互。另外,如果这有区别,我正在使用MS SQL Server作为数据库。

更新:

根据评论,我要保存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 \ x00 \ xff \ xff \ xff \ xff \ xff \ xff \ xff \ xff @ \ x13 \ x01 \ x00 \ 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 \ 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 \ x00 \ x01 \ x00 \ x08 \ x00 \ x00 \ x00 \ x01 \ x00 \ x00 \ x00 \ x18 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x10 \ x00 \ x10 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x03 \ x00 \ 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 \ xff \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x18 \ x18 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x18 \ x18 \ x00 \ x00 ...

1 个答案:

答案 0 :(得分:0)

我找不到一种干净的方法来做到这一点。我解决问题的方法是将文件名/路径以及有关模型的一些元数据存储在数据库中。我将实际模型(HDF5文件)存储在Google Cloud Storage中。因此,当我想检索模型时,我查询数据库以获取最新的文件名,然后从Google Cloud Storage下载它。