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

在C#工业应用中调用Python图像分类模型时遇形状不兼容错误

问题分析与解决方案

错误根源

错误信息Incompatible shapes: [1,1,1,32] vs. [1,200,150,3]明确说明:你在C#代码中选择的输入节点是卷积操作的输出节点(形状[1,1,1,32]),但喂入的是原始图像张量(形状[1,200,150,3]),两者形状完全不匹配,导致运算失败。

解决步骤

1. 获取模型的真实输入节点名称

在Python训练代码中,添加一行打印输入节点名称的代码:

print(model.input.name)

运行后会得到类似sequential_1_input:0的输出(注意去掉末尾的:0,只取节点名称部分,比如sequential_1_input)。

2. 修改C#代码中的输入节点

将C#代码里的输入节点替换为真实输入节点:

// 替换原来的input_op定义,这里的名称以Python输出为准
var input_op = graph.OperationByName("sequential_1_input");  

3. 验证输入张量形状一致性

确保ImageToTensor函数中的imgHeight和imgWidth与Python训练时的img_height、img_width完全一致,不能有任何数值差异。

4. 确认输出节点名称(可选)

如果输出节点也存在名称错误,可以在Python中打印输出节点名称:

print(model.output.name)

再对应修改C#中的output_op定义。

修正后的核心代码示例

var modelfile = "D:\\Soft\\Soft\\C#\\LastVersion\\frozen_model.pb";
var labels = new[] { "ORANGE", "BANANA", "APPLE", "MIX" };

var graph = new Graph().as_default();
graph.Import(File.ReadAllBytes(modelfile));

using (var session = tf.Session(graph))
{
    var tensor = ImageToTensor(RutaImagen);

    // 使用正确的输入节点名称
    var input_op = graph.OperationByName("sequential_1_input");  
    var output_op = graph.OperationByName("sequential_1/dense_1_2/Softmax");  

    var result = session.run(output_op.outputs[0], (input_op.outputs[0], tensor));

    // 后续处理代码不变...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 23:34:58