深度学习之RNN①——余弦相似度

余弦相似度公式

余弦相似度衡量的是2个向量间的夹角大小,通过夹角的余弦值表示结果,因此2个向量的余弦相似度为:
在这里插入图片描述
分子为向量A与向量B的点乘,分母为二者各自的L2相乘,即将所有维度值的平方相加后开方。
余弦相似度的取值为[-1,1],值越大表示越相似。


特征情况分析

(1)夹角为0度
此时向量A与向量B应该是最相似的,余弦相似度应该为1。按照公式(4),我们计算很容易计算出来cosθ=1 \cos \theta = 1 cosθ=1。

(2)夹角为90度
此时余弦相似度为0。

(3)夹角为180度
此时余弦相似度为-1,2个向量的方向完全相反。


相关代码

import tensorflow as tf

X1 = tf.constant([[[[1], [2], [3], [4]],
                   [[5], [6], [7], [8]],
                   [[9], [10], [11], [12]]],

                  [[[1], [2], [3], [4]],
                   [[5], [6], [7], [8]],
                   [[9], [10], [11], [12]]]], tf.float32)


X2 = tf.constant([[[[3], [4], [1], [2]],
                   [[5], [7], [8], [6]],
                   [[9], [12], [11], [10]]],

                  [[[1], [2], [3], [4]],
                   [[5], [6], [7], [8]],
                   [[9], [10], [11], [12]]]], tf.float32)
print(X1.shape)
print(X2.shape)

with tf.Session() as sess:
    #求模
    X1_norm = tf.sqrt(tf.reduce_sum(tf.square(X1), axis=2))
    X2_norm = tf.sqrt(tf.reduce_sum(tf.square(X2), axis=2))

    #内积
    X1_X2 = tf.reduce_sum(tf.multiply(X1, X2), axis=2)
    cosin = X1_X2 / (X1_norm * X2_norm)

    a, b, c, d = sess.run([X1_norm, X2_norm, X1_X2, cosin])
    print("A: ", a)
    print("B: ", b)
    print("C: ", c)
    print("D: ", d)

A:  [[[ 5.477226]
  [13.190906]
  [21.118711]]

 [[ 5.477226]
  [13.190906]
  [21.118711]]]
B:  [[[ 5.477226]
  [13.190906]
  [21.118711]]

 [[ 5.477226]
  [13.190906]
  [21.118711]]]
C:  [[[ 22.]
  [171.]
  [442.]]

 [[ 30.]
  [174.]
  [446.]]]
D:  [[[0.7333333 ]
  [0.9827587 ]
  [0.99103147]]

 [[0.99999994]
  [1.0000001 ]
  [1.0000001 ]]]

这里可以看到一样的向量相似度就很高为1,不一样的相似度低
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值