Bonjour,
Avec plaisir pour échanger avec celles et ceux qui suivent le cours fastai. Voici une timeline de la vidéo de la lesson 1 d’hier (avec les liens vers les parties correspondantes dans la video).
Accueil
- (sans lien avec le DL) Discours d’accueil de Pete Baker : https://www.youtube.com/watch?v=7hX8yKCX6xM&t=1580
- (sans lien avec le DL) Discours d’accueil de David Uminsky (Director of the USF Data Institute): https://www.youtube.com/watch?v=7hX8yKCX6xM&t=1869
Jeremy Howard
-
Accueil et informations générales : https://www.youtube.com/watch?v=7hX8yKCX6xM&t=1964
-
Thread sur la lesson 1 dans le forum : https://www.youtube.com/watch?v=7hX8yKCX6xM&t=2415
– Thread : https://forums.fast.ai/t/lesson-1-class-discussion-and-resources/27332
– Docs sur le cours : http://course-v3.fast.ai/
– Docs sur fastai en html : http://docs.fast.ai
– Docs sur fastai dans github : https://github.com/fastai/fastai_docs
– Docs sur fastai en jupyter notebooks : https://github.com/fastai/fastai_docs/tree/master/docs_src -
Setup de GPU en ligne : https://www.youtube.com/watch?v=7hX8yKCX6xM&t=2502
– installer un GPU : http://course-v3.fast.ai/#using-a-gpu
– FAQ sur le cours : https://forums.fast.ai/t/faq-and-resources-read-this-first/24987 -
Début du cours : https://www.youtube.com/watch?v=7hX8yKCX6xM&t=3142
– Jupyter notebook : https://github.com/fastai/course-v3/blob/master/nbs/dl1/00_notebook_tutorial.ipynb
Notebook 1
(https://github.com/fastai/course-v3/blob/master/nbs/dl1/lesson1-pets.ipynb)
-
Etape 1 : importer et préparer les images (https://www.youtube.com/watch?v=7hX8yKCX6xM&t=3890)
– création du dataset généraldatabunch
qui contient les 3 datasets train, val et test
-
Etape 2 : créer le modèle (https://www.youtube.com/watch?v=7hX8yKCX6xM&t=5274)
– création du modèlelearn
qui contient l’architecture du réseau neuronal et le datasetdatabunch
(on peut y ajouter la métrique d’évaluation de l’erreur sur le val set)
– Transfert Learning : on utilise les paramètres d’un modèle déjà entraîné à reconnaître des objets dans des images (resnet34)
– Overfitting : pour vérifier que pendant son entraînement notre modèle ne se spécialise pas sur le train set mais apprend bien à reconnaître les caractéristiques générales des objets à détecter, on utilise un val set sur lequel on calcule l’erreur (cf. métrique ci_dessus dans le modèlelearn
)
-
Etape 3 : entraîner le modèle avec la méthode
fit_one_cycle()
et non plusfit()
comme dans la version précédente du cours (explication du papier de Leslie Smith dans l’article de @sgugger : The 1cycle policy)
Reprise après la pause : https://www.youtube.com/watch?v=7hX8yKCX6xM&t=6536
-
Etape 4 : analyser les prévisions faites par le modèle pour comprendre son fonctionnement et éventuellement l’améliorer (https://www.youtube.com/watch?v=7hX8yKCX6xM&t=7922)
– utilisation de l’objetinterp
instancié par la méthodeClassificationInterpretation.from_learner(learn)
– 3 méthodes à utiliser sur l’objetinterp
:
—plot_top_losse()
pour visualiser les images sur lesquelles le modèle génère une grosse erreur (loss),
—plot_confusion_matrix()
qui affiche la Confusion Matrix,
—most_confused()
qui publie la liste des labels (classes) prédits avec le plus grand nombre d’erreurs -
Etape 5 : améliorer le modèle (https://www.youtube.com/watch?v=7hX8yKCX6xM&t=8310)
– rechercher le meilleur Learning Rate avec la méthodelr_find()
puisrecorder.plot()
(pour afficher la courbe loss-vs-lr)
– utiliser alors la méthodeunfreeze()
sur le modèlelearn
afin de pouvoir entraîner toutes les couches du réseau resnet34 et pas seulement celles ajoutées à la fin du modèle afin d’avoir une architecture capable de donner une probabilité pour chacune des 37 classes… MAIS en utilisant des Learning Rate différents selon les couches vialearn.fit_one_cycle(2, max_lr=slice(1e-6,1e-4))
: l’idée est que les premières couches n’ont pas besoin d’être beaucoup modifiées car elles ont été entraînées à détecter des formes géométriques simples qui se retrouvent dans toutes images. -
Etape 6 : on peut obtenir encore un meilleur résultat (une erreur plus faible) en changeant de modèle et en utilisant un modèle plus compliqué (plus profond) comme resnet50 (https://www.youtube.com/watch?v=7hX8yKCX6xM&t=9018)