Tensorflow tf.losses.cosine_distance大于1

时间:2018-01-05 12:04:00

标签: tensorflow machine-learning neural-network

我在Tensorflow上训练神经网络,我使用tf.losses.cosine_distance作为损失函数。

培训进展顺利,但我担心的是,在培训期间,我有损失的价值> 1.余弦距离(如果输入张量归一化为1),应该总是小于1的值?如何计算损失?这是一批亏损的总和吗?

2 个答案:

答案 0 :(得分:2)

正确,tf.losses.cosine_distancereduction参数,默认情况下等于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,可以尝试一些简单的玩具向量。