PyTorch транслирует умножение 4D и 2D матрицы? - PullRequest
0 голосов
/ 09 апреля 2020

Как вещать, чтобы умножить эти две матрицы вместе?

x: torch.Size([10, 120, 180, 30]) # (N, H, W, C)
W: torch.Size([64, 30]) # (Y, C)

Выходные данные должны быть:

(10, 120, 180, 64) == (N, H, W, Y)

1 Ответ

1 голос
/ 09 апреля 2020

Полагаю, x - это какой-то пример с партиями, а w - соответствующий вес. В этом случае вы можете просто сделать:

out = x @ w.T

, что является тензорным умножением , а не поэлементным. Вы не можете выполнить поэлементное умножение, чтобы получить такую ​​форму, и эта операция не будет иметь смысла. Все, что вы могли бы сделать, - это каким-то образом unsqueeze обеим матрицам трансформировать их форму и применить некоторые операции к измерению, которые вы по какой-то причине не хотите, например:

x : torch.Size([10, 120, 180, 30, 1])
W: torch.Size([1, 1, 1, 30, 64]) # transposition would be needed as well

После таких unsqueezing Вы можете сделать x*w и sum или mean вдоль третьего dim, чтобы получить желаемую форму.

Для ясности оба способа не эквивалентны.

...