torch.matmul()函数可以用于1维向量×1维向量,1维向量×2维矩阵,2维矩阵×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维矩阵,矩阵相乘后,将增加的维度删除。
如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])
矩阵相乘时,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()函数等价于“ * ”可以用于向量×矩阵和矩阵×矩阵,采用逐元素相乘方式,不会相加。
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和B的Hadamard积为:
torch.mm()用于矩阵×矩阵,torch.mv()用于矩阵×向量
用于3维矩阵相乘