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

将.onnx模型转换为TensorFlow Lite时出现AttributeError错误求助

解决ONNX转TensorFlow Lite时的AttributeError: module 'tensorflow.python.framework.type_spec' has no attribute '_NAME_TO_TYPE_SPEC'

这个错误是onnx-tf库与你当前安装的TensorFlow版本不兼容导致的。_NAME_TO_TYPE_SPEC是TensorFlow内部的私有属性,新版本TensorFlow已经移除或重命名了它,但旧版onnx-tf仍在尝试调用该属性。

下面是几个可行的解决办法:

办法1:安装兼容版本的TensorFlow和onnx-tf

卸载当前的TensorFlow,安装与onnx-tf适配的旧版本,比如TensorFlow 2.10.x搭配onnx-tf 1.10.0:

pip uninstall tensorflow -y
pip install tensorflow==2.10.1
pip install onnx-tf==1.10.0

安装完成后重新运行你的转换代码即可。

办法2:改用TensorFlow官方工具链转换

跳过onnx-tf,直接用tf2onnx和tf.lite.TFLiteConverter完成转换,代码如下:

import os
import tensorflow as tf
import tf2onnx

# 定义路径
input_path = "model.onnx"
output_savedmodel_path = "saved_model"
output_tflite_path = "output_model.tflite"

try:
    if not os.path.exists(input_path):
        raise FileNotFoundError(f"ONNX模型未找到: {input_path}")

    # 将ONNX模型转换为TensorFlow SavedModel格式
    _, _ = tf2onnx.convert.from_onnx(input_path, output_path=output_savedmodel_path)

    # 将SavedModel转换为TFLite格式
    converter = tf.lite.TFLiteConverter.from_saved_model(output_savedmodel_path)
    tflite_model = converter.convert()

    # 保存最终的TFLite模型
    with open(output_tflite_path, "wb") as f:
        f.write(tflite_model)
    print("转换成功!")

except Exception as e:
    print(f"转换出错: {e}")
    raise

办法3:用ONNX Runtime间接转换(备选)

如果前两种方法有问题,可以通过ONNX Runtime先把模型转为Keras模型,再转TFLite:

import onnxruntime as ort
import tensorflow as tf

input_path = "model.onnx"
output_tflite_path = "output_model.tflite"

# 加载ONNX模型并获取输入输出信息
sess = ort.InferenceSession(input_path)
input_info = sess.get_inputs()
output_names = [out.name for out in sess.get_outputs()]

# 构建对应的Keras模型
inputs = [tf.keras.Input(shape=inp.shape[1:], name=inp.name) for inp in input_info]

def run_onnx(inputs):
    feed_dict = {inp.name: inputs[i].numpy() for i, inp in enumerate(input_info)}
    return sess.run(output_names, feed_dict)

outputs = tf.keras.layers.Lambda(run_onnx)(inputs)
model = tf.keras.Model(inputs=inputs, outputs=outputs)

# 转换为TFLite模型
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()

with open(output_tflite_path, "wb") as f:
    f.write(tflite_model)
print("转换完成!")

内容的提问来源于stack exchange,提问作者rayen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:03:25