使用多个输出模型时,val_loss的计算方式有所不同

我对模型具有多个输出时keras如何计算val_loss感兴趣。假设我的模型中有6个softmax输出。 BCE是用于每个输出的损耗函数。我为每个输出分配了相等的权重。

    loss = {
        "softmax_0": 'binary_crossentropy',"softmax_1": 'binary_crossentropy',"softmax_2": 'binary_crossentropy',"softmax_3": 'binary_crossentropy',"softmax_4": 'binary_crossentropy',"softmax_5": 'binary_crossentropy'
    }

    loss_weights = {
            "softmax_0": 1.,"softmax_1": 1.,"softmax_2": 1.,"softmax_3": 1.,"softmax_4": 1.,"softmax_5": 1.
    }

模型编译如下:

model.compile(optimizer=optimizer,loss=loss,loss_weights=loss_weights,metrics=["accuracy"])

当我训练模型时,训练行为符合预期,即总损失等于所有六个损失之和。但是,我认为在验证过程中,val_loss的计算错误。

示例:

loss: 4.2090 - softmax_0_loss: 0.5218 - softmax_1_loss: 0.7349 - softmax_2_loss: 0.7294 - softmax_3_loss: 0.8700 - softmax_4_loss: 0.8834 - softmax_5_loss: 0.4695 - softmax_0_accuracy: 0.8558 - softmax_1_accuracy: 0.7927 - softmax_2_accuracy: 0.7927 - softmax_3_accuracy: 0.7392 - softmax_4_accuracy: 0.7335 - softmax_combined_accuracy: 0.8720 - val_loss: 1.0564 - val_softmax_0_loss: 0.2044 - val_softmax_1_loss: 0.2865 - val_softmax_2_loss: 0.2701 - val_softmax_3_loss: 0.4560 - val_softmax_4_loss: 0.3901 - val_softmax_5_loss: 0.2045 - val_softmax_0_accuracy: 0.9037 - val_softmax_1_accuracy: 0.8676 - val_softmax_2_accuracy: 0.8785 - val_softmax_3_accuracy: 0.7414 - val_softmax_4_accuracy: 0.8244 - val_softmax_combined_accuracy: 0.8969

此处损失为4.2090,六个火车损失之和为0,7349 + 0,7294 + 0,87 + 0,8834 + 0,4695 + 0,5218 = 4.209。 val_loss应该为0,2044 + 0,2865 + 0,2701 + 0,4560 + 0,3901 + 0,2045 = 1.8116,但由于某些原因它为1.0564。

有人可以解释这种行为吗?

系统信息

  • TensorFlow版本:1.14.0
  • Keras版本:2.3.1
  • Python版本:3.6.7
  • CUDA / cuDNN版本:10.0 / 7.4.2
  • GPU模型和内存:Tesla V100,16GB
qkjqkj000 回答:使用多个输出模型时,val_loss的计算方式有所不同

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2665935.html

大家都在问