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

使用pickle保存LSTM模型时报TypeError: can't pickle _thread.RLock objects求解决

LSTM模型保存报错解决方案

报错原因

你遇到的TypeError: can't pickle _thread.RLock objects报错,核心原因是TensorFlow/Keras框架构建的模型对象内部包含不可被pickle序列化的线程锁资源,通用序列化工具pickle不支持直接序列化这类框架原生模型对象。

可行解决方法

  • 方案1:使用Keras官方提供的模型序列化接口(最推荐)
    替换你代码末尾的pickle相关代码,直接用内置save方法存储模型:
# 保存模型,支持h5格式单文件存储,或者SavedModel格式目录存储
# 方式1:存为h5单文件
regressor.save('C:/Users/indore/Desktop/model.h5')

# 加载模型时调用即可
from tensorflow.keras.models import load_model
regressor = load_model('C:/Users/indore/Desktop/model.h5')

h5格式会完整保存模型结构、权重、编译配置、优化器状态,既可以直接推理,也可以继续训练。如果是TensorFlow 2.x版本,也可以选择存为SavedModel目录格式,只需要把保存路径改为目录路径即可,兼容性更强。

  • 方案2:拆分存储模型结构与权重(适合需要自定义序列化的场景)
    如果确实需要结合pickle使用,可以先拆分模型的结构和权重单独存储,再打包序列化:
# 保存阶段
import pickle
# 导出模型结构为json字符串
model_struct = regressor.to_json()
# 导出模型权重
model_weights = regressor.get_weights()
# 打包结构和权重后用pickle存储
with open('C:/Users/indore/Desktop/model.sav', 'wb') as f:
    pickle.dump({'struct': model_struct, 'weights': model_weights}, f)

# 加载阶段
from tensorflow.keras.models import model_from_json
with open('C:/Users/indore/Desktop/model.sav', 'rb') as f:
    model_data = pickle.load(f)
regressor = model_from_json(model_data['struct'])
regressor.set_weights(model_data['weights'])
# 如需继续训练,要重新调用compile方法配置优化器和损失函数

内容的提问来源于stack exchange,提问作者Prakhar Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:27:00