在tf.estimator
中,average_loss
和loss
有什么区别?我原本猜测前者应该是后者除以记录数,但事实并非如此;在几千条记录的情况下,后者大约是前者的三到四倍。
回答:
average_loss
和loss
的区别在于,一个是对批次损失进行SUM
(求和)操作,另一个是对相同的损失进行MEAN
(求平均)操作。因此,它们之间的比率正好是你的input_fn
中的batch_size
参数。如果你传入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摘要中。