2017-06-13 78 views
6

matrislerin nokta ürününü yapmak nasıl böyle basit bir matris çarpımı yapabilirsiniz: Ben PyTorch Tensörlerin ile bu çalışıyorum AncakNumpy olarak PyTorch

a = numpy.arange(2*3).reshape(3,2) 
b = numpy.arange(2).reshape(2,1) 
print(a) 
print(b) 
print(a.dot(b)) 

, bu işe yaramazsa:

a = torch.Tensor([[1, 2, 3], [1, 2, 3]]).view(-1, 2) 
b = torch.Tensor([[2, 1]]).view(2, -1) 
print(a) 
print(a.size()) 

print(b) 
print(b.size()) 

print(torch.dot(a, b)) 

Bu kod aşağıdaki hata atıyor:

RuntimeError: inconsistent tensor size at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensorMath.c:503

tek bir nokta P ürünü olarak yapılabilir nasıl bir fikir yTorch?

cevap

13

Sen torch.dot()np.dot() için farklı davrandığı

torch.mm(a,b) 

Not arıyoruz. here neyin istenebileceği hakkında bazı tartışmalar olmuştur. Özellikle, torch.dot(), hem a hem de b'un 1D vektörleri olarak (orijinal şekillerinden bağımsız olarak) davranır ve iç ürünlerini hesaplar. Hata, bu davranış a 6 uzunluğundaki bir vektör ve b bir uzunluk 2 vektörünü yaptığı için atılır; Bu nedenle içsel ürünleri hesaplanamaz. PyTorch'de matris çarpımı için torch.mm()'u kullanın. Buna karşılık Numpy'nin np.dot() daha esnektir; 1D dizileri için iç ürünü hesaplar ve 2B diziler için matris çarpımını gerçekleştirir. mexmex Yanıta

5

Bina, size üç şekilde yapabiliriz bir matris çarpımı yapmak istiyorsanız: öğeye göre çarpımın için

AB = A.mm(B) # computes A.B (matrix multiplication) 
# or 
AB = torch.mm(A, B) 
# or even simpler 
AB = A @ B # Python 3.5+ 

, sadece (yapabileceği A ve B aynı olup olmadığını şekil)

A * B # element-wise matrix multiplication (Hadamard product)