python - 使用 tensorflow 获取负余弦距离

标签 python tensorflow cosine-similarity

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

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

最佳答案

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

Note that the function assumes that predictions and labels are already unit-normalized.

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

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

关于python - 使用 tensorflow 获取负余弦距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56359998/

相关文章:

python - 使用多处理python将元素添加到列表

python - 如何确定一个日期是否在另一个日期之前

python - TensorFlow 动态 RNN 未训练

python - 如何在Tensorflow 2中使用CRF层(使用tfa.text)?

math - 余弦相似度LSH和随机超平面

machine-learning - 用于大文档相似性的通用句子编码器

python - 将具有 UTC 偏移量的字符串转换为日期时间对象

python - [姓名标记、标记表中的标记] 的目的是什么

python - 尝试重用 RNN 权重时出错

python - Tensorboard嵌入可视化: what is cosine distance?