Python3.9加载keras模型提示SavedModel文件不存在OSError报错
问题基本信息
- 运行环境:Python 3.9.10
- 触发场景:执行
prediction.py第5行代码,调用keras.models.load_model接口加载相对路径model/CPN_Model.h5下的模型文件 - 完整报错栈:
Traceback (most recent call last): File "C:\Users\AbdiShakra\OneDrive\Documents\Diagnosticc-main\server.py", line 4, in import prediction File "C:\Users\AbdiShakra\OneDrive\Documents\Diagnosticc-main\prediction.py", line 5, in model = keras.models.load_model("model/CPN_Model.h5") File "C:\Users\AbdiShakra\AppData\Local\Programs\Python\Python39\lib\site-packages\keras\saving\save.py", line 205, in load_model return saved_model_load.load(filepath, compile, options) File "C:\Users\AbdiShakra\AppData\Local\Programs\Python\Python39\lib\site-packages\keras\saving\saved_model\load.py", line 108, in load meta_graph_def = tf.__internal__.saved_model.parse_saved_model(path).meta_graphs[0] File "C:\Users\AbdiShakra\AppData\Local\Programs\Python\Python39\lib\site-packages\tensorflow\python\saved_model\loader_impl.py", line 118, in parse_saved_model raise IOError( OSError: SavedModel file does not exist at: model/CPN_Model.h5\{saved_model.pbtxt|saved_model.pb}
- 核心报错:抛出
OSError,提示指定路径下不存在SavedModel格式要求的saved_model.pbtxt或saved_model.pb文件
常见产生原因
- 相对路径解析错误:Python解析相对路径以执行命令时的工作目录为基准,而非
prediction.py文件本身所在目录。如果执行启动命令时不在项目根目录Diagnosticc-main下,相对路径会拼接错误,指向不存在的位置。 - 模型文件/结构异常:
- 目标路径下根本没有
CPN_Model.h5文件,或者文件是0KB损坏状态; - 误将SavedModel格式的模型文件夹命名为
CPN_Model.h5,且文件夹内部缺失saved_model.pb/saved_model.pbtxt核心结构文件; - Keras自动识别格式时,误将h5单文件判定为SavedModel目录,触发目录结构校验。
- 目标路径下根本没有
- 版本兼容问题:本地安装的TensorFlow/Keras版本远低于模型训练导出时的版本,加载时格式解析逻辑不匹配。
排查解决步骤
- 修正路径解析逻辑
先在加载模型的代码前添加打印语句,确认实际解析的路径:
复制打印出的绝对路径到文件资源管理器中打开,确认是否能定位到目标文件。如果路径错位,直接改用基于脚本文件位置的绝对路径,彻底规避工作目录影响:import os print("当前工作目录:", os.getcwd()) print("模型解析到的绝对路径:", os.path.abspath("model/CPN_Model.h5"))import os # 获取当前prediction.py所在的目录 script_dir = os.path.dirname(os.path.abspath(__file__)) model_path = os.path.join(script_dir, "model", "CPN_Model.h5") model = keras.models.load_model(model_path) - 校验模型文件完整性
- 定位到模型所在目录,确认
CPN_Model.h5是大小正常的单个文件(通常模型文件大小在数MB到数百MB区间,不是空文件),而非同名文件夹。 - 如果
CPN_Model.h5是文件夹,进入文件夹检查是否存在saved_model.pb文件:存在则去掉路径后缀.h5,直接加载该文件夹;不存在则说明模型文件拷贝不全,重新从训练导出的源位置完整复制模型。
- 定位到模型所在目录,确认
- 处理版本兼容问题
执行代码打印本地版本:
如果本地版本比模型训练时用的版本低2个以上次版本(比如训练用2.10.x,本地装2.4.x),先升级对应依赖再尝试加载:import tensorflow as tf import keras print(tf.__version__, keras.__version__)pip install --upgrade tensorflow keras - 显式指定加载格式
确认是完好的h5格式文件的前提下,加载时显式声明格式,避免自动识别错误:model = keras.models.load_model(model_path, save_format="h5")
内容的提问来源于stack exchange,提问作者abdishakur abdi said
相关产品推荐
相关产品推荐

