J'ai quelques questions sur la formation par lots des réseaux neuronaux.
Tout d'abord, lorsque nous mettons à jour les poids en utilisant l'apprentissage par lots, la quantité de changement est constituée des gradients accumulés pour la taille du lot. Dans ce cas, la quantité de changement est la somme des gradients ? ou la moyenne des gradients ?
Si la réponse est la somme des gradients, le montant du changement sera beaucoup plus important que pour la formation en ligne, car les montants sont cumulés. Dans ce cas, je ne pense pas que les poids puissent être bien optimisés.
Sinon, si la réponse est la moyenne des gradients, alors il semble très raisonnable de bien optimiser les poids. Cependant, dans ce cas, nous devons nous entraîner beaucoup plus de fois que l'entraînement en ligne car il ne met à jour les poids qu'une seule fois pour la taille du lot de données.
Deuxièmement, quelle que soit la réponse à la première question, lorsque j'utilise les codes d'exemple CNN de Tensorflow pour MNIST comme suit, il peut optimiser le poids si rapidement, de sorte que la précision de la formation devient supérieure à 90% même dans la deuxième étape.
\=======================================================================
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})
\========================================================================
Veuillez expliquer comment Tensorflow optimise le poids si rapidement.