张量流程中的默认在线或批量培训
问题描述:
我有以下问题:我试图学习张量流程,但我仍然没有找到将培训设置为在线或批处理的位置。举例来说,如果我有以下的代码来训练神经网络:张量流程中的默认在线或批量培训
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种梯度下降类型。具体而言,
- 随机梯度下降
- 批次梯度下降
- 赠送批次梯度下降
在此,是一个很好的教程(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.
希望这有帮助。
答
通常,Tensorflow中数据占位符的第一维被设置为batch_size,而TensorFlow并未定义(培训策略)为默认值。您可以设置第一个维度以确定它是联机的(第一维是1)还是小批量(通常几十个)。例如:
self.enc_batch = tf.placeholder(tf.int32, [hps.batch_size, None], name='enc_batch')