2017-07-18 73 views
1

关于神经网络批量训练我有几个问题。批量培训使用更新总数?或平均更新?

首先,当我们使用批量训练来更新权重时,更改量是批量大小的累积梯度。在这种情况下,变化量是渐变的总和?或平均的梯度?

如果答案是梯度的总和,则变化量将比在线培训大得多,因为数量是累积的。在这种情况下,我认为权重可以很好地优化。

否则,如果答案是梯度的平均值,那么对权重进行优化似乎是非常合理的。但是,在这种情况下,我们必须培训比在线培训多得多的时间,因为它更新批量数据的权重只有一次。其次,无论第一个问题的答案是什么,当我使用CNN的Tensorflow示例代码作为MNIST时,它可以如此快速地优化权重,因此即使在第二步中训练精度也会超过90%。

============================================== =========================

train_step = tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy) accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) for i in range(1000): batch = mnist.train.next_batch(100) if i%100 == 0: train_accuracy = sess.run(accuracy, feed_dict={x:batch[0], y_:batch[1], keep_prob: 1.0}) sess.run(train_step, feed_dict={x: batch[0], y_:batch[1], keep_prob:1.0})

================ ================================================== ======

请解释Tensorflow如何非常快地优化重量。

回答

0

这个问题的答案取决于你的损失函数。

如果loss_element是您的批次中某个元素的损失函数,那么,批次的损失将成为您所有个人损失的某个函数。

例如,如果您选择使用tf.reduce_mean,那么您的损失将在批次的所有元素上取平均值。渐变也是如此。如果您使用tf.reduce_sum,那么您的渐变将成为元素明智的所有渐变的总和。

0

这与使用梯度总和或平均梯度相同,因为您稍后必须找到一个很好的学习速率,最有可能会考虑按梯度平均值批量大小进行除法。

但是,使用批次平均值的优点是在使用不同批次大小的两次培训之间具有可比较的损失。