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

TensorFlow转ONNX失败:RFFT/FFT仅支持ComplexAbs而非Real/Imag

问题描述

尝试将TensorFlow SPICE模型通过tf2onnx转换为ONNX格式时遇到错误,执行的转换命令及错误信息如下:

转换SavedModel格式:

python -m tf2onnx.convert --saved-model .\spice --output model.onnx --opset 11 --verbose

错误日志片段:

2023-04-08 18:33:10,811 - ERROR - tf2onnx.tfonnx: Tensorflow op [Real: Real] is not supported
2023-04-08 18:33:10,812 - ERROR - tf2onnx.tfonnx: Tensorflow op [Imag: Imag] is not supported
2023-04-08 18:33:10,879 - ERROR - tf2onnx.tfonnx: Unsupported ops: Counter({'Real': 6, 'Imag': 6})
...
ValueError: make_sure failure: Current implementation of RFFT or FFT only allows ComplexAbs as consumer not {'Real', 'Imag'}

转换TensorFlow Lite模型时出现相同错误:

python -m tf2onnx.convert --opset 16 --tflite .\lite-model_spice_1.tflite --output spice.onnx

错误日志片段:

ValueError: make_sure failure: Current implementation of RFFT or FFT only allows ComplexAbs as consumer not {'Imag', 'Real'}

环境信息:Windows 11、Python 3.10.10、TensorFlow 2.12,首次接触TensorFlow/ONNX,咨询以下问题:

  1. 错误与TensorFlow、tf2onnx还是模型相关?
  2. 更换环境(如Linux或其他TF版本)能否解决?
  3. 如何修复该问题?

解决方案与解答
  1. 错误来源分析
    这个错误核心是tf2onnx的实现限制:模型中使用了Real/Imag操作提取复数张量的实部和虚部,但当前tf2onnx对RFFT/FFT的转换逻辑仅支持后续接ComplexAbs操作,不支持直接提取实部、虚部的场景,和TensorFlow本身关系不大。

  2. 更换环境能否解决
    更换Linux系统大概率无效;升降TensorFlow版本也很难解决问题——因为核心限制在tf2onnx的转换逻辑里,除非新版本tf2onnx修复了该问题,或者TensorFlow对RFFT/Real/Imag的实现逻辑有本质变更(可能性极低)。

  3. 修复方法

  • 升级tf2onnx到最新版本:优先执行pip install --upgrade tf2onnx,检查是否已修复Real/Imag算子的支持,或放宽了RFFT后续节点的限制。
  • 修改模型结构:如果无法升级tf2onnx,可尝试修改原模型,用张量切片替代原生Real/Imag算子——复数张量通常会将实部和虚部拼接在最后一维,直接切片即可获取对应部分。
  • 自定义ONNX算子:若转换后仍有不支持的算子,可为Real/Imag注册自定义ONNX算子,在ONNX Runtime中实现对应逻辑,但需要一定开发成本。
  • 尝试其他转换工具:比如使用TensorFlow原生ONNX导出功能(若支持),或尝试ONNX-TensorFlow反向转换工具,但这类工具的兼容性通常不如tf2onnx。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:42:30