pytorch中的广播机制

一、什么是广播机制

在线性代数中,矩阵的加减、对应元素乘除等操作要求形状一致。为方便代码编写,pytorch引入了广播机制,使得部分不同形状的矩阵、张量也可以进行这些运算。

例如,某个张量的形状为3*1*4,另一个张量的形状为2*1*4*4。两者通过广播机制就可以相加减,最后能得到一个2*3*4*4形状的张量。但是,能够运用广播机制的两个张量有一定的限制,文章马上会介绍广播机制是如何工作的,然后就可以显而易见的看出这些限制具体是什么样的

二、理解张量的另一种方法

我们通常把一维张量理解为一个向量,二维张量理解为一个矩阵,三维向量理解为一个魔方一样的立体结构。这种方法很直观,但只能对三维及以下的张量适用,而且想象这些结构的变换属实过于烧脑。

我们知道张量在C语言中对应着指针数组这一存在。指针数组其实是一个树状结构,所以,把张量按照树状展开理解也是一种很方便的方法。

例如,一个3*2*4的张量,就可以按照上面这张图的方法理解,24个元素如此排列。

三、运行广播机制 

如果有两个张量,形状分别是3*1*4和2*1*4*4。则从两个张量的末尾维度看去,如果两者的末尾维度长度一致,如这里都是4,则不进行广播;如果有一个维度的长度是1,则进行复制。下面这张图可以直观地解释广播机制是如何运行的:

可以看出,广播机制的本质是末尾对齐,然后通过镜像复制把长度为一的部分变为长度一样的!

四、得到广播机制的条件 

必须满足两个条件:

1、两个张量末尾维度长度相等

2、两个张量末尾维度有一个为1

例如,形状如3*1*4和2*1*4*4的两个矩阵

末尾第一维度,长度均为4,可以!

末尾第二维度,前者的长度为1,可以!

末尾第三维度,后者的长度为1,可以!

据此判断,两个张量可以通过广播机制运算!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值