我有以下问题:我正在尝试学习张量流,但我仍然没有找到将培训设置为在线或批量的位置 . 例如,如果我有以下代码来训练神经网络:
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 循环是不是错了?这算是单步(在线)培训吗?谢谢您的帮助 .
2 回答
主要有三种渐变下降类型 . 特别,
随机梯度下降
批量梯度下降
Mini Batch Gradient Descent
这里有一个很好的教程(https://machinelearningmastery.com/gentle-introduction-mini-batch-gradient-descent-configure-batch-size/),对上面三种方法有好处和缺点 .
对于您的问题,以下是标准样本培训张量流代码,
这里N_EPOCHS表示整个训练数据集的传递次数 . 您可以根据Gradient Descent方法设置BATCH_SIZE .
对于 Stochastic Gradient Descent ,BATCH_SIZE = 1 .
对于 Batch Gradient Descent ,BATCH_SIZE =训练数据集大小 .
对于 Mini Batch Gradient Decent ,1 << BATCH_SIZE <<训练数据集大小 .
在三种方法中,最流行的方法是 Mini Batch Gradient Decent . 但是,您需要根据您的要求设置BATCH_SIZE参数 . BATCH_SIZE的良好默认值可能是32 .
希望这可以帮助 .
通常,Tensorflow中数据占位符的第一个维度设置为batch_size,而TensorFlow默认不定义(训练策略) . 您可以设置第一个维度以确定它是否在线(第一个维度为1)或小批量(通常为十个) . 例如: