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

加载pkl模型触发No module named 'keras.saving'报错如何解决

问题说明

执行file.py第32行pickle.load(open('model.pkl', 'rb'))加载本地序列化模型时,抛出ModuleNotFoundError: No module named 'keras.saving'错误,完整报错栈:

Using TensorFlow backend.
Traceback (most recent call last):
  File "file.py", line 32, in <module>
    pickled_model = pickle.load(open('model.pkl', 'rb'))
ModuleNotFoundError: No module named 'keras.saving'
报错原因

核心触发原因是当前运行环境的Keras/TensorFlow版本,和当初训练、导出model.pkl文件时使用的版本不匹配:
keras.saving是Keras 2.12及以上版本才拆分出的独立模块路径,如果你当前环境安装的是2.12以下的旧版Keras,或是TensorFlow 2.11及更早版本内置的Keras,加载高版本Keras序列化生成的pickle模型时,就会找不到对应模块路径抛出错误。
额外说明:pickle序列化Keras模型本身不是官方推荐的存储方式,对运行环境的版本耦合度极高,跨环境、跨版本加载非常容易出现兼容问题。

解决步骤

按优先级依次尝试:

  • 对齐版本:先执行pip show keras查看当前环境的Keras版本,若不确定导出模型时的版本,先直接升级Keras和TensorFlow到最新正式版,再重新运行脚本:
    pip install --upgrade keras tensorflow
    
    绝大多数小版本差异导致的该问题,升级后可直接解决。
  • 若升级后仍报错,且确认模型是用旧版Keras导出的,将当前环境的Keras、TensorFlow降到和导出模型匹配的版本即可,比如模型是基于Keras 2.8训练保存的,执行以下命令降级:
    pip install keras==2.8.0 tensorflow==2.8.0
    
  • 长期规避方案:放弃用pickle存储Keras模型,改用Keras官方提供的原生保存加载接口,版本兼容性远高于pickle:
    保存模型时使用:
    # 新版Keras使用.keras格式,旧版可替换为.h5后缀
    model.save("model.keras")
    
    加载模型时使用:
    from tensorflow import keras
    model = keras.models.load_model("model.keras")
    

注意:跨大版本的Keras/TensorFlow模型文件官方不保证兼容,尽量保证训练保存和加载推理的环境大版本一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:15:35