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

h5模型转ONNX报keras无applications属性错误求解

报错信息

AttributeError: module 'tensorflow.python.keras' has no attribute 'applications'

问题场景

在Google Colab平台尝试将Keras格式的.h5模型转换为ONNX格式时触发上述报错,复现代码如下:

from tensorflow.python.keras import backend as K
from tensorflow.python.keras.models import load_model
import onnx
import keras2onnx

onnx_model_name = 'fish-resnet50.onnx'

model = load_model('model-resnet50-final.h5')
onnx_model = keras2onnx.convert_keras(model, model.name)
onnx.save_model(onnx_model, onnx_model_name)
已尝试的排查操作
  • 执行!pip install keras --upgrade命令升级Keras到最新版本,问题仍未解决
  • 在搭载macOS V12.4系统的M1芯片Mac本地Jupyter Notebook中运行相同代码,复现了完全一致的报错
问题根因
  • 代码中直接从tensorflow.python.keras路径导入模块属于调用TensorFlow内部非公开API,TensorFlow 2.x后续版本调整了内部模块结构,applications模块不再挂载在该路径下,直接导入会触发属性不存在的错误。
  • keras2onnx库已停止迭代更新,无法适配TensorFlow 2.10及以上版本的Keras接口,高版本环境下调用会出现各类属性报错。
可行解决方案

方案1:调整导入路径+固定兼容版本(适配原有keras2onnx转换逻辑)

如果需要沿用原有keras2onnx的转换逻辑,先固定依赖版本为兼容组合,同时将非公开API导入替换为公开API导入即可:

  1. 先安装指定版本依赖:
!pip install tensorflow==2.9.1 keras2onnx onnx onnxruntime

注意:Colab环境安装完指定版本依赖后必须重启运行时,否则会加载环境预装的高版本TensorFlow,导致报错依旧存在。

  1. 将原代码的导入部分修改为公开API路径,其余逻辑保持不变:
from tensorflow.keras import backend as K
from tensorflow.keras.models import load_model
import onnx
import keras2onnx

onnx_model_name = 'fish-resnet50.onnx'

model = load_model('model-resnet50-final.h5')
onnx_model = keras2onnx.convert_keras(model, model.name)
onnx.save_model(onnx_model, onnx_model_name)

方案2:替换为官方维护的tf2onnx工具(适配高版本TensorFlow)

如果不想降级TensorFlow版本,直接替换转换工具为官方持续维护的tf2onnx即可,该方案兼容TensorFlow 2.10及以上所有最新版本,转换稳定性更高:

  1. 安装依赖:
!pip install tf2onnx onnx
  1. 使用tf2onnx完成模型转换,代码如下:
import tensorflow as tf
from tensorflow.keras.models import load_model
import tf2onnx
import onnx

onnx_model_name = 'fish-resnet50.onnx'
model = load_model('model-resnet50-final.h5')
# 定义输入签名,batch维度设为None支持动态batch输入,可根据自身业务需求调整
input_signature = [tf.TensorSpec([None, *model.input_shape[1:]], tf.float32, name='input')]
onnx_model, _ = tf2onnx.convert.from_keras(model, input_signature=input_signature, opset=13)
onnx.save_model(onnx_model, onnx_model_name)

内容的提问来源于stack exchange,提问作者Haotian H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:57:26