Tensorflow 估计器:average_loss vs 损失
Tensorflow estimator: average_loss vs loss
在tf.estimator
中,average_loss
和loss
有什么区别?我会从名称中猜测前者将是后者除以记录数,但事实并非如此;几千条记录,后者大约是前者的三四倍。
实际比例恰好是4.0
,对应batch size
训练网络时,您通常会批量输入。
在您提到的 example 中,批量大小为 4
,因此损失是整批损失的总和,而平均损失是整批损失的平均值。
average_loss
和loss
的区别在于,一个减少了SUM
的批量损失,而另一个减少了MEAN
过同样的损失。因此,该比率恰好是 input_fn
的 batch_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_loss
和 weights
张量计算得出的。向 tensorboard summary 报告了相同的值。
在tf.estimator
中,average_loss
和loss
有什么区别?我会从名称中猜测前者将是后者除以记录数,但事实并非如此;几千条记录,后者大约是前者的三四倍。
实际比例恰好是4.0
,对应batch size
训练网络时,您通常会批量输入。
在您提到的 example 中,批量大小为 4
,因此损失是整批损失的总和,而平均损失是整批损失的平均值。
average_loss
和loss
的区别在于,一个减少了SUM
的批量损失,而另一个减少了MEAN
过同样的损失。因此,该比率恰好是 input_fn
的 batch_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_loss
和 weights
张量计算得出的。向 tensorboard summary 报告了相同的值。