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

Tensorflow中的广播是视图还是副本?,tensorflow,array-broadcasting,Tensorflow,Array Broadcasting,请澄清Tensorflow中的广播是否会在广播时分配新的内存缓冲区 在Tensorflow文档中,有一句话说(添加了强调): 大多数情况下,广播既节省时间又节省空间,因为广播操作从未实现内存中的扩展张量 然而,在另一句话中,它说: 例如,与数学运算不同,广播_to不做任何特别的事情来节省内存。在这里,你正在具体化张量 说这是一个广播操作 广播阵列以获得兼容的形状 然后根据上面的“广播操作永远不会实现内存中的扩展张量”语句,它应该不会实现 请帮助澄清文档实际上在说什么。它说,由于时间和空间效率,通

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

在Tensorflow文档中,有一句话说(添加了强调):

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

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

例如,与数学运算不同,广播_to不做任何特别的事情来节省内存。在这里,你正在具体化张量

说这是一个广播操作

广播阵列以获得兼容的形状

然后根据上面的“广播操作永远不会实现内存中的扩展张量”语句,它应该不会实现


请帮助澄清文档实际上在说什么。

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

x = tf.constant([1, 2, 3])
y = tf.constant(2)

print(x * y)
tf.Tensor([2 4 6], shape=(3,), dtype=int32)
但是如果我们想看看它在广播后的表现,那么我们就用它来实现张量

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)
根据

当执行广播操作(如将张量乘以标量)时,广播(通常)会带来一些时间或空间效益,因为广播张量从未实现

然而,广播并不附带任何此类好处。新创建的张量具有广播形状的全部记忆。(然而,在图形上下文中,广播可能会融合到后续操作中,然后再进行优化。)


谢谢你的回答。我仍然不确定引擎盖下发生了什么。当执行(x*y)时,x是秩1,y是秩0,因此y被广播到秩1以匹配x。此广播可能不需要额外内存,但结果(x*y)如何?我相信这是一个新的内存分配,不共享x或y的内存缓冲区。然后在某个地方它需要具体化(分配缓冲区)来存储(x*y),然后它就具体化了。如果是这样,“永远不会实现”怎么可能是真的。。。不确定。
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)