torch.matmul()、torch.mul()等函数使用法则

一、torch.matmul()函数

torch.matmul()函数可以用于1维向量×1维向量,1维向量×2维矩阵,2维矩阵×1维向量,矩阵相乘等不同情况。现将相关案例进行介绍方便日后回顾。

(1)1维向量×1维向量

torch.matmul()函数此时相当于torch.dot()函数(注意torch.dot()函数只能用于1维向量运算),对1维向量进行内积运算(结果为标量)。

x = torch.tensor([2,3,4])
y = torch.tensor([2,2,2])
out1 = torch.matmul(x,y)  #out1 : tensor(18)
out2 = torch.dot(x,y)     #out2 : tensor(18)

 (2)1维向量×2维矩阵,2维矩阵×1维向量

需要对向量进行增维操作,将其变成2维矩阵,矩阵相乘后,将增加的维度删除。

如m维向量×(m×n)维矩阵,先将向量变成维度为(1×m)矩阵,(1×m),(m×n)->(1×n)矩阵,将维度删除后变成长度为n的1维向量。

x = torch.tensor([2,3])
y = torch.tensor([[1,1,1],[2,2,2]])
out = torch.matmul(x,y)  #out:tensor([8, 8, 8])
print(out.shape)         #torch.Size([3])

如(m×n)维矩阵×n维向量,则将 向量增维成(n×1)矩阵,(m×n),(n×1)->(m×1),降维成m维向量。

x = torch.tensor([[3,3,3],[4,4,4]])
y = torch.tensor([2,2,2])
out = torch.matmul(x,y)  #out:tensor([18, 24])
print(out.shape)         #out.shape:torch.Size([2])

(3)2维矩阵×2维矩阵

矩阵相乘时,torch.matmul()函数等价于torch.mm()函数:(m,n)×(n,t)->(m,t)

x = torch.tensor([[1,1],[3,3],[4,4]])
y = torch.tensor([[2,2,2],[5,5,5]])
out1 = torch.matmul(x,y)    
out2 = torch.mm(x,y)        

二、torch.mul()函数

torch.mul()函数等价于“ * ”可以用于向量×矩阵和矩阵×矩阵,采用逐元素相乘方式,不会相加。

x = torch.tensor([[1,1],[3,3],[4,4]])
y = torch.tensor([2,2])
out1 = torch.mul(x,y)
out2 = x*y

数学上,两个矩阵的按元素乘法称为Hadamard积(Hadamard product)(数学符号⊙)。对于矩阵A\epsilon R^{m\times n},B\epsilon R^{m\times n},矩阵A和B的Hadamard积为:

 A\odot B = \begin{bmatrix} a_{11}b_{11}& a_{12} b_{12}&\cdots &a_{1n} b_{1n}& \\ a_{21}b_{21}& a_{22} b_{22}&\cdots &a_{2n} b_{2n}& \\ \vdots &\vdots & \ddots &\vdots \\ a_{m1}b_{m1}& a_{m2} b_{m2}&\cdots &a_{mn} b_{mn}& \end{bmatrix}

三、torch.mm()函数和torch.mv()函数

torch.mm()用于矩阵×矩阵,torch.mv()用于矩阵×向量

四、torch.bmm()

用于3维矩阵相乘

五、@

  • 若mat1和mat2都是两个一维向量,那么对应操作就是torch.dot()
  • 若mat1是二维矩阵,mat2是一维向量,那么对应操作就是torch.mv()
  • 若mat1和mat2都是两个二维矩阵,那么对应操作就是torch.mm()

你可能感兴趣的:(numpy,python,深度学习)