Как сделать произведение матриц в Пыторхе
В numpy я могу сделать простое умножение матрицы следующим образом:
a = numpy.arange(2*3).reshape(3,2)
b = numpy.arange(2).reshape(2,1)
print(a)
print(b)
print(a.dot(b))
Однако, когда я пытаюсь сделать это с тензорами Пирча, это не работает:
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))
Этот код выдает следующую ошибку:
RuntimeError: несогласованный размер тензора при
/ Пользователи / soumith / код / строитель / колесо / pytorch-src / torch / lib / TH / generic / THTensorMath.с: 503
Есть идеи, как умножение матрицы может быть проведено в PyTorch?
2 ответов:
Вы ищете
Обратите внимание, чтоtorch.mm(a,b)torch.dot()ведет себя иначе, чемnp.dot(). Была некоторая дискуссия о том, что было бы желательно здесь. В частности,torch.dot()рассматривает иa, иbкак векторы 1D (независимо от их первоначальной формы) и вычисляет их внутреннее произведение. Ошибка возникает, потому что это поведение делает вашaвектор длиной 6 и вашbвектор длиной 2; следовательно, их внутреннее произведение не может быть вычислено. Для умножения матрицы в Пыторч, используйtorch.mm(). Numpy'Snp.dot(), напротив, более гибок; он вычисляет внутреннее произведение для 1D массивов и выполняет умножение матрицы для 2D массивов.
Основываясь на ответе mexmex, если вы хотите сделать умножение матрицы, вы можете сделать это тремя способами:
AB = A.mm(B) # computes A.B (matrix multiplication) # or AB = torch.mm(A, B) # or even simpler AB = A @ B # Python 3.5+Для поэлементного умножения вы можете просто сделать (если A и B имеют одинаковую форму)
A * B # element-wise matrix multiplication (Hadamard product)
Comments