首先,我们要记住一点,两个特征的余弦相似度计算出来的范围是**[-1,1]**
其实,对于两个特征,它们的余弦相似度就是两个特征在经过L2归一化之后的矩阵内积。
代码如下:
import torch
import torch.nn.functional as F
#假设feature1为N*C*W*H, feature2也为N*C*W*H(基本网络中的tensor都是这样)
feature1 = feature1.view(feature1.shape[0], -1)#将特征转换为N*(C*W*H),即两维
feature2 = feature2.view(feature2.shape[0], -1)
feature1 = F.normalize(feature1) #F.normalize只能处理两维的数据,L2归一化
feature2 = F.normalize(feature2)
distance = feature1.mm(feature2.t())#计算余弦相似度