在Streamlit加载Colab训练的LSTM模型时遇初始化器识别错误
问题解决:Colab训练的LSTM模型在Streamlit加载失败
错误核心原因
Colab与本地环境的Keras/TensorFlow版本不匹配,导致模型序列化的初始化器(如Orthogonal)格式无法被本地版本解析。Colab通常使用较新的Keras 3.x版本,而本地环境可能是旧版TensorFlow集成的Keras,或版本差异过大,引发反序列化失败。
可行解决方案
1. 统一Colab与本地的版本
- 在Colab训练前,先安装与本地一致的TensorFlow版本(例如本地用2.15.0):
!pip install tensorflow==2.15.0 - 本地环境同步安装对应版本:
注意:确保主版本完全一致,避免小版本差异引发的序列化问题。pip install tensorflow==2.15.0
2. 改用H5格式保存模型(兼容旧版本)
若无法统一版本,在Colab用H5格式保存模型,旧版TensorFlow对该格式兼容性更好:
# 替换原保存代码 model.save('LSTM_model.h5', save_format='h5')
本地加载时:
from tensorflow.keras.models import load_model model = load_model('LSTM_model.h5')
3. 训练时显式指定初始化器
训练模型时显式定义初始化器,避免依赖默认值的版本差异:
from keras.layers import Dense, Dropout, LSTM from keras.models import Sequential from keras.initializers import Orthogonal model = Sequential() # 每个LSTM层显式指定递归初始化器 model.add(LSTM(units=50, activation='relu', return_sequences=True, input_shape=(x_train.shape[1], 1), recurrent_initializer=Orthogonal(gain=1.0, seed=None))) model.add(Dropout(0.2)) model.add(LSTM(units=60, activation='relu', return_sequences=True, recurrent_initializer=Orthogonal(gain=1.0, seed=None))) model.add(Dropout(0.3)) # 后续LSTM层同理重复显式指定初始化器... model.add(Dense(units=1)) model.compile(optimizer='adam', loss='mean_squared_error') model.fit(x_train, y_train, epochs=100) model.save('LSTM_model.keras')
4. 本地升级到Keras 3.x版本
若本地环境允许,直接升级到与Colab一致的新版本:
pip install --upgrade keras tensorflow
升级后再加载.keras格式模型,可直接解决序列化格式不兼容问题。
内容的提问来源于stack exchange,提问作者Sanniddha
相关产品推荐
相关产品推荐

