在 tf.estimator 中, average_loss 和 loss 之间有什么区别?我会从名字中猜到前者将被后者除以记录的数量,但事实并非如此;有几千条记录,后者大约是前者的三到四倍 .
tf.estimator
average_loss
loss
average_loss 和 loss 之间的区别在于,一个减少了批次损失的 SUM ,而另一个减少了 MEAN 相同的损失 . 因此,该比率恰好是 input_fn 的 batch_size 参数 . 如果你传递 batch_size=1 ,你应该看到它们相等 .
input_fn
batch_size
batch_size=1
实际报告的张量取决于 tf.Estimator 的特定类型,但它们非常相似,here's the source code用于回归头(对应于 tf.DNNRegressor ):
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摘要 .
unweighted_loss
weights
实际比率恰好是 4.0 ,它对应于批量大小 .
4.0
在训练网络时,通常会批量输入输入 .在您所指的example中,批量大小为 4 ,因此损失是整批损失的总和,而平均损失是整批损失的平均值 .
4
2 回答
average_loss
和loss
之间的区别在于,一个减少了批次损失的 SUM ,而另一个减少了 MEAN 相同的损失 . 因此,该比率恰好是input_fn
的batch_size
参数 . 如果你传递batch_size=1
,你应该看到它们相等 .实际报告的张量取决于
tf.Estimator
的特定类型,但它们非常相似,here's the source code用于回归头(对应于tf.DNNRegressor
):如您所见,它们是从相同的
unweighted_loss
和weights
张量计算出来的 . 将相同的值报告给tensorboard摘要 .实际比率恰好是
4.0
,它对应于批量大小 .在训练网络时,通常会批量输入输入 .
在您所指的example中,批量大小为
4
,因此损失是整批损失的总和,而平均损失是整批损失的平均值 .