ONNX转TensorFlow报错AttributeError: tensorflow.math无is_inf属性求助
我来帮你拆解这个问题,之前也踩过类似的版本兼容坑:
问题根因
你碰到的AttributeError: module 'tensorflow.math' has no attribute 'is_inf'本质是版本不兼容导致的:
- TensorFlow 1.x系列(包括你测试的1.13和1.9版本)里根本没有
tf.math.is_inf这个API,这个函数是TensorFlow 2.0之后才新增的; - 你通过conda-forge安装的
onnx-tf版本太新了,这些新版本已经放弃对TF1.x的兼容,内部代码直接调用了TF2.x特有的API,所以一导入onnx_tf.backend就触发了报错。
解决方案
给你两个可行的解决方向,根据你的需求选就行:
方向1:降级onnx-tf到兼容TF1.x的版本
找一个明确支持TF1.x的onnx-tf旧版本,比如1.5.0(这是最后一批稳定支持TF1.x的版本之一),执行以下命令替换安装:
# 先卸载现有不兼容的onnx-tf版本 conda uninstall -n <env> onnx-tf # 用pip安装兼容的旧版本(conda源可能找不到旧包) pip install onnx-tf==1.5.0
安装完成后再重新运行你的导入代码,应该就能正常工作了。
方向2:切换到TensorFlow 2.x环境
如果你的模型迁移到TF2.x没有障碍,更推荐直接升级到TF2.x环境,这样能使用最新的onnx-tf功能,步骤如下:
# 创建新的TF2.x环境(这里选TF2.8,兼容性和稳定性都不错) conda create -n tf2_env python=3.8 tensorflow==2.8.0 # 激活新环境 conda activate tf2_env # 安装最新版onnx-tf conda install -c conda-forge onnx-tf
之后再执行import tensorflow as tf、import onnx、from onnx_tf.backend import prepare就不会触发报错了。
快速验证方法
不管选哪个方案,激活环境后可以先简单验证API是否存在:
import tensorflow as tf # 如果是TF1.x环境,应该用tf.is_inf而不是tf.math.is_inf print(hasattr(tf, 'is_inf')) # 返回True就说明没问题 # 如果是TF2.x环境,tf.math.is_inf应该存在 print(hasattr(tf.math, 'is_inf')) # 返回True就说明没问题
内容的提问来源于stack exchange,提问作者gorkys
相关产品推荐
相关产品推荐

