使用softmax作为输出函数,同时使用binary_crossentropy作为损失函数?

mar*_*s93 0 python machine-learning keras tensorflow

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

现在,当我想使用softmax时,我是否必须使用classification_crossentropy作为损失函数,我感到很困惑。您能帮助我了解二元分类问题中应该使用什么作为损失函数和激活函数以及为什么?

这是我的代码:

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'])
Run Code Online (Sandbox Code Playgroud)

小智 5

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

model.add(Dense(1, activation='sigmoid'))
loss = tf.keras.losses.BinaryCrossentropy()
Run Code Online (Sandbox Code Playgroud)

model.add(Dense(2, activation='softmax'))
loss = tf.keras.losses.CategoricalCrossentropy()
Run Code Online (Sandbox Code Playgroud)

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