#python #python-3.x #pytorch #matrix-multiplication #tensor
#python #python-3.x #pytorch #умножение матрицы #тензор
Вопрос:
У меня есть два трехмерных тензора Pytorch, один из которых имеет размерность (8, 1, 1024), а другой имеет размерность (8, 59, 77). Я хочу умножить эти два тензора.
Я знаю, что они не могут быть умножены в их текущем состоянии, поэтому я хочу умножать их итеративно и добавлять в один тензор. Второй тензор может быть представлен как (8, 59, 1), когда мы выполняем итерацию по 2-му измерению. В этом состоянии умножаем его на первый тензор формы (8, 1, 1024), в результате чего получаем тензор формы (8, 59, 1024), и, наконец, добавляем все эти 77 выходных данных в один, что приводит к окончательной форме (8, 59, 1024, 77).
Однако у меня возникают проблемы с его реализацией. Кто-нибудь может мне здесь помочь?
Ответ №1:
Если бы я не испортил вычисления, это было бы эквивалентно:
import torch
x = torch.rand(8, 1, 1024)
y = torch.rand(8, 59, 77)
torch.matmul(
y.unsqueeze(-1), # shape = (8, 59, 77, 1)
x.unsqueeze(1) # shape = (8, 1, 1, 1024)
).permute(0, 1, 3, 2) # output shape = (8, 59, 1024, 77)
Обратите внимание, что в этом случае matmul
выполняется пакетное умножение матрицы.