Keras训练的MobileNet模型无法加载已保存.h5文件求助
解决MobileNet模型加载时的AttributeError问题
我之前也碰到过类似的报错,从错误日志里能看到你的代码同时调用了TensorFlow内置的Keras和独立的Keras库(路径里既有tensorflow/python/keras/_impl/keras又有keras/engine/topology.py),这大概率是版本不兼容或者接口混用引发的冲突。给你几个具体的解决方向:
统一Keras导入方式,避免混用
不要同时使用import keras和TensorFlow的Keras接口,全程使用TensorFlow内置的Keras模块,这样能彻底避免两套API的冲突:# 替换所有keras导入为tensorflow.keras from tensorflow.keras.models import load_model from tensorflow.keras.applications.mobilenet import relu6, DepthwiseConv2D # 加载模型 model = load_model('model.h5', custom_objects={ 'relu6': relu6, 'DepthwiseConv2D': DepthwiseConv2D })对齐训练和加载环境的版本
训练模型和加载模型时的TensorFlow/Keras版本必须完全一致,不同版本的序列化格式可能存在差异。你可以用以下命令查看当前环境的版本:pip show tensorflow keras如果版本不匹配,卸载后重新安装训练时使用的版本:
pip uninstall tensorflow keras -y pip install tensorflow==x.x.x # 把x.x.x替换成你训练模型时用的版本号改用SavedModel格式保存/加载模型
TensorFlow推荐使用SavedModel格式(文件夹形式)替代.h5,它的兼容性更好,且无需手动指定自定义对象:- 保存模型时:
model.save(os.path.join(model_dir, "saved_mobilenet")) # 保存为文件夹 - 加载模型时:
from tensorflow.keras.models import load_model model = load_model(os.path.join(model_dir, "saved_mobilenet"))
- 保存模型时:
检查自定义层(如果有)
如果你训练时对MobileNet结构做了自定义修改(比如添加了自己的层),要确保这些自定义层的定义在加载时也能被正确导入,并且将它们加入到custom_objects字典中。
内容的提问来源于stack exchange,提问作者Seba
相关产品推荐
相关产品推荐

