我在Tensorflow上训练神经网络,我使用tf.losses.cosine_distance
作为损失函数。
培训进展顺利,但我担心的是,在培训期间,我有损失的价值> 1.余弦距离(如果输入张量归一化为1),应该总是小于1的值?如何计算损失?这是一批亏损的总和吗?
答案 0 :(得分:2)
正确,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 # <-- Here
)
在这种情况下,它计算批次中所有余弦距离的总和。将其更改为Reduction.MEAN
,您将在整个批次中产生平均损失,这通常是您想要的。
答案 1 :(得分:0)
我认为余弦距离取0到2之间的值,当两个向量相同时为0,当两个向量正交时为1,当两个向量相反时为2,可以尝试一些简单的玩具向量。