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,可以!
据此判断,两个张量可以通过广播机制运算!
原文地址:https://blog.csdn.net/BUAAer_xuyang/article/details/140561240
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!