2016-05-05 3 views
7

J'utilise mxnet pour former un classificateur d'images de classe 11. J'observe un comportement bizarre, la précision de l'entraînement augmentait lentement et s'élevait jusqu'à 39% et à l'époque suivante elle descendait à 9% et ensuite elle reste proche de 9% pour le reste de l'entraînement. J'ai recommencé l'entraînement avec le modèle enregistré (avec une précision d'entraînement de 39%) en gardant tous les autres paramètres identiques. La précision de l'entraînement augmente à nouveau. Quelle peut être la raison ici? Je ne suis pas capable de le comprendre. Et il devient difficile de former le modèle de cette façon car cela me demande de voir constamment les valeurs de précision de l'entraînement.Une baisse soudaine de la précision lors de l'entraînement d'un réseau neuronal profond

taux d'apprentissage est constant à 0,01

+0

très probablement votre taux d'apprentissage est trop élevé et le modèle saute. Difficile à dire sans connaître vos hyperparamètres – fabrizioM

+0

taux d'apprentissage en 0.01 – sau

+0

Une fois j'ai eu problème similaire lorsque, par accident, j'ai mis une activation linéaire et utilisé une entropie croisée catégorique comme fonction de coût. –

Répondre

7

que vous pouvez voir votre précision en retard est près d'un hasard. Il y a 2 problèmes communs dans ce genre de cas.

  • votre taux d'apprentissage est élevé. essayer de l'abaisser
  • L'erreur (ou entropie) que vous essayez d'utiliser vous donne la valeur NaN. Si vous essayez d'utiliser des entropies avec des fonctions de journal, vous devez les utiliser avec précision.
-2

Cela est probablement dû au fait que 0log0 renvoie NaN.

Vous pourriez l'éviter en;

cross_entropy = -tf.reduce_sum(labels*tf.log(tf.clip_by_value(logits,1e-10,1.0)))

+0

Vous ne devriez pas restreindre le gradient en limitant la perte en coupant les logits, cela crée en fait un gradient de 0 dans ces intervalles et le réseau reste bloqué. Vous devriez directement couper le dégradé à la place. –

1

Il est courant lors de la formation des réseaux de neurones pour la précision d'améliorer pendant un certain temps puis empirer - en général cela est causé par surajustement. Il est également assez fréquent que le réseau "tombe malchanceux" et tombe dans une mauvaise partie de l'espace des paramètres correspondant à une baisse soudaine de la précision - parfois il peut en sortir rapidement, mais parfois non.

En général, abaisser votre taux d'apprentissage est une bonne approche pour ce genre de problème. En outre, la définition d'un calendrier de taux d'apprentissage tel que FactorScheduler peut vous aider à atteindre une convergence plus stable en abaissant le taux d'apprentissage toutes les quelques années. En fait, cela peut parfois masquer des erreurs dans le choix d'un taux d'apprentissage initial trop élevé.

0

J'ai rencontré le même problème.Et je l'ai résolu en utilisant (y-a)^une fonction de perte au lieu de la fonction d'entropie croisée (à cause de log (0)) J'espère qu'il y a une meilleure solution pour ce problème.