Сложение и умножение матриц в PyTorch

Часть 1

IN:

A = torch.tensor([1,2])

B = torch.tensor([[1,2],[2,4]])

print(A+B)

OUT:

tensor([[2, 4],
        [3, 6]])

Вопрос:

Почему Torch не ругается, хотя матрицы разных размеров?


Часть 2

IN:

A = torch.tensor([[2,2],[1,2],[2,4]])

B = torch.tensor([[-7,5],[2,-1]])

print(A*B)

OUT:

RuntimeError

Вопрос:

И почему я не могу перемножить матрицы A(3x2) и B(2x2)?


Ответы (1 шт):

Автор решения: Кирилл Малышев

Потому что операции + и * выполняют поэлементное действие. В первом случае у вас одномерный вектор длины 2 прибавляется к каждому вектору длины 2 двумерного вектора размера (2, 2).

В втором случае у вас оба операнда двумерные, но имеют разные размеры, поэтому их невозможно поэлементно никак перемножить. Чтобы выполнить умножение матрицы по правилу "строка на столбец", делайте одним из способов:

AB = A.mm(B)

AB = torch.mm(A, B)

AB = torch.matmul(A, B)

AB = A @ B # Python 3.5+

https://stackoverflow.com/a/44527447/7485582

→ Ссылка