-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
model_keras #24
Comments
Objectifs par ordre de priorité (1 = + prioritaire)
On veut ce type de courbe : (source )
Comme on le voit sur l'image du dessus l'erreur décroit mais fini par se stabiliser au bout d'un certain temps. Si on continue d'entrainer le modèle, l'erreur de validation réaugmentera car le modèle surrajustera.
Tests à réaliser :Interprétation générale : pas d'apprentissage, peut-être pas de généralisation Tests pour tenter d'améliorer l'aptitude à généraliser (chiffre petit = + prioritaire ; chiffre grand = - prioritaire)
|
TODOAjouter matrice de confusion |
Ressource, interprétation de courbes d'entrainement d'ia : https://machinelearningmastery.com/learning-curves-for-diagnosing-machine-learning-model-performance/ |
Tests learning rate et epsilon de l'optimisateur Adamlr = [10**-3,10**-4,10**-5] # 3 possibilités
eps = [10**-7,10**-5,10**-4,10**-3,10**-2] # 5 possibilités 15 possibilités x 1h = 15h Taille d'image fournie à l'IA = 1600 // 4 x 900 //4 = 400x225 ; batch_size = 10 On notera que dans tous les diagrammes suivant l'axe des abscisses correspond au nombre d'images passées au réseau à l'instant de la mesure
Espace exploré Espaces explorés corrects mais précision et stabilité, indexs arbitraires à ne pas prendre en compte https://plotly.com/~Robin123.456/1/ 🎯On a jamais de convergence quels que soient les paramètres de l'optimisateur |
Paramètres du Adam optimizer, documentation |
Changement de lossAvant MSE Passage en categorical_cross_entropy Que représente l'entropie croisée : Cross-entropy is a measure of the difference between two probability distributions for a given random variable or set of events. Pb : label = vecteur de fréquence et pas proba de présence Seule alternative envisageable (dernier recours) : GAN pour tenter de déterminer si les valeurs générées |
Modifier l'architecture - priorités
|
Tests learning rate et epsilon de l'optimisateur AdamNouvel essai avec batch_size = 10 et sigoid à la fin
Valeurs explorées📝Amélioration globale des loss ; observation d'une convergence de la loss ; toujours pas d'amélioration de l'erreur La priorité serait plus maintenant de stabiliser le modèle pour voir si il y a vraiment un apprentissage |
Nuance sur la métrique d'erreurFaiblesse de la métriqueTelle qu'elle la métrique d'erreur est calculée à partir de l'accuracy (erreur = 100 - accuracy). L'accuracy compte le pourcentage de valeurs exatement prédites par le réseau Cette métrique ne rend pas forcément compte d'à quel point le modèle est précis : exemple avec des fréquences pour 5 classes (juste pour expliciter l'idée (+ de classes pour nuscene et autre)) Ici l'accuracy vaut 2/5*100 = 40% donc 60% d'erreur On ne peut pas dire avec l'erreur telle que définie actuellement à quel point le modèle se trompe. On évalue juste pour chaque résultat à combien de reprise le modèle s'est trompé pour une prédiction. Ainsi on ne fait pas la différence entre une erreur importante sur la classe 1 et une erreur beaucoup plus faible sur la classe Faiblesse des valeurs préditesOn fait prédire une fréquence d'apparition d'objets sur des images. Néanmoins, on peut se poser la question de la pertinence de ce choix : en effet, on ne demande pas au réseau pour le moment de prédire le nombre d'objets présents sur l'image 2 corrections possibles :
Rappel : Idée originale : prédiction d'un vecteur indiquant pour chaque classe la fréquence d'apparition normalisée par le nombre d'objets présents sur l'image
|
Prédiction de fréquence d'apparition non normalisée des classesProblème : fonction d'activation de la dernière couche
Liste fonctions d'activation de keras On fixe batch_size=10 ; lr=1e-3 ; epsilon=1e-7
Comparaison des fonction Ajout d'un layer d'échantillonnage pour la métrique d'accuracyAvant d'appliquer la fonction accuracy(prediction_freq,reference_freq), on ajoute une étape qui arrondira / prendra la partie entière (?) des valeurs prédites avant d'appliquer la fonction accuracy Pas ce qui a été fait dans tous les essais suivant : calcul effectué : calcul de l'accuracy puis arrondi/partie entière, d'où les 100% ou 0% de précision Cela permet
(toujours lr=1e-3 ; eps=1e-7 ; batch_size=10)
📝Les fonctions linear, softplus ou exponential permettent d'obtenir le meilleur résultat. Ajuster l'accuracy pour ramener le nombre de classes présentes de float à int n'est pas forcément nécessaire. |
Modifier l'architecture - Diminuer le nb de modules avec la nouvelle métriqueOn note les modules tels que précisés sur l'architecture synthétique. Recherche par dichotomie. On enchaine le nombre de filtre suivant (128 256 512 728 1024). Update c9b6966 du code pour choix via les arguments du nb de modules (ce qui permet de lancer en parallèle les tests avec != nb de modules) Rappel de l'architecture de base (4 modules) : Paramètres fixes : lr=1e-3 ; epsilon=1e-7 ; batch_size=10 ; adaptation de la métrique erreur avec round ; lastActivation linear (en général ce que j'ai vu sur internet pour d'autres modèles)
|
Remplacement couche GlobalAveragePooling par couche FlattenMotivation : traditionnellement un réseau se termine par une couche flatten pour appliquer ensuite la/les couches denses finales. Ici une couche GlobalAveragePooling est appliquée Différence :
On garde sinon l'architecture originale Paramètres fixes : lr=1e-3 ; epsilon=1e-7 ; batch_size=10 ; adaptation de la métrique erreur avec round ; lastActivation linear (en général ce que j'ai vu sur internet pour d'autres modèles)
📝Plus instable au début. Peut peut-être interprété comme un apprentissage. Mêmes fluctuations après |
Diminution du dropout rateEn effet, d'après les courbes d'apprentissages le réseau ne parvient pas à apprendre. On peut tenter de lui laisser "plus de libertés" quitte à ce qu'il overfit. On garde sinon l'architecture originale Paramètres fixes : lr=1e-3 ; epsilon=1e-7 ; batch_size=10 ; adaptation de la métrique erreur avec round ; lastActivation linear (en général ce que j'ai vu sur internet pour d'autres modèles)
📝Pas de grand changement |
Ajout régularisationOn garde sinon l'architecture originale Paramètres fixes : lr=1e-3 ; epsilon=1e-7 ; batch_size=10 ; adaptation de la métrique erreur avec round ; lastActivation linear (en général ce que j'ai vu sur internet pour d'autres modèles)
📝Pas de grand changement : ne stabilise pas la courbe d'erreur |
Ajout plus de couches pour donner plus de capacité à fitter les donnéesParamètres fixes : lr=1e-3 ; epsilon=1e-7 ; batch_size=10 ; adaptation de la métrique erreur avec round ; lastActivation linear (en général ce que j'ai vu sur internet pour d'autres modèles)
📝 L'erreur stagne moins à 100 % |
Reprise des idées originales du réseauVersion miniature de Xception (https://arxiv.org/pdf/1610.02357.pdf) On peut noter dans le papier les éléments d'entrainement suivants :
Questions :
|
Essai en enlevant le biais et avec SGDSGD moment 0.9 ; lr_init = 0.045 (pas de decay car on ne fait pas une epoch)
|
Réutiliser les poids déjà entrainésContrainte de https://keras.io/api/applications/xception/
créer le modèle xception avec le include_top avec une fonction de classification random, loader les poids imagenet getter la couche avg_pool pour construire le nouveau modèle Modèle transfer learning depuis xception en changeant juste la couche finale pour s'adapter au nb de couches de nuscene : Entrainement avec SGD |
Regarder la distribution des valeursProblèmeloss MSE assume que les valeurs à prédire suivent une distribution normale "For a Gaussian distribution, this is the best unbiased estimator (i.e., one with the lowest MSE among all unbiased estimators), but not, say, for a uniform distribution." (wikipedia) Distributions dans le dossier 2021-04-19_12h06min43s_class_distribution_nuscene de data Très clairement pas équilibré Solutions envisageables1. Privilégier les images comportant des classes moins présentes dans le datasetdonne plus d'importance aux classes sous-représentées : si la classe chien est sous-représentée, l'erreur pour une image contenant un chien sera diminuée pour cette classe 2. Privilégier les images comportant des effectifs de classes moins présents dans le datasetdonne plus d'importance aux effectifs de classes sous-représentés : si il est rare que 100 chiens soit présents sur une image, si ce cas se présente on va diminuer la loss concernant le nombre de chiens Résultats : visualisation des courbes d'erreurNote : gris et bleu : courbe avec erreur pondérée suivant méthode 2 (resp. optimiseur Adam et SGD avec paramètres par défaut) ; orange et rouge courbes pondérées suivant méthode 1 (resp optimiseur Adam et SGD) Courbes d'erreur en pourcent d'entrainement (arrondi) Courbes d'erreur en pourcent d'erreur de validation (arrondi) 📝 Pas de différence majeure avec un entrainement simple Commit de référence : 237d421 |
Réduction de la taille des imagesD'après publication EfficientNetV2 (partie 4.2 §3) on note que l'on peut améliorer l'apprentissage en le commençant avec des petites images (lui permettant d'apprendre les motifs simples) puis en lui fournissant après de plus grandes rendant la tâche plus difficile Dans un premier temps nous pouvons commencer par entrainer le réseau sur de plus petites images (de l'ordre de 128 px) (Mis en place au commit 2870a38) NB : On a bien fait attention à ne pas trop diminuer la taille : en effet, le réseau réduit les dimensions de l'images à 4 reprises 📝 Aucun changement |
En cours d'écriture: NORBERT'S REPORT |
Mieux évaluer la précision du modèleRéentrainement de Norbert (Xception + petit non préentrainé) et de Xception (préentrainé) avec adam et sgd + génération d'1 matrice de confusionOrange : adam (paramètres par défaut) transfert learning : Xception (entrainement 2021-05-01_23h54min18s) 📓 NB : les courbes les + opaques sont des courbes lissées à 0.6 (sur le tensorboard), les courbes réelles sont en moins opaque de la même couleur Courbes d'erreur d'entrainement (erreur arrondie à l'entier le + près) Courbes d'erreur de validation (erreur arrondie à l'entier le + près) A noter que Xception est plus "gros/profond" que Norbert lien vers image (trop grande pour être affichée) Calcul et affichage de matrices de confusion pour chaque classeNote : précision en % = nombre d'images tel que la prédiction est sur la diagonale sur nombre total d'images Quelques exemples lisibles :
La classe animalOrange : adam (paramètres par défaut) transfert learning : Xception (entrainement 2021-05-01_23h54min18s) Rouge : adam (paramètres par défaut) : Norbert (entrainement 2021-05-01_23h54min26s) Bleu : sgd (paramètres par défaut) : Norbert (entrainement 2021-05-01_23h54min22s) childOrange : adam (paramètres par défaut) transfert learning : Xception (entrainement 2021-05-01_23h54min18s) Rouge : adam (paramètres par défaut) : Norbert (entrainement 2021-05-01_23h54min26s) Bleu : sgd (paramètres par défaut) : Norbert (entrainement 2021-05-01_23h54min22s) trafficiconOrange : adam (paramètres par défaut) transfert learning : Xception (entrainement 2021-05-01_23h54min18s) Rouge : adam (paramètres par défaut) : Norbert (entrainement 2021-05-01_23h54min26s) Bleu : sgd (paramètres par défaut) : Norbert (entrainement 2021-05-01_23h54min22s) motorcycleOrange : adam (paramètres par défaut) transfert learning : Xception (entrainement 2021-05-01_23h54min18s) Rouge : adam (paramètres par défaut) : Norbert (entrainement 2021-05-01_23h54min26s) Bleu : sgd (paramètres par défaut) : Norbert (entrainement 2021-05-01_23h54min22s) |
Problème d'apprentissage
Problème
Version a2fa05f
![2021-04-13 00_46_44-ImageMagick_ erreur_accuracy png@srv-gei-gpu1](https://user-images.githubusercontent.com/42274857/114472021-70f93e80-9be9-11eb-9730-47e88f269772.png)
Aucun apprentissage
Loss MSE
Etapes suivies / sommaire
a. Retrait de la fonction softmax de la dernière couche remplacée par une fonction sigmoid
a. Essais de plusieurs fonctions d'activations
Raisonnement générale
Sommaire - étapes 1 à 3 : Hypothèse : modèle ok juste à régler les paramètres d'entrainement (- de possibilités à tester)
Sommaire - étape 4 : les valeurs prédites sont contraintes de se sommer à 1 par la fonction d'activation softmax retournant un vecteur de probabilités. Remplacement par une sigmoid
Sommaire - étape 5 : actualisation des tests de paramètres d'entrainement
Sommaire - étape 6 : les valeurs prédites n'indiquent pas combien d'objet de chaque classe apparaissent sur chaque image
Sommaire - étape 6.a. : changement de sortie du réseau : nouvelle sortie, effectif de chaque classe pour chaque image. Tests pour trouver une nouvelle fonction d'activation finale adaptée qui ne limite pas chaque effectif à 1 comme une fonction sigmoid.
Sommaire - étape 7-8 : Supposition : nécessité d'ajuster l'architecture
Sommaire - étape 9 : Supposition : le modèle underfit : trop contraint, pas assez de couches pour prédire correctement.
model_keras_graphLayers
The text was updated successfully, but these errors were encountered: