仅对两个 类 使用 categorical_crossentropy
Using categorical_crossentropy for only two classes
计算机视觉和深度学习文献通常说应该使用 binary_crossentropy
来处理二元(两个 - class)问题,categorical_crossentropy
来处理两个以上的 classes .现在我想知道:是否有任何理由不将后者用于两个 class 问题?
categorical_crossentropy
:
- 每个样本只接受一个正确的 class
- 将采用 "only" 真正的神经元并使用该神经元进行交叉熵计算
binary_crossentropy
:
- 每个样本接受许多正确的 classes
- 将对"all neurons"进行交叉熵计算,考虑到每个神经元可以是两个class,0和1。
一个 2-class 问题可以建模为:
- 2 个神经元输出只有一个正确 class:
softmax + categorical_crossentropy
- 1个神经元输出,一个class为0,另一个为1:
sigmoid + binary_crossentropy
说明
请注意在分类交叉熵(第一个方程)中,y_true
项对于真实神经元仅为 1,使所有其他神经元等于零。
等式可以简化为:ln(y_pred[correct_label])
。
现在注意二元交叉熵(图中第二个方程)有两项,一项用于将 1 视为正确的 class,另一项用于将 0 视为正确的 class。
计算机视觉和深度学习文献通常说应该使用 binary_crossentropy
来处理二元(两个 - class)问题,categorical_crossentropy
来处理两个以上的 classes .现在我想知道:是否有任何理由不将后者用于两个 class 问题?
categorical_crossentropy
:- 每个样本只接受一个正确的 class
- 将采用 "only" 真正的神经元并使用该神经元进行交叉熵计算
binary_crossentropy
:- 每个样本接受许多正确的 classes
- 将对"all neurons"进行交叉熵计算,考虑到每个神经元可以是两个class,0和1。
一个 2-class 问题可以建模为:
- 2 个神经元输出只有一个正确 class:
softmax + categorical_crossentropy
- 1个神经元输出,一个class为0,另一个为1:
sigmoid + binary_crossentropy
说明
请注意在分类交叉熵(第一个方程)中,y_true
项对于真实神经元仅为 1,使所有其他神经元等于零。
等式可以简化为:ln(y_pred[correct_label])
。
现在注意二元交叉熵(图中第二个方程)有两项,一项用于将 1 视为正确的 class,另一项用于将 0 视为正确的 class。