首页 > 解决方案 > 使用 softmax 作为输出函数,而使用 binary_crossentropy 作为损失函数?

问题描述

目前我正在训练一个二元分类模型。我喜欢有两个概率(每个现有类一个)加起来等于 1 的想法。所以我在输出层中使用了 softmax,并获得了非常高的准确度(高达 99.5%)和非常低的损失0,007。在进行一些研究时,我发现二元交叉熵是训练二维分类问题时唯一真正的选择。

现在,当我想使用 softmax 时,如果必须使用分类交叉熵作为损失函数,我会感到困惑。你能帮我理解在二元分类问题中应该使用什么作为损失函数和激活函数吗?为什么?

这是我的代码:

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(10, input_dim=input_dim, activation='sigmoid'))
model.add(tf.keras.layers.Dense(10, activation='sigmoid'))
model.add(tf.keras.layers.Dense(2, activation='softmax'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

标签: pythontensorflowmachine-learningkeras

解决方案


因此,如果每个对象只能代表一个类,那么两者之间就没有区别

model.add(Dense(1, activation='sigmoid'))
loss = tf.keras.losses.BinaryCrossentropy()

model.add(Dense(2, activation='softmax'))
loss = tf.keras.losses.CategoricalCrossentropy()

正如这里提到的,二元交叉熵只是分类交叉熵的一种情况。


推荐阅读