将Keras模型保存到数据库中。

3
我创建了一个keras模型(tensorflow),想将其存储在我的MS SQL Server数据库中。有什么最好的方法可以做到这一点吗?pyodbc.Binary(model)会抛出错误。我希望找到一种不需要先将模型存储在文件系统中的方法。
谢谢任何帮助。

你解决了这个问题吗? - undefined
4个回答

4

似乎没有一种干净的解决方案能够直接将包含权重的模型存储到数据库中。我决定将模型作为h5文件存储在文件系统中,并从那里将其上传到数据库作为备份。对于预测,我始终从文件系统中加载模型,因为相比于每次从数据库获取模型,这样做速度更快。


1
最好的方法是将其保存为系统中的文件,只在数据库中保存路径。这种技术通常用于存储像图片这样的大文件,因为数据库通常难以处理它们。

1
嗯,这个答案来得有点晚,但由于网上没有有用的答案,根据我的深入研究,我想我会发布这个见解。也许有些人会觉得有帮助。
我没有尝试过在keras模型上使用这种方法,但这种方法在pytorch模型上是有效的。但我可以想象,它对于keras或tensorflow也应该有效。
步骤1:加载模型并转换为字节缓冲区。
model = torch.load(r'model.pth')

buffer = io.BytesIO()
torch.save(model, buffer)
model_data = buffer.getvalue()

第二步:在您的SQL Server数据库中创建一个表,可以直接使用SQL语句或使用ORM(我使用Python和Flask SQL Alchemy完成)。模型将保存在列数据类型为VARBINARY(MAX)(或使用Flask-SQL-Alchemy的db.PickleType)的字段中。
connection_string = 'DRIVER={SQL Server};Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;Trusted_Connection=False' 
connection = pyodbc.connect(connection_string)
cursor = connection.cursor()

query="INSERT INTO Models (Model) VALUES (?)"
cursor.execute("SET IDENTITY_INSERT Models ON")
cursor.execute(query, model_data)
cursor.execute("SET IDENTITY_INSERT Models OFF")

connection.commit()

#to get the model from the db:
query="SELECT Model FROM Models"
cursor.execute(query)
row = cursor.fetchone()
model_data = row.Model

buffer = io.BytesIO(model_data)
loaded_model = torch.load(buffer)

cursor.close()
connection.close()   

TA-DA

-1

嗯,你可以将模型保存为JSON格式,像这样:

json_string = model.to_json()

然后将其转换为字符串并正常保存到数据库。

或者使用本地 MS SQL 解决方案来处理 JSON 字段,在这里有解释。


据我所知,to_json()方法只包含模型的架构,而不包括权重。我需要整个模型,以便用于预测。我无法相信没有简单的解决方案。 - undefined
很不幸,它不保存权重,但是尽管我总是将它们保存到h5文件中,这个解决方案在你的情况下看起来不错。链接 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接