Debug ,overfiting et underfiting
Dans cette page tu trouveras comment gérer tes problèmes d’apprentissage et les bonnes pratiques :
Debug et bonnes pratiques
Print, print et print
Vérifier les shapes
L’une des principales sources d’erreur qui empêche l’exécution du code vient des problèmes de shape.
On peut voir ces erreurs lors du fit , l’entrainement ne se lance pas. On peut retrouver des messages d’erreurs type : « Incompatible shape » ou « XXX shape expected but XXX shape found« . Les outils que nous utilisons évoluent souvent et la formulation exacte des messages d’erreur aussi.
Ces messages peuvent être présents à deux niveaux : au niveau des entrées , ou des sorties. Le message n’est pas le même pour les entrées et les sorties, tu apprendras rapidement à les différencier.
Les entrées
Pour les entrées, il faut vérifier les shapes X lors de la préparation des données et au niveau de l’input shape. Elles doivent être similaires.
Attention, l’input shape ne contient généralement pas le nombre de données et possède une dimension de moins (la première) que ce qui est affiché lors de la préparation des données.
Lors de test avec le prédicteur, il faut bien penser à ajouter une dimension pour mettre le nombre d’image à 1 si c’est nécessaire.
Les sorties
Pour les sorties, il doit y avoir autant de neurones en sortie que de catégories.
L’un des problèmes récurrent est l’oubli du to_categorical pour transformer les labels en tableau de probabilité.
Problème du print sur les shapes
Un autre problème fréquent lorsqu’on créé nos tableaux de données nous même est d’oublier de transformer nos listes en matrices numpy.
Après avoir rempli nos X et Y avec les données, il est important de les transformer en tableau numpy avec la fonction np.asarray
Faire la préparation des données en un seul bloc
Souvent on visualise les données on fait des modifications et on oublie. Il est important d’avoir un seul bloc de code qui commence par la création des tableaux et/ou la récupération des données puis de faire à la suite toutes les manipulations nécessaires à la préaparation pour qu’il n’y ait pas d’interférences liées à d’autres bout de code qu’on aurrait oublié
Vérifier ses imports et l’execution du code
Les erreurs : « NameError : XXX is not defined » sont parmi les plus fréquentes et les plus faciles à regler:
- Soit tu as oublié d’executer l’une des cellules de code qui permet de définir une variable ou de faire certaines manipulations
- Soit il manque un import des fonctions utilisées.
Ces oublis peuvent aussi provoquer d’autres erreurs Pour les résoudre, vérifie tes imports et tu peux également aller dans colab Execution>Executer tout le code pour relancer toutes les cellules si tu n’arrive pas à trouver quelle cellule n’as pas été éxécuté.
Overfiting et apprentissage par coeur
Dans certains cas, il arrive que le réseau de neurones apprenne par cœur ses données d’entraînement.
On voit cela au fait l’accuracy est très très bonne (souvent 1), mais la val_acc (l’accuracy sur les données de test) est très mauvaise. Cela signifie que pendant l’entraînement aucun souci mais dès qu’on lui présente de nouvelles données, plus rien ne va.
Il existe plusieurs solutions pour contrer cela :
- introduire un dropout
- augmenter le nombre de données
- réduire le nombre de couches ou de neurones du réseau
Généralement le dropout est une bonne première base.
Underfiting et absence d’apprentissage
Dans certains cas, il arrive que le réseau de neurones n’arrive pas à apprendre.
On voit cela au fait que les valeurs n’évoluent pas vraiment au fil des différentes époques. Cela signifie que le réseau n’arrive pas à apprendre, cela peut-être du à un problème trop complexe, ou un réseau pas assez développé. Ces problèmes sont un peu plus complexes à gérer que l’overfiting.
Il existe plusieurs pistes de solutions pour contrer cela :
- augmenter le nombre de couches ou de neurones du réseau
- réduire le nombre de catégories
- trier les données pour éliminer les données de mauvaises qualités ou biaisées
- vérifier la préparation des données et visualiser les différentes étapes de préparation
Généralement s’intéresser aux données est un premier axe