余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度,在计算机视觉中,余弦距离一般用于度量两个特征向量之间的相似度,其计算公式如下:
当两个特征向量的方向在特征空间中相同,其夹角为0,余弦值为1,此时两个特征向量完全相似。故,余弦距离越大,两特征向量越相似,范围在[-1,1]。
在tensorflow中如何计算两个特征向量集合之间两两点之间的余弦距离呢?
假设,两特征向量集合X1(k,n),X2(m,n),计算代码如下:
import tensorflow as tf
def get_cos_distance(X1, X2):
# calculate cos distance between two sets
# more similar more big
(k,n) = X1.shape
(m,n) = X2.shape
# 求模
X1_norm = tf.sqrt(tf.reduce_sum(tf.square(X1), axis=1))
X2_norm = tf.sqrt(tf.reduce_sum(tf.square(X2), axis=1))
# 内积
X1_X2 = tf.matmul(X1, tf.transpose(X2))
X1_X2_norm = tf.matmul(tf.reshape(X1_norm,[k,1]),tf.reshape(X2_norm,[1,m]))
# 计算余弦距离
cos = X1_X2/X1_X2_norm
return cos
2340

被折叠的 条评论
为什么被折叠?



