3,4轴pytorch中的矩阵乘法

Matrix Multiplication in 3,4 axes pytorch

我有两个形状为 a(16,8,8,64)b(64,64) 的张量。假设,我将 a 的最后一个维度提取到另一个列向量 c 中,我想计算 matmul(matmul(c.T, b), c)。我希望在 a 的前 3 个维度中的每个维度中完成此操作。即最终产品的形状应该是(16,8,8,1)。我怎样才能在 pytorch 中实现这一点?

可按如下方式进行:

row_vec = a[:, :, :, None, :].float()
col_vec = a[:, :, :, :, None].float()
b = (b[None, None, None, :, :]).float()
prod = torch.matmul(torch.matmul(row_vec, b), col_vec)