我对模型具有多个输出时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。
有人可以解释这种行为吗?
系统信息