pytorch 快速計算兩個tensor的歐式距離

2021-10-22 15:38:56 字數 703 閱讀 3582

給定兩個tensor: a 和 b。a的維度為 [m,h],  b的維度為 [n,h]。要求每兩行之間計算他們的歐氏距離,返回乙個維度為[m,n]的tensor。要求不能使用迴圈,也不能擴充複製乙個tensor。

解:將歐式距離的公式展開,根號下面是

所以**為:

def euclideandistances(a,b):

sq_a = a**2

sum_sq_a = torch.sum(sq_a,dim=1).unsqueeze(1) # m->[m, 1]

sq_b = b**2

sum_sq_b = torch.sum(sq_b,dim=1).unsqueeze(0) # n->[1, n]

bt = b.t()

return torch.sqrt(sum_sq_a+sum_sq_b-2*a.mm(bt))

a = torch.rand(3,5)

b = torch.rand(4,5)

print(euclideandistances(a,b))

解釋:其中問題關鍵就在於[m,1 ]+[1, n] 變成了乙個[m,  n]例如:

pytorch計算兩個特徵的余弦相似度

首先,我們要記住一點,兩個特徵的余弦相似度計算出來的範圍是 1,1 其實,對於兩個特徵,它們的余弦相似度就是兩個特徵在經過l2歸一化之後的矩陣內積。如下 import torch import torch.nn.functional as f 假設feature1為n c w h,feature2也...

pytorch模型輸入兩個引數

最近用pytorch需要用到兩個輸入,發現有很多朋友也沒有找到解決方法,今天來分享一下我的做法。def forward self,x1,x2 feature self.conv1 x1 out torch.cat feature,x2 dim 1 out1 self.layer1 out out2 ...

計算網格的兩個定義

科學領域驅使網格構建的源動力是在不同機構間協作的需求 聚集計算資源充分利用閒置的處理器週期的契機 資料量和計算需求超出了現有巨型計算機處理能力。因此計算網格最基本的定義為 在多種體系的動態環境下協作資源共享以及解決同樣問題。如果您把網際網路看作通訊網路,那麼網格計算就是計算網路 用於合用資產之間協調...