Как мне умножить следующие 4darrays, чтобы получить 2d массив в Pytorch? - PullRequest
1 голос
/ 22 сентября 2019

Я использую Pytorch.У меня есть массив 4d с формой (C, H, W, K), и я хочу умножить его на другой массив 4d с формой (N, C, H, W).Я хочу, чтобы окончательная двумерная матрица (N, K).Как я должен реализовать это в Pytorch?И, в целом, как работает умножение матриц высшего порядка?Есть ли какие-то правила, о которых следует помнить в целом?

1 Ответ

0 голосов
/ 22 сентября 2019

Вы можете использовать view, чтобы преобразовать 4D-тензоры в простые 2D-матрицы и затем умножить их

x1 = x1.view(-1, x1.shape[-1])  # from C-H-W-k -> CHW-K
x2 = x2.view(x2.shape[0], -1)   # from N-C-H-W -> N-CHW
out = x2 @ x1  # matrix multiplication

Обратите внимание, что сложность view, как правило, минимальнапоскольку обычно это не приводит к копированию и перемещению тензорных значений в памяти - только изменения заголовка тензорного представления.

Для более продвинутого и более гибкого тензорного умножения вы можете взглянуть на einsum.

...