当我们使用实值训练目标时,为什么使用二进制交叉熵损失函数进行的神经网络训练会停滞不前?

时间:2018-11-20 12:46:31

标签: python keras neural-network

假设我们有一个二进制分类问题,其中训练目标不在{0,1}中,而在[0,1]中。我们使用以下代码在Keras中训练一个简单的分类器:

model = Sequential()
model.add(Dense(100, input_shape=(X.shape[1],), activation='relu'))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='rmsprop')
model.fit(X,y)

如果我们通过了真实的训练目标(在[0,1]中),则训练几乎不会继续进行,陷入其初始损失值附近;但是如果我们将目标量化为{0,1},则效果会更好,可以迅速减少训练损失。

这是正常现象吗?是什么原因

编辑:Here是可重复的实验。 这是获得的图:

enter image description here

1 个答案:

答案 0 :(得分:0)

您声明要解决二进制分类任务,目标应为 binary 值,即{0,1}。

但是,如果您的目标不是[0,1]中的某个浮点值,则实际上是在尝试执行回归

除其他外,这会更改您的损失功能的要求。 参见Tensorflow Cross Entropy for Regression?,其中更详细地讨论了交叉熵损失用于回归的用法。