我想在Tensorflow中获取占位符的尺寸。功能tf$shape
立刻浮现在我的脑海中。我使用tf$shape
来获得具有正尺寸的占位符的形状没有问题。但是,我希望我的占位符能够接收不同大小的输入,因此我将一个维度保留为NULL
。现在,根据我的理解,在涉及维度时,Tensorflow会等同地对待NULL
和-1
。但是,当我运行我的代码时,我收到了这个错误:
W tensorflow / core / framework / op_kernel.cc:1148]无效参数:Shape [-1,2]具有负维度
以下是我的代码的可重现示例:
a = tf$placeholder(tf$float32, shape = shape(NULL, 2L))
sess = tf$Session()
sess$run(tf$shape(a))
上面引用的错误是由我的代码中的某些内容引起的,还是tf$shape
无法接收具有负尺寸的占位符的事实?如果后者是真的,有没有办法让我在不使用tf$shape
的情况下获得具有负尺寸的占位符的形状?
答案 0 :(得分:1)
tf$shape(a)
操作返回包含占位符张量a
dynamic shape的张量。 a
的动态形状取决于您为a
提供的值;如果您不提供值,则动态形状未定义。因此,您必须在a
来电中提供sess$run(tf$shape(a))
的值。
不幸的是,您看到的特定错误(" Shape [-1,2]具有负尺寸")无益,因为TensorFlow 1.2中有关占位符操作如何处理部分定义的形状的错误。如果您升级到TensorFlow 1.3(目前作为候选版本提供)或更高版本,此错误已得到修复,您将收到以下错误:
您必须为占位符张量提供一个值' Placeholder'使用dtype float32和shape [?,2]