Вы можете использовать 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
.