TensorFlow2.0学习笔记---broadcasting
之前遇到过一个问题,[email protected] +b 时, [email protected] = [b,10] b.shape = [10] ,两个shape不一样的矩阵在数学上是不能相加的,但是为什么在TensorFlow这里可以相加呢,?broadcasting就是解决这个问题的。
从这个图中可以看出来,broadcasting的操作是将两个shape不同的矩阵进行数据平移复制,从而使他们可以相加。
shape中,靠右的维度是小维度,靠左的维度是大维度。从上面两个例子可以看出来,broadcasting首先将数据 右对齐 ,也就是小维度先对齐,然后在缺失的维度上先补1个size,再讲size为1的维度转化成可以相加运算的size。
broadcasting并没有进行数据在存储上的复制,也就是说,复制的数据是不占用内存的。
上面这个例子是不可以进行broadcasting来相加的,因为未对齐的维度不是size=1
下面是可以broadcasting的
最后我们来回顾一下,[email protected] +b 时, [email protected] = [b,10] b.shape = [10] ,两个shape不一样的矩阵在数学上是不能相加的,但是为什么在TensorFlow这里可以相加呢?
即:
[b,10] + [10]
[b,10] + [1,10]
[b,10] + [b,10]
因为[10]代表偏置,即有十个输出节点,每一个节点都要加一个输出偏置。
b代表batch,即b个图片,b个图片的在经过网络后变成了【b,10】的shape,而每一个图片经过网络后的结果都要加上这个偏置,所以就有了broadcasting。
从这个代码看出来,当两个shape不同相加时,函数内部是自动支持broadcasting的。