Определение Tensorflow val_loss с несколькими выходами - PullRequest
1 голос
/ 17 января 2020

При обучении модели (с керасом), что измеряет val_loss (как показано в журнале тренировок кераса) / epoch_loss (как показано на тензорной доске) метри c, когда модель имеет несколько выходов ? И если это имеет значение, то также, если эти выходы взвешены?
И я имею в виду несколько отдельных выходов (например, 6 тензоров формы ()), а не один выход с несколькими значениями (например, 1 тензор с формой (6)) , (Хотя ответ на последний может быть полезен для будущих гуглеров.)

Сначала я думал, что это будет средневзвешенное значение всех выходных данных. Но мои наблюдения не согласны с этим предположением. Ниже приведен скриншот тензорной доски, показывающий потери при проверке каждого из выходов, а также значение epoch_loss (также при проверке). Как видите, на каждом выходе потери увеличиваются, но значение epoch_loss постоянно уменьшается.

Я также подтвердил, что эти показатели соответствуют показателям val_* (val_1_loss, val_2_loss). , ..., val_loss) показано в журнале тренировок keras.

tensorboard output

Обратите внимание, что мне не интересно выяснять, почему увеличение потерь или способы исправить модель или что-нибудь. Я знаю, что это плохая модель. Это была всего лишь одна модель из поиска гиперпараметров, которую я выбрал в качестве хорошего примера для вопроса. Хотя в настоящее время я использую val_loss в качестве показателя оптимизации поиска гиперпараметра c, что из этих данных не кажется хорошей идеей. Я мог создать свой собственный показатель c, чтобы получить взвешенное среднее значение для всех выходов, но хотел понять, что на самом деле измеряет val_loss.

Ответы [ 2 ]

1 голос
/ 17 января 2020

что измеряет val_loss / epoch_loss metri c, когда модель имеет несколько выходов? И если это имеет значение, то также, если эти выходы взвешены?

Значение потерь вычисляется как взвешенная сумма потерь для нескольких выходов с использованием коэффициентов loss_weights. Если веса не определены, потери - это просто сумма потерь.

Вот ссылки в коде:

0 голосов
/ 18 января 2020

После выяснения, как заставить Tensorflow перейти в активный режим и подключить отладчик, я нашел причину расхождения.

Для начала, документация keras model.compile() в параметре loss:

Значение потерь, которое будет минимизировано моделью, будет затем суммой всех индивидуальных потерь.

Но тогда loss_weights параметр добавляет:

Значение потери, которое будет минимизировано моделью, будет затем взвешенной суммой всех индивидуальных потерь, взвешенных по коэффициентам loss_weights.

Итак, согласно этому, мы должны увидеть простую взвешенную сумму. Но, как показано в вопросе, это не так. Таким образом, должен учитываться другой источник потерь.

Ответ в моем случае был от потерь слоев.
Отдельные слои в модели могут иметь свои собственные потери, которые можно получить доступ через layer.losses(). Значения потерь из этих слоев суммируются в общую потерю, используемую для оптимизации модели, и сообщаются в val_loss metri c.
В частности, у меня был слой, который использовал регуляризатор, и штрафы примененные регуляризатором отслеживаются как потери.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...