Tensorflow中的广播是视图还是副本



请澄清Tensorflow中的广播是否会在广播时分配新的内存缓冲区。

在Tensorflow文档《Tensors-Broadcasting简介》中,有一句话说(加了重点(:

大多数时候,广播既节省时间又节省空间,因为广播操作从未在内存中实现扩展张量

然而,在另一句话中,它说:

例如,与数学运算不同,broadcast_to在节省内存方面没有什么特别的作用。在这里,您正在具体化张量

print(tf.broadcast_to(tf.constant([1, 2, 3]), [3, 3]))

tf.broadcast_to说这是一次广播行动。

广播兼容形状的数组。

然后根据">广播操作从不在存储器中具体化扩展张量";上面的语句,它应该而不是被具体化。

请帮助澄清文件的实际内容。

它说,由于时间和空间效率,正常广播操作永远不会在内存中实现扩展张量。

x = tf.constant([1, 2, 3])
y = tf.constant(2)
print(x * y)
tf.Tensor([2 4 6], shape=(3,), dtype=int32)

但是,如果我们想看看它在广播后的样子,那么我们使用tf.broadcast_to,这当然需要具体化张量。

x = tf.constant([1, 2, 3, 4])
y = tf.broadcast_to(x, [3, 4])
print(y)
tf.Tensor(
[[1 2 3 4]
[1 2 3 4]
[1 2 3 4]], shape=(3, 4), dtype=int32)

根据文件

当执行广播操作(如将张量乘以标量(时,广播(通常(会带来一些时间或空间优势,因为广播的张量从未具体化

但是,broadcast_to不附带任何此类好处。新创建的张量对广播的形状具有完整的记忆。(然而,在图形上下文中,broadcast_to可能会与后续操作融合,然后进行优化。(

最新更新