You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:47:59