首页 > 解决方案 > 分类交叉熵和二元交叉熵的区别

问题描述

使用 keras 我必须训练一个模型来预测图像属于 0 类还是 1 类。我对二进制和 categorical_cross_entropy 感到困惑。我已经搜索过了,但我仍然很困惑。有人提到,当我们试图预测多类时,我们只使用分类交叉熵,我们应该为此使用 one-hot-encoder 向量。因此,这意味着当我们要使用 binary_cross_entrpoy 进行训练时,我们不需要任何 one-hot-encoded 矢量标签。有些人建议将 one_hot 向量表示为 [0. 1.](如果类为 1)或 [1. 0.](如果类为 0)对于 binary_cross_entropy。我正在使用一个具有分类交叉熵的热编码器 [0 1] 或 [1 0]。我的最后一层是

model.add(Dense(num_classes, activation='softmax'))

    # Compile model
  model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])

标签: pythontensorflowmachine-learningkerascomputer-vision

解决方案


对于2 个类,它们在数学上是相同的,因此是二进制的。换句话说,2 类分类交叉熵与单输出二进制交叉熵相同。举一个更具体的例子,这些是相同的:

model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', ...)
# is the same as
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy', ...)

使用哪一个?为了避免一次性编码分类输出,如果您只有 2 个类,则从编码的角度来看,使用二进制交叉熵会更容易。根据实现,二进制情况可能在计算上更有效。


推荐阅读