Pytorch中的广播机制(Broadcast)

目录

1. Pytorch中的广播机制

2. 广播机制的理解

3. 两个张量进行广播机制的条件

3.1 两个张量都至少有一个维度

3.2 按从右往左顺序看两个张量的每一个维度,x和y每个对应着的两个维度都需要能够匹配上。

4 .当两个张量满足可广播条件后,具体怎么进行广播

5. 转载


1. Pytorch中的广播机制


如果一个Pytorch运算支持广播的话,那么就意味着传给这个运算的参数会被自动扩张成相同的size,在不复制数据的情况下就能进行运算,整个过程可以做到避免无用的复制,达到更高效的运算。

广播机制实际上是在运算过程中,去处理两个形状不同向量的一种手段。
pytorch中的广播机制和numpy中的广播机制一样, 因为都是数组的广播机制。

2. 广播机制的理解


以数组A和数组B的相加为例, 其余数学运算同理
核心:如果相加的两个数组的shape不同, 就会触发广播机制:
      1)程序会自动执行操作使得A.shape==B.shape;
      2)对应位置进行相加运算,结果的shape是:A.shape和B.shape对应位置的最大值,比如:A.shape=(1,9,4),B.shape=(15,1,4),那么A+B的shape是(15,9,4)

3. 两个张量进行广播机制的条件


3.1 两个张量都至少有一个维度

#像下面这种情况下就不行,因为x不满足这个条件。
x=torch.empty((0,))
y=torch.empty(2,2)


3.2 按从右往左顺序看两个张量的每一个维度,x和y每个对应着的两个维度都需要能够匹配上。

什么情况下算是匹配上了?满足下面的条件就可以:
      a.这两个维度的大小相等
      b. 某个维度 一个张量有,一个张量没有
      c.某个维度 一个张量有,一个张量也有但大小是1


如下举例:

x=torch.empty(5,3,4,1)
y=torch.empty( 3,1,1)


如上面代码中,首先将两个张量维度向右靠齐,从右往左看,两个张量第四维大小相等,都为1,满足上面条件a;第三个维度大小不相等,但第二个张量第三维大小为1,满足上面条件b;第二个维度大小相等都为3,满足上面条件a;第一个维度第一个张量有,第二个张量没有,满足上面条件b,因此两个张量每个维度都符合上面广播条件,因此可以进行广播

两个张量维度从右往左看,如果出现两个张量在某个维度位置上面,维度大小不相等,且两个维度大小没有一个是1,那么这两个张量一定不能进行广播。

4 .当两个张量满足可广播条件后,具体怎么进行广播

x=torch.empty(5,3,4,1)
y=torch.empty( 3,1,1)


如上面代码所示:
     a. 首先第一步,将上面条件b的类型变成条件c的类型,也即是把第二个张量在缺失维度的位置上新增一个维度,维度大小为1,新增的维度如下面所示。

统一前:
x=torch.empty(5,3,4,1)
y=torch.empty( 3,1,1)
统一后:
x=torch.empty(5,3,4,1)
y=torch.empty(1,3,1,1)


     b. 第二步,x、y对应维度不等的位置,把size为1的维度会被广播得和对应维度一样大,比如y中0维的1会变成5,y中2维的1会变成4,最后两个张量的维度大小变成一样,然后再进行张量运算,转变的维度如下所示。

统一前:
x=torch.empty(5,3,4,1)
y=torch.empty(1,3,1,1)
统一后:
x=torch.empty(5,3,4,1)
y=torch.empty(5,3,4,1)

5. 转载

原文链接:https://blog.youkuaiyun.com/flyingluohaipeng/article/details/125107959,侵权删除

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jmu xzh_0618

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值