如何使用小型数据在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]})
我的问题是 - x
和y_
变量的维度是否适合单个示例,而batch[0]
,batch[1]
是此类输入和输出的列表?在这种情况下,TensorFlow会自动为这些列表中的每个训练示例添加渐变吗?或者我应该创建我的模型,以便x
和y_
获得整个小批量?
我的问题是,当我尝试为每个占位符提供一个列表时,它会尝试输入占位符的整个列表,因此我得到的大小不匹配:Cannot feed value of shape (n, m) for Tensor u'ts:0', which has shape '(m,)'
,其中n
是小批量大小,m
是个人输入大小。
感谢。
答案 0 :(得分:10)
在MNIST教程中,x
和y_
是具有已定义形状的占位符:
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)
。 因此:
TensorFlow会自动为这些列表中的每个训练示例添加渐变吗?或者我应该创建我的模型,以便x和y_得到一个完整的小批量?
Tensorflow会为您处理此事。
您报告的错误Cannot feed value of shape (n, m) for Tensor u'ts:0', which has shape '(m,)'
是形状不匹配错误。
您不是要重新整形输入以使其具有相同的占位符形状。