Tensorflow 估计器:average_loss vs 损失

Tensorflow estimator: average_loss vs loss

tf.estimator中,average_lossloss有什么区别?我会从名称中猜测前者将是后者除以记录数,但事实并非如此;几千条记录,后者大约是前者的三四倍。

实际比例恰好是4.0,对应batch size

训练网络时,您通常会批量输入。
在您提到的 example 中,批量大小为 4,因此损失是整批损失的总和,而平均损失是整批损失的平均值。

average_lossloss的区别在于,一个减少了SUM的批量损失,而另一个减少了MEAN过同样的损失。因此,该比率恰好是 input_fnbatch_size 参数。如果您通过 batch_size=1,您应该看到它们相等。

实际报告的张量取决于tf.Estimator的特定类型,但它们非常相似,回归头here's the source code(对应于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_lossweights 张量计算得出的。向 tensorboard summary 报告了相同的值。