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