【问题标题】:Getting negative cosine distance using tensorflow使用张量流获得负余弦距离
【发布时间】:2019-10-15 00:46:38
【问题描述】:

我正在使用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,并且在几个 epoch 后变为负数。我想知道为什么会发生这些。

我的嵌入包含负数。我应该在计算余弦距离之前对其进行归一化吗?

【问题讨论】:

    标签: python tensorflow cosine-similarity


    【解决方案1】:

    首先,是的,您应该在计算余弦距离之前进行归一化:(来自文档)

    请注意,该函数假定预测和标签已经 单位归一化。

    但是,余弦相似度函数的范围不是[0,1]。考虑向量(1 0)(-1 0)。两者都是单位向量,它们的余弦相似度为-1

    最后,请注意损失是计算余弦距离,它是 1 减去余弦相似度,因为损失的优化操作是最小化而不是最大化(这适用于余弦相似度)。所以你会期望得到的负数的绝对值越来越大。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-10
      • 2017-12-12
      • 2016-08-23
      • 2019-11-10
      • 2016-12-05
      • 2021-09-09
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多