Python 如何在Tensorflow中提取占位符张量的形状值?

Python 如何在Tensorflow中提取占位符张量的形状值?,python,tensorflow,Python,Tensorflow,我为输入数据定义了一个x=tf.placeholder(“float”,shape=[None,784])。稍后,我需要知道x形状的第一个值作为批次大小。我通过x.get\u shape().as\u list()[0]提取值,但是我得到了None。你能告诉我如何正确提取它吗?非常感谢 编辑: 我现在使用了tf.get_shape(),但它会导致另一个错误。在我的代码中,我定义了一个deconv函数: def deconv(X, W, b, output_shape): X += b

我为输入数据定义了一个
x=tf.placeholder(“float”,shape=[None,784])
。稍后,我需要知道
x
形状的第一个值作为批次大小。我通过
x.get\u shape().as\u list()[0]
提取值,但是我得到了
None
。你能告诉我如何正确提取它吗?非常感谢

编辑:

我现在使用了
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\u size
设置为
int
batch\u 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\u tr
的形状是
[50,14,14,64]
。而
pool1\u tr
的结果形状是
[50,14,14,32]
。但是如果我设置
batch\u size=tf.get\u shape(x)[0]
,则
conv2\u tr
的形状是
[None,14,14,64]
,而
pool1\u tr
的结果形状变成
[None,None,None,None]
。这只虫子真奇怪。你能帮我解决这个问题吗?提前谢谢

占位符中行数的
None
值意味着它在运行时可能会变化,因此必须使用以
tf.Tensor
的形式获取形状。以下代码应该可以工作:

batch_size = tf.shape(x)[0]

占位符中的行数的值为
None
,这意味着它在运行时可能会发生变化,因此必须使用以
tf.Tensor
的形式获取形状。以下代码应该可以工作:

batch_size = tf.shape(x)[0]

非常感谢你的回答!不幸的是,我得到了另一个相关的奇怪的错误,我不知道这一点。我已经编辑了问题并添加了进一步的信息。你能帮我看一下吗?谢谢看起来
tf.nn.conv2d_transpose()
的形状推断非常弱。(看起来像是我写的:P.)感谢您提请我们注意-我们将准备一个修复程序,同时您可以调用
pool1\u tr.set\u shape()
,使用该形状的已知尺寸。非常感谢您的回答!不幸的是,我得到了另一个相关的奇怪的错误,我不知道这一点。我已经编辑了问题并添加了进一步的信息。你能帮我看一下吗?谢谢看起来
tf.nn.conv2d_transpose()
的形状推断非常弱。(看起来像是我写的:P.)感谢您提请我们注意-我们将准备一个修复程序,同时您可以使用该形状的已知尺寸调用
pool1\u tr.set\u shape()