TensorFlow的占位符大小

时间:2019-04-12 15:47:22

标签: tensorflow input batchsize

我对如何使用占位符进行批量培训感到困惑。在我的代码中,输入图像的大小为3 x3。为了进行批量训练,我设置了tf.placeholder(tf.float32,shape=[None,3,3])

当我尝试将3x3批次作为输入时,TensorFlow会给出错误

Cannot feed value of shape (3, 3) for Tensor u'Placeholder_1:0', which has shape '(?, 3, 3).

下面是代码

input = np.array([[1,1,1],[1,1,1],[1,1,1]])
placeholder = tf.placeholder(tf.float32,shape=[None,3,3])
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    sess.run(placeholder, feed_dict{placeholder:input})

1 个答案:

答案 0 :(得分:0)

您的占位符的形状为None x 3 x 3,因此即使第一个维度的大小为1(例如,1 x 3 x 3您的案件而不是3 x 3)。向数组添加额外尺寸(大小为1)的一种简单方法是执行array[None]。如果array的形状为3 x 3,则array[None]的形状为1 x 3 x 3。这样您就可以将代码更新为

inputs = np.array([[1, 1 ,1], [1, 1, 1], [1, 1, 1]])
placeholder = tf.placeholder(tf.float32,shape=[None, 3, 3])
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    sess.run(placeholder, feed_dict{placeholder: inputs[None]})

(我将input更改为inputs,因为input是Python中的关键字,不应用作变量名)

请注意,如果inputs[None]已经是3D的话,您将不想执行inputs。如果是2D或3D,则需要类似inputs[None] if inputs.ndim == 2 else inputs的条件。