Мне интересно, как 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
- Модель и память графического процессора: Tesla V100, 16 ГБ