2

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

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拥有所有数据),这是否意味着这是训练的批量培训?或张量流优化器是否以与后面不同的方式进行优化?如果我为循环做一个一次给出一个数据样本,这是错误的吗?这算作单步(在线)培训吗?感谢您的帮助。

回答

3

主要有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 =训练数据集的大小。

  • 对于小批量梯度下降,1个< < BATCH_SIZE < <训练数据集的大小。

在三种方法中,最常用的方法是小批量梯度下降。但是,您需要根据您的要求设置BATCH_SIZE参数。 BATCH_SIZE的默认值可能是32.

希望这有帮助。

1

通常,Tensorflow中数据占位符的第一维被设置为batch_size,而TensorFlow并未定义(培训策略)为默认值。您可以设置第一个维度以确定它是联机的(第一维是1)还是小批量(通常几十个)。例如:

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