2016-10-20 1 views
3

que je suis le tutoriel « Deep MNIST pour Experts », https://www.tensorflow.org/versions/r0.11/tutorials/mnist/pros/index.html#deep-mnist-for-expertsprécision Oscillant de la formation CNN avec Tensor Flow MNIST chiffres écrits à la main

En utilisant convolutifs Neural Networks, je reçois une précision de 93,49%. Ce qui est en fait faible et j'essaie de l'améliorer, mais j'ai un doute. Selon le tutoriel,

for i in range(20000): 
    batch = mnist.train.next_batch(50) 
    if i%100 == 0: 
     train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0}) 
     print("step %d, training accuracy %g"%(i, train_accuracy)) 
    train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) 

La précision du train est enregistré après 100 itérations et de voir la précision, il continue à faire osciller comme l'augmentation et la diminution.

step 100, training accuracy 0.1 
step 200, training accuracy 0.13 
step 300, training accuracy 0.12 
step 400, training accuracy 0.08 
step 500, training accuracy 0.12 
step 600, training accuracy 0.05 
step 700, training accuracy 0.09 
step 800, training accuracy 0.1 
step 900, training accuracy 0.12 
step 1000, training accuracy 0.09 
step 1100, training accuracy 0.11 
step 1200, training accuracy 0.09 
step 1300, training accuracy 0.11 
step 1400, training accuracy 0.06 
step 1500, training accuracy 0.09 
step 1600, training accuracy 0.14 
step 1700, training accuracy 0.07 
step 1800, training accuracy 0.08 
...... 
step 19800, training accuracy 0.14 
step 19900, training accuracy 0.07 

Y a-t-il une raison à cela? Ou est-ce normal? Alors pourquoi? Aussi, quel genre de variables je peux changer pour améliorer la précision finale? J'ai déjà essayé de changer la variable du taux d'apprentissage.

Répondre

3

La précision d'oscillation est généralement causée par un learning_rate qui est trop élevé. Ma première astuce serait en effet de réduire le learning_rate, avez-vous testé plusieurs taux d'apprentissage sur une échelle logarithmique , par exemple. 0.1,0.05,0.02,0.01,0.005,0.002, ...?

L'utilisation drastique de petits taux d'apprentissage devrait supprimer la précision de l'oscillation. Vérifiez également this answer sur Kaggle et le linked document pour obtenir une meilleure compréhension.

EDIT:

Sur la base de la remarque dans le commentaire: cette précision est mesurée par lot. Puisque vous comparez les précisions sur des lots différents à chaque fois (un simple par rapport à un lot plus difficile), il est normal que vous n'obteniez pas une augmentation monotone de la précision. Vous pouvez réduire les oscillations:

  • En augmentant la taille du lot, les fluctuations devraient diminuer: l'impact de la difficulté des différents exemples de calculer la moyenne.

  • Vous pouvez également calculer la précision de la formation sur un ensemble constant d'exemples:

    • En utilisant une validation mis

    • calcul de la moyenne les exactitudes par lots sur tous les lots dans une époque

    • En fait, calculer la précision sur tous les e xamples dans l'ensemble d'entraînement après chaque nombre d'étapes d'entraînement. Ce cours a un grand impact sur le temps d'entraînement si vous avez un grand ensemble d'entraînement.

+0

En fait, je me sers du adamoptimizer avec un taux 1E-5, une plus faible ou plus, la précision finale semble diminuer. Et ces liens, suggérés, cela peut être dû à la taille du lot. Donc, je vais changer la taille du lot aussi. –

+0

Et aussi, je voudrais savoir, que si généralement la précision dans chaque étape consignée est censée augmenter constamment, ou de telles oscillations sont normales? –

+0

Oui, il est normal d'avoir ces oscillations sur la précision du lot. Vous mesurez la précision sur différents jeux de données à chaque fois. Si vous faites la moyenne, vous pouvez obtenir une bonne idée, mais il est maintenant difficile de comparer les précisions calculées sur différents jeux de données. Il serait préférable d'avoir également une validation constante séparée sur laquelle vous calculez la précision. Ce que vous pouvez également faire est de faire la moyenne de toutes les précisions de lots sur une époque et de ne montrer cette moyenne qu'une fois par époque ... – Fematich