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

使用tf2onnx导出TensorFlow/Keras模型至ONNX时遇报错求助

TensorFlow/Keras模型转ONNX时explicit_paddings错误的解决方法

问题详情

模型结构

Model: "sequential_6"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 rescaling_6 (Rescaling)     (None, 256, 256, 1)       0         
                                                                 
 conv2d_18 (Conv2D)          (None, 256, 256, 16)      160       
                                                                 
 max_pooling2d_18 (MaxPooli  (None, 128, 128, 16)      0         
 ng2D)                                                           
                                                                 
 conv2d_19 (Conv2D)          (None, 128, 128, 32)      4640      
                                                                 
 max_pooling2d_19 (MaxPooli  (None, 64, 64, 32)        0         
 ng2D)                                                           
                                                                 
 conv2d_20 (Conv2D)          (None, 64, 64, 64)        18496     
                                                                 
 max_pooling2d_20 (MaxPooli  (None, 32, 32, 64)        0         
 ng2D)                                                           
                                                                 
 flatten_6 (Flatten)         (None, 65536)             0         
                                                                 
 dense_12 (Dense)            (None, 128)               8388736   
                                                                 
 dense_13 (Dense)            (None, 904)               116616    
                                                                 
=================================================================
Total params: 8528648 (32.53 MB)
Trainable params: 8528648 (32.53 MB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________

导出代码

onnx_model, _ = tf2onnx.convert.from_keras(model, output_path="model.onnx")

错误信息

WARNING:tf2onnx.tf_loader:Could not search for non-variable resources. Concrete function internal representation may have changed.
ERROR:tf2onnx.tf_utils:pass1 convert failed for name: "sequential_6/conv2d_18/Conv2D"
op: "Conv2D"
input: "sequential_6/rescaling_6/add"
input: "sequential_6/conv2d_18/Conv2D/ReadVariableOp"
...
, ex=Could not infer attribute `explicit_paddings` type from empty iterator

解决步骤

  • 升级tf2onnx到最新版本
    旧版本的tf2onnx可能对部分TensorFlow层的支持存在缺陷,执行以下命令升级:

    !pip install --upgrade tf2onnx
    
  • 显式指定输入签名
    动态输入形状可能导致转换时无法正确推断padding参数,给模型指定明确的输入张量规格:

    import tensorflow as tf
    import tf2onnx
    
    # 定义匹配模型输入的签名
    input_signature = [tf.TensorSpec([None, 256, 256, 1], tf.float32, name="input")]
    onnx_model, _ = tf2onnx.convert.from_keras(
        model, 
        input_signature=input_signature, 
        output_path="model.onnx"
    )
    
  • 先保存为SavedModel再转换
    绕过Keras直接转换的兼容性问题,先将模型保存为TensorFlow官方的SavedModel格式,再用tf2onnx命令行工具转换:

    # 保存模型到本地目录
    model.save("saved_model_dir")
    

    执行命令行转换:

    !python -m tf2onnx.convert --saved-model saved_model_dir --output model.onnx
    
  • 检查Conv2D层的padding设置
    如果模型中Conv2D层使用了padding="explicit"或自定义padding配置,尝试改为"same"或"valid"这类标准padding类型,更易被tf2onnx兼容:

    # 示例:修改Conv2D层的padding参数
    tf.keras.layers.Conv2D(16, (3,3), padding="same", activation="relu")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:26:04