Как сделать произведение матриц в Пыторхе



В 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?

191   2  

2 ответов:

Вы ищете

torch.mm(a,b)
Обратите внимание, что torch.dot() ведет себя иначе, чем np.dot(). Была некоторая дискуссия о том, что было бы желательно здесь. В частности, torch.dot() рассматривает и a, и b как векторы 1D (независимо от их первоначальной формы) и вычисляет их внутреннее произведение. Ошибка возникает, потому что это поведение делает ваш a вектор длиной 6 и ваш b вектор длиной 2; следовательно, их внутреннее произведение не может быть вычислено. Для умножения матрицы в Пыторч, используй torch.mm(). Numpy'S np.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)
    Ничего не найдено.

Добавить ответ:
Отменить.