【问题标题】:Tensorflow minibatch trainingTensorFlow minibatch 训练
【发布时间】:2016-07-02 07:42:50
【问题描述】:

如何使用小批量数据在 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 是单个输入大小。

谢谢。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    在 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 的特征图片)。

    如果你用 python 列表输入图形,形状为 [1, 784] 或 [50, 784] 对 tensorflow 来说完全一样,它可以毫无问题地处理它。

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

    • batch[0] 是一个形状为 [50, 784] 的列表
    • batch[1] 是一个形状为 [50, 10] 的列表

    TensorFlow 会自动为这些列表中的每个训练示例添加梯度吗?或者我应该创建我的模型,以便 x 和 y_ 获得整个 minibatch?

    Tensorflow 为您处理。

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

    您不会将输入重新调整为具有与占位符相同的形状。

    【讨论】:

    • “Tensorflow 为您处理这个问题。” - 但是我的成本函数仍然需要对未知数量的样本求和(将在应用运行时设置),对吗?这并不是说我为单个样本编写了一个成本函数,并且它以某种方式对其进行了扩展。
    • 是的,没错。 tf.reduce* 函数将帮助您对未知数量的样本进行求和/平均
    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 2016-03-09
    • 2020-08-05
    • 2017-03-30
    • 2017-08-21
    • 2018-05-22
    • 2018-11-01
    • 1970-01-01
    相关资源
    最近更新 更多