如何广播以将这两个矩阵相乘?
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)
我假设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
以获得所需的形状。
为清楚起见,两种方式均不等效。