针对tensorflow2.0版本
Broadcasting的主要特点:expand without copying data(扩展了维度,但是不复制数据,不占用内存空间)
(1)隐式的Broadcasting
tensor的一些操作符已经包含了Broadcasting,比如下面这个:
In [3]: a = tf.random.normal([4,28,28,3])
In [4]: b = tf.random.normal([3])
In [5]: (a+b).shape
Out[5]: TensorShape([4, 28, 28, 3])
随机两个矩阵a,b,但矩阵维度不一致,当a+b时,系统会自动扩展b的维度(不复制数据,不增加内存),以能够与a相加。
(2)显示的Broadcasting(tf.broadcast_to)
In [6]: c = tf.broadcast_to(tf.random.normal([4,1,1,1]),[4,28,28,3])
In [7]: c.shape
Out[7]: TensorShape([4, 28, 28, 3])
使用tf.broadcast_to函数手动使c的维度扩展。
(3)Broadcasting与tf.tile的区别
功能相近,但是tf.tile是复制数据,需占用内存,Broadcasting不用。