val_loss рассчитывается по-разному при использовании нескольких выходных моделей - PullRequest
0 голосов
/ 11 марта 2020

Мне интересно, как 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 ГБ
...