无法加载Keras模型:OSError文件签名未找到问题求助
解决Keras模型加载时"file signature not found"报错的思路
我之前也碰到过一模一样的问题,这个报错本质是h5py没法识别你的模型文件格式,大概率是文件本身损坏、路径不对或者加载方式不匹配导致的,给你几个具体的排查方向:
先确认文件本身的有效性
- 检查加载代码里的
filepath是否完全正确:比如有没有拼写错误、相对路径是否匹配当前工作目录(Pycharm里可以在运行配置里查看工作目录) - 查看模型文件的大小:如果文件只有几KB甚至是空文件,说明保存过程中肯定出问题了(比如程序中断、磁盘空间不足),重新生成也可能因为同样的原因失败,得先解决保存环节的问题
- 用h5py直接测试文件:运行下面的代码,验证文件是否能正常被h5py识别
如果这里也报错,那基本可以确定是文件本身的问题,而非Keras加载逻辑的问题import h5py try: f = h5py.File('你的模型文件路径.h5', 'r') f.close() print("文件可以正常打开") except Exception as e: print(f"h5py直接打开报错: {e}")
- 检查加载代码里的
检查模型保存与加载的方式是否匹配
- 如果你是用
model.save('model.h5')完整保存的模型,才能用load_model()加载;如果是分开保存了权重(model.save_weights())和架构,那得先重新定义好模型的网络结构,再用model.load_weights()加载权重,不能直接用load_model() - 确认保存模型时没有异常:比如保存过程中程序崩溃、被强制终止,都会导致文件损坏,重新保存时要确保程序正常跑完保存步骤
- 如果你是用
排查版本兼容性问题
- Keras、TensorFlow和h5py的版本不匹配经常会导致这类问题:比如旧版本Keras保存的模型,用新版本h5py可能无法识别,反过来也一样。可以尝试调整版本,比如安装兼容性较好的h5py版本:
pip install h5py==3.10.0 - 如果你是用
tf.keras(TensorFlow集成的Keras)训练保存的模型,尽量用tf.keras.models.load_model()来加载,不要用原生Keras的load_model(),两者的模型格式细节可能有差异
- Keras、TensorFlow和h5py的版本不匹配经常会导致这类问题:比如旧版本Keras保存的模型,用新版本h5py可能无法识别,反过来也一样。可以尝试调整版本,比如安装兼容性较好的h5py版本:
确认文件格式没有混淆
- 有没有可能你不小心把模型保存成了SavedModel格式(是一个文件夹,不是单个.h5文件)?如果是这种情况,不能用加载单个文件的方式,得传入文件夹路径给
load_model():tf.keras.models.load_model('你的模型文件夹路径')
- 有没有可能你不小心把模型保存成了SavedModel格式(是一个文件夹,不是单个.h5文件)?如果是这种情况,不能用加载单个文件的方式,得传入文件夹路径给
内容的提问来源于stack exchange,提问作者Giovanni Carnovale
相关产品推荐
相关产品推荐

