A mon tour de me présenter:
Je suis étudiant en Ingé, j’ai donc forcément moins d’expérience que vous mais je suis bien motivé!
J’ai déjà utilisé Python et un peu utilisé Pytorch (mais souvent pour des programmes assez simples).
J’ai aussi commencé à m’intéresser aux maths appliqués qui servent dans le Deep Learning (descente de gradient, convolutions…)
Enfin je suis surtout intéressé par la partie computer vision du Deep Learning mais j’aime le reste aussi!
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)
Merci @pierreguillou.
Je vais me présenter aussi : Je bosse depuis 20 ans dans le dev, principalement sur des projets web en tant que chef de projet technique. En ce moment je suis freelance sur du big data et j’aimerais évoluer vers des projets de Deep Learning. Le computer vision me passionne aussi mais il faut savoir que ce qui intéresse majoritairement les entreprises c’est l’analyse de données structurées (base de données d’historique de ventes par exemple), puis le NLP et en dernier lieu les images.
@Mathieu : pas facile de conseiller une machine : il faut prendre le plus gros GPU que tu puisses t’offrir, mais ça périme vite aussi alors une GTX 1070 n’est pas un mauvais choix car il y a quand même 8Go. Pour la RAM assure toi de pouvoir ajouter 16Go si besoin plus tard car 32Go peuvent être bénéfique pour le machine learning classique avec Pandas. Mais ça n’a rien d’obligatoire.
Personnellement j’ai une bête de course avec 32 cœurs, 32Go de RAM, SSD NVME et GTX1080ti. Donc pas trop dans le budget d’un étudiant…
Vu le prix du matos acheter une machine correcte comme tu le proposes est un bon choix. Rien ne t’empêche quand tu as trouvé les bons paramètres en local de louer du cloud pour faire tourner ton modèle sur des machines plus grosses.
Bonjour, pour ceux qui sont sur Lyon,ça vous dit qu’on crée un groupe de travail ?
Bonsoir,
J’ai partagé mon code et mon dataset de classification d’avions A380 et B747 : https://forums.fast.ai/t/lesson-1-beat-google-auto-ml-at-b747-vs-a380/27764
Il y a encore beaucoup à faire alors toute aide sera la bienvenue
Salut Pierre,
Où as-tu trouvé les liens pour la vidéo, ils ont été posté sur le forum ? Ce serait une bonne chose si les vidéos sont systématiquement postées le lendemain (ça éviterait de se lever à 3h du matin )
Bonjour Nathan,
les liens principaux (video, doc, notebooks…) ont été publiés dans le thread Lesson 1: class discussion and resources et ne peuvent pas être publiés en dehors du forum (Jeremy le fera début janvier). J’ai juste ajouté le temps pour accéder directement à certaines parties. Si Jeremy suit le même déroulé que pour les versions précédentes, le lien vers la video sera immédiatement posté sur le forum après le cours… ce qui est sympa en effet
Ah ok, je n’avais pas vu que ça avait été ajouté au Wiki thread, merci !
Merci, Pierre, pour cette timeline de la video qui est tellement utile!
Voici le lien pour le Hangout de ce soir 21h (heure de Paris): https://hangouts.google.com/call/9Jf5bBO3qAJeYb4Dtp-XAAEI
Je n’arrive pas a utiliser mon lien, autre tentative : https://hangouts.google.com/call/myowXXPFIVz72fSMcWRNAAEI
En lien avec l’article proposé par Kaspar, voir l’explication très intéressante de sgugger sur la fonction learner.fit_one_cycle() :
https://sgugger.github.io/the-1cycle-policy.html#the-1cycle-policy
Concernant la fonction data.normalize():
Lors de l’entraînement, doit-on utiliser la moyenne et l’écart-type de l’ensemble du jeu de données ou seulement du jeu d’entraînement?
Lors de la prédiction, qu’utilise-t-on alors pour la normalisation de l’image à prédire:
-la moyenne et l’écart-type du jeu d’entraînement?
-la moyenne et l’écart-type de l’ensemble du jeu de données?
-la moyenne et l’écart-type de l’image à prédire?
en pratique jeremy calcule le moyenne et std sur l’ensembe de donnes. apres chaque image est normalisee comme (image-moyenne)/std
ok merci
Même remarque que pour l’autre timeline
Petite correction, la moyenne et l’écart-type sont plutôt calculées sur l’ensemble d’entrainement (l’ensemble de validation devant être laissé à l’écart le plus possible). En pratique cependant, si l’ensemble de validation est proprement choisi, on trouve le même résultat avec le calcul sur tout l’ensemble ou just l’ensemble d’entrainement.