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
相关产品推荐
相关产品推荐

