`binary_crossentropy`定义不一样?

时间:2018-01-19 10:37:20

标签: python tensorflow keras

在我的神经网络中,如果我用以下代码编译它:

D.compile(loss="binary_crossentropy", optimizer=opt_D)

它的效果很好,但如果我这样做:

def make_loss_D(c):
    def loss_D(y_true, y_pred):
        #return c * K.binary_crossentropy(y_pred, y_true)
        return c * K.mean (K.binary_crossentropy(y_pred, y_true))
    return loss_D

D.compile(loss=[make_loss_D(c=1.0)], optimizer=opt_D)

损失完全不同,神经网络的预测非常强,接近1或0。

我喜欢第一个例子中看到的行为,但在深入研究https://github.com/keras-team/keras/blob/master/keras/losses.py代码后,我不明白为什么两者会如此不同。在我的代码中调整c的值以使第一个纪元后的两个损失匹配根本没有帮助。

定义的损失有何不同,为什么第二个损失如此严重?

编辑:

在修改y_predy_true和轴的平均值后,自定义函数也可以使用。

def make_loss_D(c):
    def loss_D(y_true, y_pred):
        return c * K.mean (K.binary_crossentropy(y_true, y_pred), axis=-1)
    return loss_D

损失仍然不一样,原因可能是什么?

0 个答案:

没有答案