Colab导出LSTM模型本地加载失败,求可行保存方案
问题描述
在Colab中创建LSTM模型后,使用以下代码保存模型:
model.save("my_model.keras")
本地加载时执行:
from keras.models import load_model model_2 = load_model("my_model.keras")
触发错误:
ValueError: Could not interpret initializer identifier: {'module': 'keras.initializers', 'class_name': 'Orthogonal', 'config': {'gain': 1.0, 'seed': None}, 'registered_name': None, 'shared_object_id': 133617776692624}
尝试通过自定义对象映射加载:
from keras.initializers import Orthogonal # 定义自定义对象映射 custom_objects = {'Orthogonal': Orthogonal} # 加载模型 model_2 = load_model("my_model.keras", custom_objects=custom_objects)
仍出现报错:
ValueError: Unrecognized keyword arguments passed to LSTM: {'batch_input_shape': [None, 1, 6], 'time_major': False}
已尝试通过pip freeze同步依赖环境,但问题未解决。需寻找可从Colab导出并在本地正常导入的模型保存方式。
可行的模型保存与加载方案
1. 使用SavedModel格式保存(推荐)
SavedModel是TensorFlow/Keras的标准保存格式,跨环境兼容性更强,能完整保存模型结构、权重及优化器状态:
Colab中保存:
model.save("my_lstm_model") # 无需添加后缀,会自动生成一个文件夹
本地加载:
from tensorflow.keras.models import load_model model_2 = load_model("my_lstm_model")
2. 分离保存模型结构与权重
若SavedModel仍存在兼容问题,可拆分保存模型结构和权重,手动处理自定义对象:
Colab中保存:
# 导出模型结构为JSON文件 model_json = model.to_json() with open("model_structure.json", "w") as json_file: json_file.write(model_json) # 导出模型权重为HDF5文件 model.save_weights("model_weights.h5")
本地加载:
from tensorflow.keras.models import model_from_json from tensorflow.keras.initializers import Orthogonal # 加载模型结构 with open("model_structure.json", "r") as json_file: model_structure = json_file.read() # 加载时指定自定义初始化器 model_2 = model_from_json(model_structure, custom_objects={'Orthogonal': Orthogonal}) # 加载权重 model_2.load_weights("model_weights.h5")
3. 强制统一环境版本
版本不一致是跨环境加载模型的常见根源,需确保本地与Colab的TensorFlow/Keras版本完全一致:
步骤1:在Colab中查看版本
import tensorflow as tf print(tf.__version__) print(tf.keras.__version__)
步骤2:本地安装对应版本
pip install tensorflow==x.x.x # 将x.x.x替换为Colab显示的版本号
内容的提问来源于stack exchange,提问作者elksie5000
相关产品推荐
相关产品推荐

