【问题标题】:Online or batch training by default in tensorflowtensorflow 中默认在线或批量训练
【发布时间】:2018-04-01 02:52:37
【问题描述】:

我有以下问题:我正在尝试学习张量流,但我仍然找不到将培训设置为在线或批处理的位置。例如,如果我有以下代码来训练神经网络:

loss_op = tf.reduce_mean(tf.pow(neural_net(X) - Y, 2))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(loss_op)


sess.run(train_op, feed_dict={X: batch_x, Y: batch_y})

如果我同时给出所有数据(即 batch_x 有所有数据),这是否意味着训练是批量训练?还是张量流优化器以不同的方式从后面优化?如果我做一个 for 循环一次只给出一个数据样本,是不是错了?这算作单步(在线)培训吗?感谢您的帮助。

【问题讨论】:

    标签: python optimization tensorflow neural-network training-data


    【解决方案1】:

    梯度下降主要有 3 种类型。具体来说,

    1. 随机梯度下降
    2. 批量梯度下降
    3. 小批量梯度下降

    这里有一个很好的教程 (https://machinelearningmastery.com/gentle-introduction-mini-batch-gradient-descent-configure-batch-size/),介绍了上述三种方法的优缺点。

    对于您的问题,以下是标准示例训练 tensorflow 代码,

    N_EPOCHS = #Need to define here
    BATCH_SIZE = # Need to define hare
    
    with tf.Session() as sess:
       train_count = len(train_x)    
    
        for i in range(1, N_EPOCHS + 1):
            for start, end in zip(range(0, train_count, BATCH_SIZE),
                                  range(BATCH_SIZE, train_count + 1,BATCH_SIZE)):
    
                sess.run(train_op, feed_dict={X: train_x[start:end],
                                               Y: train_y[start:end]})
    

    这里的 N_EPOCHS 表示整个训练数据集的通过次数。你可以根据你的梯度下降方法设置BATCH_SIZE。

    • 对于随机梯度下降,BATCH_SIZE = 1。
    • 对于 批量梯度下降,BATCH_SIZE = 训练数据集大小。

    • 对于 Mini Batch Gradient Decent,1

    在三种方法中,最流行的方法是Mini Batch Gradient Decent。但是,您需要根据您的要求设置 BATCH_SIZE 参数。 BATCH_SIZE 的一个好的默认值可能是 32。

    希望这会有所帮助。

    【讨论】:

    • 很好的例子。我只想指出,提供的代码不考虑train_count 不是batch_size 的因素的情况。例如,如果train_count 为 63,batch_size 为 32,则将忽略 31 个训练样本(63 mod 32)。
    【解决方案2】:

    通常,Tensorflow 中数据占位符的第一个维度设置为 batch_size,而 TensorFlow 默认没有定义(训练策略)。您可以设置第一个维度以确定它是在线(第一个维度为 1)还是小批量(通常为 10 个)。例如:

    self.enc_batch = tf.placeholder(tf.int32, [hps.batch_size, None], name='enc_batch')
    

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 1970-01-01
      • 2017-06-10
      • 2019-02-19
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      相关资源
      最近更新 更多