Skip to main content
 首页 » 编程设计

python之如何在 Tensorflow 中提取占位符 Tensor 的形状值

2025年05月04日23lori

我为输入数据定义了一个 x = tf.placeholder("float", shape=[None, 784])。稍后,我需要知道 x 形状的第一个值作为批量大小。我通过 x.get_shape().as_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_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]。这个错误太奇怪了。你能帮我解决这个问题吗?提前致谢!

请您参考如下方法:

占位符中行数的 None 值意味着它会在运行时发生变化,因此您必须使用 tf.shape(x)将形状作为 tf.Tensor。以下代码应该有效:

batch_size = tf.shape(x)[0]