InA*_*ash 3 python numpy pytorch tensor
我对使用*和matmul的两个张量之间的乘法感到困惑。下面是我的代码
import torch
torch.manual_seed(7)
features = torch.randn((2, 5))
weights = torch.randn_like(features)
Run Code Online (Sandbox Code Playgroud)
在这里,我想乘以权重和特征。因此,一种方法如下
print(torch.sum(features * weights))
Run Code Online (Sandbox Code Playgroud)
输出:
tensor(-2.6123)
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用matmul
print(torch.mm(features,weights.view((5,2))))
Run Code Online (Sandbox Code Playgroud)
但是,这里的输出是
tensor([[ 2.8089, 4.6439],
[-2.3988, -1.9238]])
Run Code Online (Sandbox Code Playgroud)
我在这里不明白的是,为什么matmul和通常的乘法在相同的情况下却给出不同的输出。我在这里做错什么了吗?
编辑:当,我正在使用形状特征(1,5)*和matmul输出都是相同的。但是,形状为时,其不相同(2,5)。
使用时*,乘法是按元素进行的;使用时,torch.mm则是矩阵乘法。
例:
a = torch.rand(2,5)
b = torch.rand(2,5)
result = a*b
Run Code Online (Sandbox Code Playgroud)
result将被成形相同a或b即(2,5)
而考虑操作
result = torch.mm(a,b)
Run Code Online (Sandbox Code Playgroud)
它将给出大小不匹配误差,因为这是适当的矩阵乘法(如我们在线性代数中研究的)和a.shape[1] != b.shape[0]。当您应用视图操作时,torch.mm您将尝试匹配尺寸。
在某些特定尺寸的形状为1的特殊情况下,它成为点积,因此sum (a*b)与mm(a, b.view(5,1))
| 归档时间: |
|
| 查看次数: |
3106 次 |
| 最近记录: |