我正在 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      # <-- Here
)

在这种情况下,它计算批次中所有余弦距离的总和。将其更改为 Reduction.MEAN,您将在整个批次中获得平均损失,这通常是您想要的。

关于Tensorflow tf.losses.cosine_distance 大于 1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48113273/

10-10 20:17