broadcast自动扩展
两个特点:可以自动扩展维度,且不会copy数据
方法:从最后一个维度开始匹配,如果前面没有维度,会在前面插入一个维度size=1;自动调用Expand函数使得维度size相同。
注意broadcast并不是函数,而是在不同size的tensor之间进行加减操作会自动进行的一种机制>
eg:
已有feature map:[4,32,14,14],如何将一个一维的bias:[32]与之叠加。
接下来看看一维的bias如何和四维的feature map叠加:
首先,手动插入两个维度表示bias:[32,1,1]
[4,32,14,14]
[32,1 ,1]
在前面补一个维度:
[4,32,14,14]
[1,32,1 ,1]
自动调用Expand函数使得维度size相同:
[4,32,14,14]
[4,32,14,14]
原理
图片引自:pytorch学习笔记(六)——pytorch进阶教程之broadcast自动扩展_pytorch的broastcast_南风渐起的博客-CSDN博客
从已经学过的知识我们可以知道,broadcast相当于unsqueeze函数和expand函数的配合使用,那么我们为什么要引入broadcast机制呢?主要有两点原因。
1.为了真实需求
如果不引入broadcast,那么要调用多次unsqueeze和expand,实现起来非常麻烦,引入broadcast机制使得自动进行,代码更加简洁。
2.节约内存
broadcast核心是利用expand,只是逻辑上的扩展,并不是实际内存上进行拷贝,从而大大减少了占用内存。
一定从最后一个维度开始匹配,因为我们认为高维的知识是通用的,低维的知各有各的不同。