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

带groups参数的TensorFlow Conv1D模型转ONNX遇兼容性问题求助

解决tf2onnx转换带groups参数的Conv1D模型至ONNX时的PartitionedCall错误

问题根源

当TensorFlow Conv1D的groups参数大于2时,tf2onnx无法直接映射为ONNX标准Conv算子,会自动用PartitionedCall封装TensorFlow原生实现,但onnxruntime对该算子的高版本domain(此处为15)缺乏支持,导致加载失败。而不设置groups时,转换逻辑直接映射为标准ONNX Conv,因此无问题。

可行解决方案

1. 强制tf2onnx使用ONNX原生分组卷积算子

转换时指定更高的opset版本(推荐18+),并开启分组卷积支持参数:

python -m tf2onnx.convert --saved-model ./your_saved_model_dir --output converted_model.onnx --opset 18 --enable-conv-groups

这个参数会强制tf2onnx将分组卷积转换为ONNX标准的Conv节点,避免生成PartitionedCall。

2. 升级onnxruntime版本

确保你的onnxruntime版本≥1.14.0,新版本对分组卷积的兼容性更好,也优化了对高opset算子的支持。

3. 手动修复ONNX模型(备选)

如果上述方法无效,可手动修改模型替换PartitionedCall节点:

  • 用onnx.load加载转换后的模型
  • 定位到报错的PartitionedCall节点,替换为ONNX的Conv节点,手动配置groups、输入输出、权重等参数
  • 用onnx.save保存修改后的模型

验证模型有效性

转换后用以下代码测试模型是否正常加载并推理:

import onnxruntime as ort
import numpy as np

# 加载模型
sess = ort.InferenceSession("converted_model.onnx")
input_name = sess.get_inputs()[0].name
output_name = sess.get_outputs()[0].name

# 生成测试输入(匹配你的模型输入形状)
test_input = np.random.randn(1, 200, 64).astype(np.float32)
# 推理
result = sess.run([output_name], {input_name: test_input})
print("推理成功,输出形状:", result[0].shape)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:23:19