当我有2个输出时,二进制交叉熵没有给出相似的结果

时间:2019-07-03 14:23:32

标签: tensorflow keras

我正在对具有2个输出的分类器使用非线性损失函数。第一个损失为binary_crossentropy(),第二个损失被加权为(1+LAM*stds),其中stds是模型的第二个输出。

我发现,即使"binary_crossentropy"设置为0,具有1个输出和LAM损失的模型的性能也比我的模型好。在这种情况下,两个模型应该具有相同的性能,但是总是更糟。

有什么区别?

def weightedBCE(y_true, y_pred):
    assert y_pred.shape[1] == 2
    y_pred_val = y_pred[:,0]
    stds = y_pred[:,1]
    bce = K.binary_crossentropy(y_true[:,0], y_pred_val)
    loss = bce * (1. + LAM*stds )
    return loss

当我进行此训练时,我使用如下输出:

model.predict([X_test1, X_test2, X_test3])[:,0]

对于标准模型,我这样做:

model.predict([X_test1, X_test2, X_test3])

编辑: 当我有2个分类器输出时,我做了一个简单的测试,但是损失仅应用于其中一个:

def weightedBCE(y_true, y_pred):

    return K.mean(K.binary_crossentropy(y_true[:,0], y_pred[:,0]), axis=-1)

它仍然无法像我只有1条损失的输出那样提供相同的结果:

def BCE(y_true, y_pred):
    bce = K.mean(K.binary_crossentropy(y_true, y_pred), axis=-1)
    return bce

0 个答案:

没有答案