2016-12-01 156 views
1

我为输入数据定义了一个x = tf.placeholder("float", shape=[None, 784])。之后,我需要知道x形状的第一个值是批量大小。我提取了x.get_shape().as_list()[0]的值,但我得到了None。你能告诉我应该如何正确提取它?非常感谢!如何在Tensorflow中提取占位符张量的形状值?

编辑:

我现在已经使用tf.get_shape()但它会导致另一个错误。在我的代码,我已经定义了一个deconv功能可按:

def deconv(X, W, b, output_shape): 
    X += b 
    return tf.nn.conv2d_transpose(X, W, output_shape, strides=[1, 1, 1, 1]) 

如果我设置batch_size以这种方式intbatch_size = 50,的deconv函数的调用效果很好如下:

W_conv2_T = tf.ones([5, 5, 32, 64]) 
pool1_tr = deconv(conv2_tr, W_conv2_T, tf.zeros([64]), [batch_size, 14, 14, 32]) 

conv2_tr的形状是[50, 14, 14, 64]。并且由此产生的形状pool1_tr[50, 14, 14, 32]。但是如果我设置batch_size = tf.get_shape(x)[0],conv2_tr的形状是[None, 14, 14, 64]并且所得到的形状pool1_tr变成[None, None, None, None]。这个bug非常奇怪。你能帮我解决这个问题吗?提前致谢!

回答

4

对于占位符中的行数,值None表示它在运行时可能会有所不同,因此您必须使用tf.shape(x)将形状设置为tf.Tensor。下面的代码应该可以工作:

batch_size = tf.shape(x)[0] 
+0

非常感谢您的回答!不幸的是,我得到了另一个相关的奇怪的错误,我不知道这一点。我编辑了这个问题并添加了更多信息。你可以看看并帮助我吗?谢谢! – southdoor

+1

它看起来像'tf.nn.conv2d_transpose()'的形状推断是相当薄弱的。 (它看起来像我写的:P。)感谢您提请我们注意 - 我们将准备一个修复程序,同时您可以使用该形状的已知尺寸调用'pool1_tr.set_shape()'。 – mrry

相关问题