2017-07-18 145 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

這與使用梯度總和或平均梯度相同,因爲您稍後必須找到一個很好的學習速率,最有可能會考慮按梯度平均值批量大小進行除法。

但是,使用批次平均值的優點是在使用不同批次大小的兩次培訓之間具有可比較的損失。