我正在 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/