我对神经网络的批量训练几乎没有疑问。
首先,当我们使用批量训练更新权重时,更改量是批量大小的累积梯度。在这种情况下,变化量是梯度的总和?或梯度的平均值?
如果答案是梯度的总和,则变化量将远大于在线培训,因为累计金额。在这种情况下,我不认为权重可以很好地优化。
否则,如果答案是梯度的平均值,那么很好地优化权重似乎是非常合理的。但是,在这种情况下,我们必须训练比在线培训多得多的时间,因为它只会为批量大小的数据更新一次重量。
其次,无论第一个问题的答案是什么,当我使用TENSorflow的CNN样本代码作为跟随时,它可以如此快速地优化权重,因此即使在第二步中训练精度也高于90%。 / p>
=============================================== ========================
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 :(得分:2)
这个问题的答案取决于你的损失功能。
如果loss_element
是批次中某个元素的损失函数,那么,您的批次损失将是您所有个人损失的一部分。
例如,如果您选择使用tf.reduce_mean
,那么您的损失将在批次的所有元素上取平均值。渐变也是如此。如果你使用tf.reduce_sum
,那么你的渐变将是所有渐变元素的总和。
答案 1 :(得分:1)
使用渐变或平均梯度的总和是相同的,因为您以后必须找到一个很好的学习率,这很可能会考虑到梯度平均值中批量大小的除法。
然而,使用批次的平均值具有在使用不同批量大小的两次训练之间具有相当的损失的优点。