TensorFlow';s占位符大小

TensorFlow';s占位符大小,tensorflow,input,batchsize,Tensorflow,Input,Batchsize,我对如何使用占位符进行批量培训感到困惑。在我的代码中,输入图像的大小是3x3。为了进行批量培训,我正在设置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,

我对如何使用占位符进行批量培训感到困惑。在我的代码中,输入图像的大小是3x3。为了进行批量培训,我正在设置
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])
占位符=tf.placeholder(tf.float32,shape=[None,3,3])
init=tf.global_variables_initializer()
使用tf.Session()作为sess:
sess.run(初始化)
运行(占位符,提要{占位符:输入})

您的占位符的形状为
无x 3 x 3
,因此您需要输入具有3维度的数据,即使第一个维度的大小仅为1(即在您的情况下是a
1 x 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]]
占位符=tf.placeholder(tf.float32,shape=[None,3,3])
init=tf.global_variables_initializer()
使用tf.Session()作为sess:
sess.run(初始化)
运行(占位符,提要{占位符:输入[None]})
(我将
input
更改为
inputs
,因为
input
在Python中是一个关键字,不应该用作变量名)


请注意,如果
inputs
已经是3D,则不希望执行
inputs[None]
。如果它可能是2D或3D,您将需要一个条件,如
inputs[None]If inputs.ndim==2 else inputs

占位符不应该是tf.placeholder(tf.float32,shape=[3,3,None]),因为批量训练将增加第三维的输入大小,就像第一个输入将是3 x 3 x 1一样,第二批输入将使输入为3x3x2。为什么首先是tf.placeholder(tf.float32,shape=[None,3,3])。这表明第三维度固定在3。对此有什么解释吗?通常的惯例是将批次维度放在第一位