pytorch中各种乘法操作

各种乘法操作

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值