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

Posted

技术标签:

【中文标题】将 Keras 模型 HDF5 文件存储到 SQL 数据库【英文标题】:Storing Keras model HDF5 file to SQL database 【发布时间】: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 值放入 M​​SSQL 中的 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 之前,是否需要进行任何数据转换/准备? 【参考方案1】:

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

【讨论】:

以上是关于将 Keras 模型 HDF5 文件存储到 SQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

将 HDF5 文件中的大型数据集读入 x_train 并在 keras 模型中使用

将 TensorFlow 模型转换为 Keras hdf5

将经过训练的 HDF5 模型加载到 Rust 中以进行预测

Keras 中的 h5 模型是啥? [关闭]

用于不适合内存的大型 hdf5 文件的 Keras 自定义数据生成器

如何将训练有素的 Tensorflow 模型转换为 Keras?