我在Tensorflow上训练一个神经网络,并使用tf.losses.cosine_distance
作为损失函数。
训练过程进行得很顺利,但我的担忧是,在训练过程中损失值> 1。如果输入张量被归一化为1,那么余弦距离应该始终小于1吗?损失是如何计算的?它是一个批次中损失的总和吗?
回答:
没错,tf.losses.cosine_distance
有一个reduction
参数,默认值为reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
:
cosine_distance( labels, predictions, dim=None, weights=1.0, scope=None, loss_collection=tf.GraphKeys.LOSSES, reduction=Reduction.SUM_BY_NONZERO_WEIGHTS # <-- 这里)
在这种情况下,它计算批次中所有余弦距离的总和。将其更改为Reduction.MEAN
,你将得到批次中的平均损失,这通常是你想要的效果。