部署Keras+Flask模型遇OSError:SavedModel文件不存在的解决求助
解决Keras模型加载时的OSError: SavedModel文件不存在问题
看起来你在跟着Jeff Heaton教授的T81-558《深度神经网络应用》课程部署Flask+Keras表格模型时,碰到了这个让人挠头的文件找不到错误。我来帮你拆解问题根源,一步步解决:
错误原因分析
这个报错OSError: SavedModel file does not exist at: ../dnn/mpg_model.h5/{saved_model.pbtxt|saved_model.pb}的核心问题是:TensorFlow的load_model函数把你的.h5单文件模型当成了SavedModel格式的文件夹来处理。
Keras/TensorFlow有两种主流的模型保存格式:
.h5:Keras传统单文件格式,保存后是一个独立的.h5文件,加载时需指向该文件。- SavedModel:TensorFlow标准多文件格式,保存后生成一个文件夹,内含
saved_model.pb和变量目录,加载时需指向该文件夹路径。
分步解决方案
1. 先确认模型文件路径是否正确
你用的相对路径../dnn/mpg_model.h5是基于当前运行脚本的目录计算的:
- 从你的命令行输出看,你是在
C:\Users\ASUS\t81_558_deep_learning\py目录下运行python mpg_server_1.py,那么../dnn/对应的实际路径是C:\Users\ASUS\t81_558_deep_learning\dnn。 - 先手动检查这个路径下是否真的存在
mpg_model.h5文件,文件名和后缀有没有拼写错误。 - 可以先用绝对路径测试,排除相对路径的干扰:
如果绝对路径能加载成功,说明之前的相对路径逻辑不符合你的实际目录结构,调整相对路径即可。model = load_model("C:/Users/ASUS/t81_558_deep_learning/dnn/mpg_model.h5")
2. 确保模型保存格式与加载方式匹配
如果路径没问题,那大概率是保存和加载的格式不匹配:
- 如果你当初是用
model.save('mpg_model.h5')保存的单文件模型:- 检查你的TensorFlow版本是否和保存模型时的版本兼容(比如避免用TF2.x加载TF1.x保存的老模型,或反之)。
- 尝试在Python交互环境单独加载模型,验证文件完整性:
from tensorflow.keras.models import load_model model = load_model("../dnn/mpg_model.h5") # 使用和脚本相同的路径
- 如果你当初是用SavedModel格式保存的(比如调用
model.save('mpg_model'),没有.h5后缀,生成一个文件夹):- 把加载代码里的路径改成指向这个文件夹,去掉
.h5后缀:model = load_model(os.path.join("../dnn/","mpg_model"))
- 把加载代码里的路径改成指向这个文件夹,去掉
3. 检查文件完整性与权限
- 如果单独加载模型也报错,说明
mpg_model.h5可能损坏,需要重新训练并保存模型。 - Windows环境下权限问题较少,但可以确认文件没有被其他程序锁定(比如之前的Jupyter进程还在占用模型文件)。
内容的提问来源于stack exchange,提问作者Mohamed Magdy
相关产品推荐
相关产品推荐

