我对使用*和matmul的两个张量之间的乘法感到困惑。
下面是我的代码
import torch
torch.manual_seed(7)
features = torch.randn((2, 5))
weights = torch.randn_like(features)
在这里,我想乘以权重和特征。因此,一种方法如下
print(torch.sum(features * weights))
输出:
tensor(-2.6123)
另一种方法是使用matmul
print(torch.mm(features,weights.view((5,2))))
但是,这里的输出是
tensor([[ 2.8089, 4.6439],
[-2.3988, -1.9238]])
我在这里不明白的是,当
matmul
和通常的乘法相同时,为什么它们给出不同的输出。我在这里做错什么了吗?编辑:当,我正在使用形状
(1,5)
的功能*和matmul
输出都是相同的。但是,当形状为
(2,5)
时,它并不相同。 最佳答案
当您使用*
时,乘法是按元素进行的;当您使用torch.mm
时,乘法是矩阵的乘法。
例子:
a = torch.rand(2,5)
b = torch.rand(2,5)
result = a*b
result
的形状将与a
或b
相同,即(2,5)
而考虑操作result = torch.mm(a,b)
它将给出大小不匹配错误,因为这是适当的矩阵乘法(如我们在线性代数中研究的)和
a.shape[1] != b.shape[0]
。当您在torch.mm
中应用 View 操作时,您试图匹配尺寸。在某种特定尺寸的形状为1的特殊情况下,它成为点积,因此
sum (a*b)
与mm(a, b.view(5,1))
相同关于python - 张量的乘积和通常的乘积之间有什么区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53202440/