如何用PyTorch中的矢量乘以矩阵

我正在玩弄PyTorch,目的是学习它,而且我有一个非常愚蠢的问题:如何将矩阵乘以单个矢量?如何用PyTorch中的矢量乘以矩阵

这是我已经试过:

>>> import torch 

>>> a = torch.rand(4,4)

>>> a

0.3162 0.4434 0.9318 0.8752

0.0129 0.8609 0.6402 0.2396

0.5720 0.7262 0.7443 0.0425

0.4561 0.1725 0.4390 0.8770

[torch.FloatTensor of size 4x4]

>>> b = torch.rand(4)

>>> b

0.1813

0.7090

0.0329

0.7591

[torch.FloatTensor of size 4]

>>> a.mm(b)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

RuntimeError: invalid argument 2: dimension 1 out of range of 1D tensor at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensor.c:24

>>> a.mm(b.t())

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

RuntimeError: t() expects a 2D tensor, but self is 1D

>>> b.mm(a)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

RuntimeError: matrices expected, got 1D, 2D tensors at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/generic/THTensorMath.c:1288

>>> b.t().mm(a)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

RuntimeError: t() expects a 2D tensor, but self is 1D

在另一方面,如果我做

>>> b = torch.rand(4,2) 

然后我第一次尝试,a.mm(b),做工精细。所以问题只是我乘以一个矢量而不是一个矩阵---但我该怎么做呢?

回答:

您正在寻找

torch.mv(a,b) 

注意,对于未来,你也可能会发现torch.matmul()有用。 torch.matmul()推断参数的维数,并相应地执行向量之间的点积,矩阵向量或向量矩阵乘法,矩阵乘法或批次矩阵乘法以获得更高阶张量。

回答:

这是一个自我回答@ mexmex的正确和有用的答案。

在PyTorch中,与numpy不同,1D张量与1xN或Nx1张量不可互换。如果我更换

>>> b = torch.rand(4) 

>>> b = torch.rand((4,1)) 

那么我将有一个列向量,并预期与mm矩阵乘法会工作。

但是,这不是必要的,因为如@mexmex指出有一个mv函数矩阵 - 向量乘法,以及一个matmul函数根据其输入的尺寸,它能将适当的功能。

以上是 如何用PyTorch中的矢量乘以矩阵 的全部内容, 来源链接: utcz.com/qa/263901.html

回到顶部