You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Colab用pickle保存Keras Bi-LSTM模型,本地加载变量不匹配报错求助

问题描述

在Google Colab中使用Keras构建Bi-LSTM模型后,通过以下代码用pickle保存模型:

with open('BiLstm_model.pkl', 'wb') as writer:
    pickle.dump(lstm_model, writer)

本地电脑执行以下代码加载模型时,出现报错:

lstm_model = pickle.load(open('BiLstm_model.pkl', 'rb'))

报错内容:

ValueError: Layer 'lstm_cell_2' expected 3 variables, but received 0 variables during loading

该模型在Colab中加载正常,但本地加载失败。已尝试不同的保存/加载格式与库,也安装了和Colab相同版本的依赖包,问题仍未解决。

解决方案

1. 避免使用pickle保存Keras模型

Keras官方明确不推荐用pickle或cPickle序列化模型。这类工具仅能处理简单Python对象,无法完整序列化Keras模型的复杂结构(比如LSTM层的内部变量、张量依赖关系),即使依赖版本一致,也可能因序列化不完整导致加载失败。

2. 使用Keras官方的保存/加载方法

在Colab中重新保存模型

替换原pickle保存代码,用Keras内置的save()方法保存为HDF5格式或SavedModel格式(推荐后者):

# 保存为HDF5文件
lstm_model.save('BiLstm_model.h5')

# 或者保存为SavedModel格式(TensorFlow官方推荐)
lstm_model.save('BiLstm_model_saved')

在本地加载模型

确保本地安装了对应版本的TensorFlow/Keras,然后用load_model()加载:

from tensorflow.keras.models import load_model

# 加载HDF5格式模型
model = load_model('BiLstm_model.h5')

# 加载SavedModel格式模型
model = load_model('BiLstm_model_saved')

3. 补救已有的pickle模型

如果无法重新训练模型,可在Colab中先加载pickle保存的模型,再用Keras方法重新保存:

import pickle
from tensorflow.keras.models import load_model

# 在Colab中加载pickle模型
with open('BiLstm_model.pkl', 'rb') as reader:
    lstm_model = pickle.load(reader)

# 重新保存为Keras支持的格式
lstm_model.save('BiLstm_model_fixed.h5')

将重新保存的.h5文件下载到本地,再用load_model()加载即可。

内容的提问来源于stack exchange,提问作者Muhammad Mustafa Bawany

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:35:16