我在使用Keras训练模型时,需要预测图像属于类别0还是类别1。我对二元交叉熵和分类交叉熵感到困惑。尽管我已经搜索过相关信息,但仍然感到迷惑。有人提到,只有在预测多类别时才使用分类交叉熵,并且需要使用独热编码向量。因此,这意味着在使用二元交叉熵训练时,我们不需要任何独热编码的标签。还有人建议,对于二元交叉熵,可以将独热向量表示为[0. 1.](如果类别是1)或[1. 0.](如果类别是0)。我使用的是[0 1]或[1 0]的独热编码器与分类交叉熵。我的最后一层是
model.add(Dense(num_classes, activation='softmax')) # Compile modelmodel.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])
回答:
它们在数学上对于2个类别是相同的,因此是二元的。换句话说,2类别的分类交叉熵与单输出二元交叉熵是相同的。为了给出一个更具体的例子,以下是相同的:
model.add(Dense(1, activation='sigmoid'))model.compile(loss='binary_crossentropy', ...)# 与下面的相同model.add(Dense(2, activation='softmax'))model.compile(loss='categorical_crossentropy', ...)
该使用哪一个? 为了避免对分类输出进行独热编码,如果你只有2个类别,从编码的角度来看,使用二元交叉熵会更简单。根据实现情况,二元情况可能在计算上更有效率。