我对如何使用占位符进行批量培训感到困惑。在我的代码中,输入图像的大小为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})
答案 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
的条件。