我为输入数据定义了一个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
以这种方式int
:batch_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非常奇怪。你能帮我解决这个问题吗?提前致谢!
非常感谢您的回答!不幸的是,我得到了另一个相关的奇怪的错误,我不知道这一点。我编辑了这个问题并添加了更多信息。你可以看看并帮助我吗?谢谢! – southdoor
它看起来像'tf.nn.conv2d_transpose()'的形状推断是相当薄弱的。 (它看起来像我写的:P。)感谢您提请我们注意 - 我们将准备一个修复程序,同时您可以使用该形状的已知尺寸调用'pool1_tr.set_shape()'。 – mrry