TensorFlow默认在线或批量训练
Online or batch training by default in tensorflow
我有以下问题:我正在尝试学习张量流,但我仍然找不到在哪里可以将训练设置为在线或批量。例如,如果我有以下代码来训练神经网络:
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 循环,一次给出一个数据样本,这是错误的吗?这算作单步(在线)培训吗?感谢您的帮助。
梯度下降主要有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 = 训练数据集大小。
For Mini Batch Gradient Decent, 1 << BATCH_SIZE << training dataset size.
三种方法中,最受欢迎的方法是Mini Batch Gradient Decent。但是,您需要根据您的要求设置 BATCH_SIZE 参数。 BATCH_SIZE 的默认值可能是 32。
希望对您有所帮助。
通常 Tensorflow 中数据占位符的第一个维度设置为 batch_size 并且 TensorFlow 默认没有定义那个(训练策略)。您可以设置第一个维度以确定它是在线(第一个维度为 1)还是小批量(通常为十个)。例如:
self.enc_batch = tf.placeholder(tf.int32, [hps.batch_size, None], name='enc_batch')
我有以下问题:我正在尝试学习张量流,但我仍然找不到在哪里可以将训练设置为在线或批量。例如,如果我有以下代码来训练神经网络:
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 循环,一次给出一个数据样本,这是错误的吗?这算作单步(在线)培训吗?感谢您的帮助。
梯度下降主要有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 = 训练数据集大小。
For Mini Batch Gradient Decent, 1 << BATCH_SIZE << training dataset size.
三种方法中,最受欢迎的方法是Mini Batch Gradient Decent。但是,您需要根据您的要求设置 BATCH_SIZE 参数。 BATCH_SIZE 的默认值可能是 32。
希望对您有所帮助。
通常 Tensorflow 中数据占位符的第一个维度设置为 batch_size 并且 TensorFlow 默认没有定义那个(训练策略)。您可以设置第一个维度以确定它是在线(第一个维度为 1)还是小批量(通常为十个)。例如:
self.enc_batch = tf.placeholder(tf.int32, [hps.batch_size, None], name='enc_batch')