如何计算两个张量之间的余弦相似度?

新手上路,请多包涵

我有两个归一化张量,我需要计算这些张量之间的余弦相似度。我如何使用 TensorFlow 做到这一点?

 cosine(normalize_a,normalize_b)

    a = tf.placeholder(tf.float32, shape=[None], name="input_placeholder_a")
    b = tf.placeholder(tf.float32, shape=[None], name="input_placeholder_b")
    normalize_a = tf.nn.l2_normalize(a,0)
    normalize_b = tf.nn.l2_normalize(b,0)

原文由 Matias 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 943
2 个回答

这将完成工作:

 a = tf.placeholder(tf.float32, shape=[None], name="input_placeholder_a")
b = tf.placeholder(tf.float32, shape=[None], name="input_placeholder_b")
normalize_a = tf.nn.l2_normalize(a,0)
normalize_b = tf.nn.l2_normalize(b,0)
cos_similarity=tf.reduce_sum(tf.multiply(normalize_a,normalize_b))
sess=tf.Session()
cos_sim=sess.run(cos_similarity,feed_dict={a:[1,2,3],b:[2,4,6]})

这打印 0.99999988

原文由 Miriam Farber 发布,翻译遵循 CC BY-SA 3.0 许可协议

时代变了。使用最新的 TF API,这可以通过调用 tf.losses.cosine_distance 来计算。

例子:

 import tensorflow as tf
import numpy as np

x = tf.constant(np.random.uniform(-1, 1, 10))
y = tf.constant(np.random.uniform(-1, 1, 10))
s = tf.losses.cosine_distance(tf.nn.l2_normalize(x, 0), tf.nn.l2_normalize(y, 0), dim=0)
print(tf.Session().run(s))

当然 1 - s 是余弦相似度!

原文由 Rajarshee Mitra 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题