Binary_crossentropy 和 Categorical_crossentropy 之间的混淆

Posted

技术标签:

【中文标题】Binary_crossentropy 和 Categorical_crossentropy 之间的混淆【英文标题】:Confusion between Binary_crossentropy and Categorical_crossentropy 【发布时间】:2016-09-22 12:35:18 【问题描述】:

我正在使用深度神经网络进行二元类分类。每当我使用 binary_crossentropy 时,我的模型都没有给出很好的准确性(它更接近随机预测)。但是,如果我通过将输出层的大小设置为 2 来使用分类交叉熵,那么我仅在 1 个时期内就获得了良好的准确度,接近 0.90。谁能解释一下这里发生了什么?

【问题讨论】:

有趣的现象。您能否向我们提供有关您使用的数据集和/或代码的更多详细信息? 我同意 Marcin 的观点,更多信息会很有帮助。使用 binary_corssentropy 和使用 categorical_crossentropy 时,输出层的激活函数是什么?另外,训练集中的类平衡是10比1吗? 我在这两种情况下使用的激活函数都是 softmax。对于这两种情况,模型保持不变。只有在二元交叉熵的情况下,最后一层的大小为 1,而分类的大小为 2。如果需要任何其他信息,请告诉我。 【参考方案1】:

我在尝试在输出层中使用带有softmax 激活的 binary_crossentropy 时也遇到了这个问题。据我所知,softmax 给出了每个类的概率,所以如果你的输出层有 2 个节点,它将类似于p(x1)p(x2)x1 + x2 = X。因此,如果您只有 1 个输出节点,它将始终等于 1.0 (100%),这就是您接近随机预测的原因(老实说,它将接近您在评估集中的类别分布)。

尝试将其更改为另一种激活方法,例如sigmoidrelu

【讨论】:

所以这可能不再相关,但只是出于遗留和清晰的原因:Softmax 不返回概率,尽管 softmax 确实确保输出层中所有节点的输出加到 1(所以在这样它就像一个概率)。 感谢@TheLaurens 的澄清!

以上是关于Binary_crossentropy 和 Categorical_crossentropy 之间的混淆的主要内容,如果未能解决你的问题,请参考以下文章

如何为 binary_crossentropy、activation=sigmoid 和 activation=softmax 指定 model.compile?

自定义 Keras binary_crossentropy 损失函数不起作用

python 神经网络损失 = 'categorical_crossentropy' vs 'binary_crossentropy' isse

用于多类分类时 binary_crossentropy 损失的重要性?

为啥对于 Keras 中的多类分类, binary_crossentropy 比 categorical_crossentropy 更准确?

与 LSTM 中的 sigmoid + binary_crossentropy 相比,使用 softmax + categorical_crossentropy 获得更高的准确度