跟踪图形创建时的张量形状

2024-04-25 14:40:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在某些情况下,tensorflow似乎能够在图形创建时检查张量的值,而在其他情况下,这是失败的。你知道吗

>>> shape = [constant([2])[0], 3]
>>> reshape([1,2,3,4,5,6], shape)
<tf.Tensor 'Reshape_13:0' shape=(2, 3) dtype=int32>
>>> zeros(shape)
<tf.Tensor 'zeros_2:0' shape=(?, 3) dtype=float32>

在上面的示例中,reformate()可以看到作为shape传入的张量的值为2,结果输出的形状为(2,3),但zeros()不能,静态形状为(?)?,3). 差异的原因是什么?你知道吗

我的同事发布了Determining tensor shapes at time of graph creation in TensorFlow,这是基于相同的基本问题,但他提出了一个稍微不同的问题,即如何最好地使用tensorflow来解决这类问题,而我的问题是tensorflow为什么会这样。是虫子吗?你知道吗


Tags: 图形示例tftensorflowzeros情况形状tensor
1条回答
网友
1楼 · 发布于 2024-04-25 14:40:25

技术总监;博士:

  • tf.reshape能推断出输出的形状,而tf.zeros不能
  • shape对这两个函数都支持整数(asstatic/definite)和张量(asdynamic/definite)。你知道吗

代码更具体、更清晰:

shape = [tf.constant([2])[0], tf.constant([3])[0]]
print(tf.reshape([1,2,3,4,5,6], shape))  
# Tensor("Reshape:0", shape=(?, ?), dtype=int32)
print(tf.zeros(shape))  
# Tensor("zeros:0", shape=(?, ?), dtype=float32)

还有这个:

shape = [tf.constant([5])[0], 3]
print tf.reshape([1,2,3,4,5,6], shape)  
# Tensor("Reshape:0", shape=(2, 3), dtype=int32)
# This will cause an InvalidArgumentError at running time!

当使用Tensor(如tf.constant([2])[0])作为shape来创建另一个Tensor(如tf.zeros(shape))时,图形创建时的形状总是不确定的。然而,tf.reshape()是不同的。它可以利用输入的形状和给定的(静态部分的)形状来推断输出的形状。你知道吗

在您的代码中,3是一个静态整数,输入的形状是给定的([6]);形状(2, 3)实际上是通过推断而不是提供的。这可以在第二部分代码中得到证明。虽然我给出了一个tf.constant([5]),但是形状没有改变。(在图形创建时没有错误,但在运行时引发了错误!)你知道吗

相关问题 更多 >