pytorch常用乘法考察

pytroch中乘法,大致分为两类:

  • 函数乘法 torch.mul(a,b)
  • 对象调用的方法 a.mul(b)
    本文按照使用频率排序,梳理了相关乘法的使用场景。

1. 运算符 *

  • 若矩阵*单个数,则element-wise
  • 矩阵*向量,符合广播规则

广播规则

torch.Tensor(4,3)*torch.Tensor(4)
#若矩阵*一维向量,则列对齐(列数相等)
torch.Tensor(4,3)*torch.Tensor(3,1)
#若矩阵*NX1维向量,则行对齐(行数相等)
  • 矩阵*矩阵,只能element-wise

2.矩阵逐元素(Element-wise)乘法 torch.mul()

torch.mul(mat1, other, out=None)

其中 other 乘数可以是标量,也可以是任意维度的矩阵, 只要满足最终相乘满足广播规则即可。
大致和*相似

3.多维矩阵乘法 torch.matmul()

torch.matmul(input, other, out=None)

支持broadcast操作,使用起来比较复杂。针对多维数据 matmul() 乘法,可以认为该乘法使用使用两个参数的后两个维度来计算,其他的维度都可以认为是batch维度。

4.作为神经元的nn.Linear()

self.L=nn.Linear(10,5)
x=torch.Tensor(100,10)
self.L(x)# 输出维度100,5

相当于矩阵相乘: x × s l e f . L x\times slef.L x×slef.L

输入x
slef.L
输出

5.二维矩阵乘法 torch.mm()

torch.mm(mat1, mat2, out=None)

其中 m a t 1 ∈ R n × m , m a t 2 ∈ R m × d , o u t ∈ R n × d mat1\in R^{n\times m},mat2\in R^{m\times d},out\in R^{n\times d} mat1Rn×m,mat2Rm×d,outRn×d
该函数一般只用来计算两个二维矩阵的矩阵乘法,并且不支持broadcast操作。

6.三维矩阵乘法 torch.bmm()

torch.bmm(mat1, mat2, out=None)

其中 m a t 1 ∈ R b × n × m , m a t 2 ∈ R b × m × d , o u t ∈ R b × n × d mat1\in R^{b\times n\times m},mat2\in R^{b\times m\times d},out\in R^{b\times n\times d} mat1Rb×n×m,mat2Rb×m×d,outRb×n×d
主要是多了外层batch(一组多个样本同时训练),该函数的两个输入必须是三维矩阵并且第一维相同(表示Batch维度), 不支持broadcast操作

7.矩阵逐元素(Element-wise)乘法 torch.mul()

torch.mul(mat1, other, out=None)

其中 other 乘数可以是标量,也可以是任意维度的矩阵, 只要满足最终相乘是可以broadcast的即可。

8.einsum

爱因斯坦求和??太过于稀有,暂时跳过

参考:
einsum
einsum2
pyt乘法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值