Оценка Tensorflow: medium_loss против потерь

В tf.estimator какая разница между average_loss и loss? Я бы догадался по именам, что первое будет вторым, разделенным на количество записей, но это не так; с несколькими тысячами записей последний примерно в три или четыре раза больше первого.


person rwallace    schedule 27.10.2017    source источник


Ответы (2)


Разница между average_loss и loss заключается в том, что один уменьшает SUM по сравнению с потерями партии, а другой уменьшает MEAN по тем же потерям. Следовательно, соотношение — это именно аргумент batch_size вашего input_fn. Если вы пройдете batch_size=1, вы должны увидеть их равными.

Фактические сообщаемые тензоры зависят от конкретного типа tf.Estimator, но они очень похожи, вот исходный код для заголовка регрессии (соответствует tf.DNNRegressor):

training_loss = losses.compute_weighted_loss(unweighted_loss, weights=weights,
                                             reduction=losses.Reduction.SUM)

mean_loss = metrics_lib.mean(unweighted_loss, weights=weights)

Как видите, они вычисляются из одних и тех же тензоров unweighted_loss и weights. Те же значения сообщаются в сводке tensorboard.

person Maxim    schedule 02.11.2017

Фактическое соотношение равно точно 4.0, что соответствует размеру партии.

Когда вы обучаете сеть, вы обычно подаете входные данные в виде пакетов.
В пример, на который вы ссылаетесь, размер партии равен 4, поэтому потери представляют собой сумму потерь по всей партии, а средние потери — это средние потери по всей партии.

person Olivier Moindrot    schedule 02.11.2017