Сложение и умножение матриц в 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+