如何将从GridFS读取的Keras模型字节数据转为可执行预测的模型实例?
解决方案
你从GridFS读取到的是模型序列化后的二进制字节数据,无法直接调用Keras模型的方法,需要先将字节流反序列化为Keras模型实例,操作步骤如下:
前置依赖导入
import io from tensorflow.keras.models import load_model from bson.objectid import ObjectId
完整操作代码
# 原有GridFS读取逻辑 gout = fs.get(ObjectId(objectID)) fout = gout.read() # 字节流转模型核心逻辑 # 将字节数据封装为类文件对象 model_stream = io.BytesIO(fout) # 加载为Keras模型实例 model = load_model(model_stream) # 正常执行预测 y_pred = model.predict(X)
注意事项
- 保存模型和加载模型时使用的Keras/TensorFlow版本需保持一致,避免出现层结构不兼容、API变更导致的加载报错
- 如果你存入GridFS时仅保存了模型权重(未保存模型结构),需要先初始化和训练阶段完全一致的模型结构,再通过如下方式加载权重:
# 先定义和训练时结构完全相同的模型 model = your_defined_model() # 加载权重字节流 model.load_weights(io.BytesIO(fout))
内容的提问来源于stack exchange,提问作者a.v. Magia
相关产品推荐
相关产品推荐

