使用keras.models.load_model加载文件时出现OSError:文件签名未找到错误
问题根源与解决方法
你犯了一个基础概念错误:keras.models.load_model() 是用来加载训练完成后保存的模型文件(比如 .h5、.keras 格式),不是加载模型定义的 Python 源码文件(.py)。你传入的路径是模型的代码文件,HDF5 库无法识别其文件签名,因此触发报错。
解决步骤
1. 先确保已保存训练好的模型
在你的模型定义代码中,训练完成后必须调用 model.save() 生成合法的模型文件:
# 假设你的训练好的模型变量名为 model # 保存为 HDF5 格式 model.save("C:/Users/Hussein Ali/Desktop/d/DNNModel.h5") # 或者保存为 Keras 原生格式(推荐) model.save("C:/Users/Hussein Ali/Desktop/d/DNNModel.keras")
2. 加载模型时传入正确的文件路径
修改加载代码,指向刚才保存的模型文件,而非 .py 源码:
from keras.models import load_model # 加载 HDF5 格式模型 model = load_model("C:/Users/Hussein Ali/Desktop/d/DNNModel.h5") # 或者加载 Keras 原生格式模型 model = load_model("C:/Users/Hussein Ali/Desktop/d/DNNModel.keras")
3. 如果只是复用模型结构(不加载训练权重)
若你只想使用 .py 文件里的模型定义,直接导入代码中的模型构建函数即可:
# 假设 DNNModel.py 中有构建模型的函数 build_dnn_model() from DNNModel import build_dnn_model model = build_dnn_model() # 若需单独加载权重,再执行 model.load_weights("C:/Users/Hussein Ali/Desktop/d/模型权重文件.h5")
关键提醒
别混淆两类文件:
.py:模型结构的代码定义文件,用于构建模型框架.h5/.keras:训练后生成的二进制文件,包含模型结构+训练权重(或单独权重)
内容的提问来源于stack exchange,提问作者littlecoding
相关产品推荐
相关产品推荐

