Tensorflow minibatch培训

时间:2016-07-02 07:42:50

标签: tensorflow

如何使用小型数据在TensorFlow中训练网络? 在Deep-MNIST教程中,他们使用:

for i in range(1000):
   batch = mnist.train.next_batch(50)
   train_step.run(feed_dict={x: batch[0], y_: batch[1]})

我的问题是 - xy_变量的维度是否适合单个示例,而batch[0]batch[1]是此类输入和输出的列表?在这种情况下,TensorFlow会自动为这些列表中的每个训练示例添加渐变吗?或者我应该创建我的模型,以便xy_获得整个小批量?

我的问题是,当我尝试为每个占位符提供一个列表时,它会尝试输入占位符的整个列表,因此我得到的大小不匹配:Cannot feed value of shape (n, m) for Tensor u'ts:0', which has shape '(m,)',其中n是小批量大小,m是个人输入大小。

感谢。

1 个答案:

答案 0 :(得分:10)

在MNIST教程中,xy_是具有已定义形状的占位符:

x = tf.placeholder(tf.float32, shape=[None, 784])
y_ = tf.placeholder(tf.float32, shape=[None, 10])

shape=[None, 784]表示此占位符具有2维。

所以,回答你的第一个问题:

  

是x和y_变量,其尺寸适合单个示例

第一个维度可以包含未定义数量的元素(因此,1,2,... 50 ...),第二个维度可以包含784 = 28 * 28个元素(这是单个MNIST的特征)图像)。

如果你使用形状为[1,784]或[50,784]的python列表为tensorflow提供完全相同的图形,它可以毫无问题地处理它。

  

批次[0],批次[1]是这些输入和输出的列表?   在教程中,他们定义批量调用batch = datasets.train.next_batch(50)。   因此:

  • batch [0]是具有形状[50,784]
  • 的列表
  • batch [1]是具有形状[50,10]
  • 的列表
  

TensorFlow会自动为这些列表中的每个训练示例添加渐变吗?或者我应该创建我的模型,以便x和y_得到一个完整的小批量?

Tensorflow会为您处理此事。

您报告的错误Cannot feed value of shape (n, m) for Tensor u'ts:0', which has shape '(m,)' 是形状不匹配错误。

您不是要重新整形输入以使其具有相同的占位符形状。