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

TensorFlow二分类CNN设2个输出神经元报shape不匹配错误如何解决

错误原因

你的标签是0和1组成的一维数组,形状为(样本数,)或(样本数, 1),而输出层设置2个神经元时,模型输出形状为(样本数, 2),二者维度不匹配,因此触发报错。

解决方案

方案1:保留2个输出神经元,用softmax实现二分类

需要修改3处代码:

  • 对标签做独热编码转换,在__main__块中加载完标签后添加如下代码:
real_train_classes = tf.one_hot(real_train_classes, depth=2).numpy()
real_test_classes = tf.one_hot(real_test_classes, depth=2).numpy()
  • 修改输出层激活函数为softmax:
model.add(keras.layers.Dense(2, activation='softmax'))
  • 修改损失函数为分类交叉熵:
model.compile(optimizer=optimiser,
             loss="categorical_crossentropy",
             metrics=["accuracy"])

方案2:使用1个输出神经元实现二分类(更轻量化,推荐)

这个方案不需要修改标签格式,仅需修改2处代码即可正常运行:

  • 输出层设置1个神经元,激活函数用sigmoid:
model.add(keras.layers.Dense(1, activation='sigmoid'))
  • 损失函数保持原来的binary_crossentropy即可。

额外注意事项

你代码中plot_history函数存在两处笔误:axs[0].set.set_title多了一个.set,setlegend应该为legend,不影响当前训练运行,后续绘制训练曲线时修正即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:24:01