Study Group in French

Bonjour à tous,
je suis de la région de Strasbourg.
C’est mon premier cours de fast.ai que je suis. (depuis le temps que je m’y intéresse ^^)
Je connais Python mais pas encore la librairie PyTorch.
Mon background : ingé info.

J’ai commencé à regarder la vidéo du cours.
Une bonne partie du début de la vidéo concerne la mise en place du cours en présentiel déjà 30 min. vous pouvez zapper le début ! (ça commencera à l’heure exacte pour les prochaines sessions)

Ceux sur place doivent s’organiser en groupe de 6.

Ceux suivant en live le font sur un groupe d’étude, nous par exemple qui fréquentons ce fil de discussion formons un groupe d’étude, mais j’imagine que vous pouvez vous organiser pour des projets précis.

Il est proposé de créer/utiliser un outil de collaboration quelconque. Un googlesheet ou autre. Un calendrier pour nos discussions éventuelles live serait éventuellement utile.

L’horaire me va, mais je ne sais pas combien j’aurai avancé.

Je compte faire tourner sur ma propre machine, j’ai vu un tuto qui semblait pas trop long. Bien que l’option cloud payant soit tentante (mais aucune idée de combien d’heures totales de calcul on va avoir besoin ?!)

à bientôt

Welcome.
Si tu as un GPU et que tu es familier d’Ubuntu c’est effectivement facile d’installer tout le système: 4 lignes à copier-coller.
Donc mieux vaut le faire en local si tu es équipé, c’est ce que je fait. Ca évite de payer pour rien, tu peux lancer des calculs plus long pour améliorer la précision des modèles et faire autant de test que tu veux sans la pression du coût.

Je suis OK pour le Hangout mercredi.
Je pense que je vais acheter une nouvelle machine pour travailler en local.
Ram 16Go, Intel core i7, NVIDIA GeForce GTX 1070, SSD 480 Go, tu penses que ça suffit ?

ok pout le hangout mercredi

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

Jeremy Howard

Notebook 1
(https://github.com/fastai/course-v3/blob/master/nbs/dl1/lesson1-pets.ipynb)

  • Etape 2 : créer le modèle (https://www.youtube.com/watch?v=7hX8yKCX6xM&t=5274)
    – création du modèle learn qui contient l’architecture du réseau neuronal et le dataset databunch (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èle learn)
  • Etape 3 : entraîner le modèle avec la méthode fit_one_cycle() et non plus fit() 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’objet interp instancié par la méthode ClassificationInterpretation.from_learner(learn)
    – 3 méthodes à utiliser sur l’objet interp :
    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éthode lr_find() puis recorder.plot() (pour afficher la courbe loss-vs-lr)
    – utiliser alors la méthode unfreeze() sur le modèle learn 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 via learn.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)

12 Likes

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.

1 Like

Merci beaucoup @Benoit_c pour tes conseils!

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 :wink:

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 :slight_smile: )

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 :slight_smile:

Ah ok, je n’avais pas vu que ça avait été ajouté au Wiki thread, merci ! :slight_smile:

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

https://twitter.com/samcharrington?lang=da

Moteur de recherche de dataset :
https://toolbox.google.com/datasetsearch

2 Likes

voice l’article de leslie smidth: https://arxiv.org/abs/1803.09820

1 Like

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?