我正在使用tf.losses.cosine_distance(Y, outputs, axis=2, reduction=tf.losses.Reduction.MEAN)
来衡量标签和预测之间的差异。张量形状为[batch_size, sequence_length, embedding]
。在我的情况下,预测的形状为[16311, 20, 100]
。
我的结果如下。
----------------------epoch1----------------------
train 1 loss 1.1429076
----------------------epoch2----------------------
train 2 loss 0.51511204
----------------------epoch3----------------------
train 3 loss -2.5750072
----------------------epoch4----------------------
train 4 loss -6.685198
----------------------epoch5----------------------
train 5 loss -10.863398
余弦相似度的边界是
[0,1]
。但就我而言,它在一开始就大于1,并在多个时期后变为负数。我不知道为什么会发生这种情况。我的嵌入包含负数。我应该在计算余弦距离之前对其进行归一化吗?
最佳答案
首先,是的,您应该在计算余弦距离之前进行归一化:(来自文档)
请注意,该函数假定预测和标签已经
单位归一化。
但是,余弦相似度函数的范围不是[0,1]
。考虑向量(1 0)
和(-1 0)
。两者都是单位向量,其余弦相似度为-1
。
最后,请注意,损耗是在计算余弦距离,它是1减去余弦相似度,因为损耗的优化操作是最小化而不是最大化(这适用于余弦相似度)。因此,您会期望负数的绝对值越来越大。
关于python - 使用 tensorflow 获得负余弦距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56359998/