Lim*_*Lim 5 mnist deep-learning tensorflow
我对神经网络的批量训练有几个问题。
首先,当我们使用批量训练更新权重时,更改量是针对批量大小的累积梯度。在这种情况下,变化量是梯度的总和吗?或梯度的平均值?
如果答案是梯度的总和,则变化量将比在线训练大得多,因为变化量是累积的。在这种情况下,我认为权重无法很好地优化。
否则,如果答案是梯度的平均值,那么很好地优化权重似乎是非常合理的。但是,在这种情况下,我们需要比在线训练多得多的训练时间,因为对于批量数据而言,它仅更新一次权重。
其次,无论第一个问题的答案是什么,当我按如下方式将Tensorflow的CNN样本代码用于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如何如此快速地优化重量。
这个问题的答案取决于你的损失函数。
如果loss_element是批次中某个元素的损失函数,那么,批次的损失将是所有单个损失的函数。
例如,如果您选择使用tf.reduce_mean,那么您的损失将根据批次的所有元素进行平均。梯度也是如此。如果您使用tf.reduce_sum,那么您的梯度将是所有元素梯度的总和。
| 归档时间: |
|
| 查看次数: |
998 次 |
| 最近记录: |