各种乘法操作
torch.matmul 可广播,确保(…,N,M),(…,M,P) --> (…,N,P) 【前面其他维广播成相同维度】
torch.mul 可广播,保证维度相同,然后逐个元素相乘
torch.mm 不可广播,(M×N) × (N×P) → (M×P),二维矩阵相乘
torch.mm(a,b) == a@b == torch.matmul(a,b)
torch.bmm 不可广播,(B×M×N) × (B×N×P) → (B×M×P),二维矩阵相乘
dot() 必须保持维度一致,相乘相加

@ 等价于 torch.matmul()
广播机制
广播的执行过程:
1.如果维度个数不同,则在维度较少的左边补1,使得维度的个数相同。
2.各维度的维度大小不同时,如果有维度为1的,直接将该维拉伸至维度相同
torch.matmul
vector * vector = 相加相乘,最后得到一个数.
在 PyTorch 中,torch.matmul(或用 @ 运算符)支持 广播式矩阵乘法 。它的基本规则是:
如果 a.shape == (…, M, N), b.shape == (…, N, P)
那么 torch.matmul(a, b).shape == (…, M, P)
其中前面的 … 表示任意数量的前导维度,只要它们可以广播对齐即可。
#vector * vector = 相加相乘,最后得到一个数
a = torch.randn(3)
b = torch.randn(3)
c = torch.matmul(a,b)
"""
a: tensor([ 2.6767, -0.8028, 4.1741])
b: tensor([-1.0552, 0.2841, 0.8013])
torch.matmul: tensor(0.2923)
"""
#matrix * vector = 矩阵相乘,matrix第二维需要与vector维度相同
a = torch.randn(3,4)
b = torch.randn(4)
c = torch.matmul(a,b)
"""
a: tensor([[-1.2726, 0.6925, -0.3536, -0.2233],
[-0.5659, 1.5294, 0.1152, -0.9903],
[-0.2644, 0.5090, 0.7059, 0.2046]])
b: tensor([ 0.7085, -0.0952, 1.6654, -0.8139])
torch.matmul: tensor([-1.3747, 0.4513, 0.7733])
****************************************************
"""
# batched matrix x broadcasted vector
a = torch.randn(10, 3, 4)
b = torch.randn(4)
c = torch.matmul(a,b)


679

被折叠的 条评论
为什么被折叠?



