Session du 22 juillet 2024 à 20h30
Data Science & IA
CNN - Convolutional Neural Network
Session Discord dédiée aux Réseau neuronal convolutif (CNN) faisant suite à la session récente sur le Deep Learning.
00:09:06 :Est-ce que, par exemple, vous avez des questions sur ce qu'on vient de voir à l'instant ?Moi, je voulais voir un truc aussi, c'était, quand tu fais la convolution justement et le pooling, tu traites, en fait, voilà, des parties de ton image et tu récupères donc, en fait, que la partie qui t'intéresse, si tu fais le max pooling ou le average pooling, et du coup, tu perds forcément en qualité de données, non ?
00:09:30 :C'est ça qui joue sur la mise, comment on appelle ça, la marge d'erreur de l'IA, quoi, quand tu as fait le traitement, quoi.Alors ça, c'est une bonne question. En fait, je suis d'accord avec toi, tu vas perdre, en fait, au niveau des features, tu perds au niveau des caractéristiques, mais vu que ça t'a fait ressortir, en fait, sur une image, par exemple, là, si je prends l'image des bateaux ici, tu vois, pour savoir si c'est un boat, en fait, tu te rends compte que sur l'image, des fois, tu as des choses qui ne te servent pas, en fait.
00:12:08 :Ouais, en fonction de ce que t'as besoin, tu peux choisir, tu fais plus les convolutions, les poolings, d'accord, ok, je comprends.Bah en fait, ce qui va se passer, c'est ça que tu vas le savoir, que lorsque tu vas pouvoir faire tourner la molinette, que tu vas tester ton réseau, j'ai un petit exemple tout à l'heure, où en fait, tu vas te rendre compte que quand tu vas calculer tes scores, etc., ta fonction de perte et tout,
00:13:15 :Tu peux juste te rapprocher de quelque chose qui va être... qui va pouvoir répondre ou pas à tes... à ton besoin, quoi.Ok, ça marche.
00:13:27 :Ok. Est-ce que d'autres personnes ont des questions ? Donc, on commence en live coding.Non. Bon. Alors, du coup, tac, hop.Alors, je me connecte sur mon numéro chez moi. Hop là. Tac.
00:14:02 :Parce que je ne vais pas reprendre un petit peu la... comment ça fonctionne, mais un Jupyter Notebook, d'accord, c'est du Python.Ok, simplement, en fait, ce qu'on va faire, c'est qu'on va... pour ne pas relancer le code à chaque fois, on va créer des notebooks, d'accord ?
00:14:17 :Donc, je vais créer un Jupyter Notebook.Donc, dans un premier temps, la première chose qu'on fait dans un projet en Python, en Java, en C, ce que vous voulez, c'est d'importer les librairies.
00:14:58 :Donc, c'est quelque chose qui est assez récent, qui est maintenu. Vous avez une documentation de fou sur Internet.Enfin, c'est vraiment quelque chose qui est resté solide pour faire du... comment ça s'appelle ? De l'IA.
00:15:09 :Ensuite, ce qu'on va faire, alors, on va importer les layers. Donc, from Keras, import layers, fait avec les modèles.Ça, ça va nous permettre, en fait, de pouvoir créer nos couches de convolution, notre maxPooling, notre ridgePooling, ou de notre flatten, d'accord ?
00:15:29 :Ensuite, depuis Keras, on va importer le dataset NMIST, sur lequel on va faire notre application.Donc, rappelez-vous, c'est un dataset qui contient 9 classes, d'accord ?
00:15:41 :On va importer aussi Matplotlib, qui permet de visualiser un petit peu les données que nous avons dans notre dataset.On va importer NumPy, qui est pour générer, en fait, des matrices.
00:15:57 :Voilà. Donc là, c'est good.Alors, quand on va charger, en fait, le NMIST, ce qui va nous renvoyer, ce sont deux tubes.Un tube qui va servir, en fait, pour l'entraînement de notre IA, d'accord ?
00:16:11 :Et un tube qui va nous permettre de tester et d'évaluer un petit peu les performances, d'accord ?Donc, on appelle ça le train et le test.
00:16:19 :Il y a deux tubes qui contiennent deux éléments, un X-train et un Y-train.Rappelez-vous, je vous ai dit, il faut toujours avoir une source et une target, quand on fait du supervisé.
00:16:30 :Donc, en fait, la source, c'est notre image, la target, c'est le label.Donc, le label, c'est les chiffres qu'on aimerait récupérer, d'accord ?Alors, MNIST.loadData.
00:16:43 :Donc là, je vais load mon data.Et la première chose que je fais toujours, d'accord ?Comme je vous ai dit, c'est déjà de regarder un petit peu les tailles de nos entrées, d'accord ?
00:16:56 :Donc, vous avez une fonction qui s'appelle shape qui nous permet de voir un petit peu les dimensions de nos matrices.Donc, la première dimension est de 60 000 images de taille 28 par 28.
00:17:07 :La deuxième de 10 000 de taille 28 par 28.Donc maintenant, ce qu'on va pouvoir essayer de faire déjà, c'est de voir à quoi ça correspond une image, en fait.
00:17:17 :Parce que ça, c'est bien beau de connaître ça. Je vous ai dit, c'est un peu du manuscrit.Mais du coup, vous ne pouvez peut-être pas me croire.
00:17:24 :Alors voici une image telle qu'elle est.Donc là, j'ai pris l'image 0 de mon tableau X-train, d'accord ?Donc là, on voit que c'est un chiffre 5.
00:17:34 :Je vais aussi afficher le label en question pour vérifier que je vois bien le chiffre 5.Alors, il faut savoir que des fois, dans MNIST, en fait, nous, on ne les voit pas très très bien.
00:17:42 :Donc là, c'est bien le chiffre 5 qui s'affiche.Je peux faire un autre test. Par exemple, 64.Je teste. Et là, je vois bien le chiffre 4, d'accord ?
00:17:55 :Donc nous, on va réaliser une IA qui va pouvoir se baser sur la classification de ces chiffres-là, de ces données-là.On a de la chance, MNIST, en fait, vu que c'est un dataset qui est vraiment super connu et qui est directement dans la librairie Keras,les données sont déjà labellisées et sont déjà propres,
00:18:15 :propres dans le sens où, en fait, toutes les images font la même dimension.Parfois, lorsque vous importez des datasets qui viennent, par exemple, d'un site qui s'appelle Kaggleou d'un autre site qui va s'appeler Hugging Face, vous avez des images qui sont de tailles différentes.
00:18:30 :Donc ce sera à vous de pouvoir les normaliser pour pouvoir avoir une certaine flexibilité et avoir un contrôle là-dessus.Maintenant, ce qu'on va faire, c'est... Donc la première étape avant de faire tout ça, ça va être de faire du data processing, d'accord ?
00:18:48 :C'est une étape assez cruciale qu'on fait souvent quand on fait de l'IA, d'accord ?C'est-à-dire qu'on va pouvoir établir des techniques pour un petit peu laver un petit peu nos données, d'accord ?
00:18:59 :Alors, pourquoi laver nos données ?Si je prends, en fait, l'extrême de 64, par exemple, d'accord ?Et je regarde, par exemple, le type de la valeur 0 de mon tableau.
00:19:14 :Hop, je mets une parenthèse.On se rend compte, donc on a un tableau, un tableau d'empaie, d'accord ?On va enlever... Voilà.Là, ce qu'on a, c'est un tableau d'empaie, mais ce qui pose le problème, c'est qu'en fait, le datatype, c'est un UINT8, d'accord ?
00:19:32 :Et ça, on n'aime pas trop quand on fait de l'IA, d'accord ?On aime bien souvent être en float 32, ok ?Donc, une manière de faire qui est assez courante, d'accord ?
00:19:42 :C'est de convertir tout le dataset, donc l'extrême et l'extrême, en float 32, d'accord ?Donc c'est ce que je vous propose de faire.Tac.Ok.
00:20:01 :Et de diviner tout ça par 255.Pourquoi 255 ? Parce que ça nous permet d'avoir des images qui sont directement confluites entre 0 et 1, d'accord ?
00:20:11 :On normalise par... Pourquoi 255 ? Parce que c'est la valeur maximale que peut prendre un pixel, d'accord ?Donc c'est pour ça qu'on fait ceci.
00:20:20 :On va le faire aussi pour le X-Test.Alors, qu'est-ce qu'on a comme gains ? On a aussi un gain de performance, d'accord ?Parce que quand on travaille des valeurs entre 0 et 1, la machine va beaucoup plus vite, d'accord ?
00:20:30 :Là, à l'occurrence, on n'a pas besoin de faire tourner notre calcul sur un GPU.On le fera que sur CPU pour cette vidéo-là.Mais sur la prochaine vidéo, lorsque je vais parler des génératives adversaires network,donc les gains pour faire des IA génératives,en général, on fait tourner sur GPU parce que le temps de traitement peut dépasser vraiment...
00:20:49 :Ça peut être vraiment catastrophique, quoi.Donc maintenant, une chose qu'on va faire quand on regarde notre X-Train plancher.Donc je vous ai montré ici.On a du 28 par 28, d'accord ?
00:21:00 :Mais rappelez-vous, une image, elle est sur trois dimensions.On a d'abord la Height, la Width, donc largeur-longueur.Et on a souvent aussi... Il faut rajouter en fait une dimension pour dire...
00:21:12 :Quand j'ai une image en couleur, je suis sur 3 channels, donc RGB, d'accord ?Mais quand je suis sur une image en noir et blanc, je ne suis sur qu'un channel.
00:21:25 :Alors là, il faut savoir que les images qu'on a ici, d'accord ?Donc quand j'ai fait un PFT pour IamShow, ok ?Ma plugtip, en fait, dans sa fonction IamShow, l'a réalisée en couleur.
00:21:35 :Mais là, vous vous rendez bien compte que du coup, quand on a du 28 par 28,on n'est qu'en noir et blanc, d'accord ?Mais il faut quand même rajouter une dimension en plus,pour avoir en fait une matrice en 4 dimensions.
00:21:46 :La première dimension sera le nombre d'images que vous avez.Celle-ci sera la largeur et la longueur.Et la troisième correspondra du coup à le fait de dire à la machineque c'est une image en noir et blanc, d'accord ?
00:22:00 :Donc en fait, on peut le faire assez rapidement avec une fonction qui s'appelle Expand de NumPy.Alors NP, c'est le diminutif de NumPy, d'accord ?
00:22:07 :Quand je l'ai fait dans les imports, j'ai mis un ASNP.C'est beaucoup plus simple comme ça, on s'embête pas à pouvoir tout recopier.Et on va ajouter ceci, d'accord ?
00:22:17 :On va faire pareil pour le Xtest, d'accord ?Tout ce qu'on applique à Xtrain s'applique aussi à Xtest, ok ?Voilà, ok.Alors, il me le majuscule, voilà.
00:22:35 :Maintenant, le premier réflexe qu'il faut faire, je vous le disais,c'est de souvent vérifier les dimensions.Ça, c'est quelque chose qu'il faut vraiment avoir comme réflexe.
00:22:43 :Je vous dis ça par expérience parce que souvent,ça arrive vraiment de se faire avoir bêtement sur ce truc-là.Donc là, on voit bien qu'on est bien en matrice de dimension 4, ok ?
00:22:54 :C'est bon pour tout le monde ?Ok, alors maintenant, quelque chose qu'on va pouvoir faire en fait,alors là, on va passer avec les labels maintenant.
00:23:04 :On a, comme on dit, 8 types de labels, d'accord ?Lorsque je regarde un petit peu les valeurs que je vais avoir dans mon Ytrain, d'accord ?
00:23:12 :Donc avec la fonction NP unique, je me rends compte que j'ai 10 chiffres possibles, d'accord ?Moi, ça, c'est un petit peu problématique.C'est-à-dire qu'on peut améliorer ça en disant par exemple,si on prenait, là, on est bien d'accord que Ytrain, d'accord ?
00:23:29 :Lorsque je vais regarder sa dimension, donc je vous laisse deviner,on est bien sur un vecteur, d'accord ?Une matrice de dimension 1.On a bien 6000, alors quand on n'est virgule rien, 6,1, d'accord ?
00:23:42 :C'est par convention.On est sur un vecteur ligne, d'accord ?Donc, ce qui va se passer, c'est que nous, on va le transformer ça en dimension 6010.
00:23:52 :Pourquoi ? Parce qu'en fait, on va faire ce qu'on appelle un right-hook coding,c'est-à-dire qu'on va encoder nos Y.Je m'explique.Chaque valeur d'Ytrain, d'accord, d'image,au lieu d'être attribuée à une valeur 1, 2 ou 3,elle va être attribuée à un tableau de 0et il va y avoir le chiffre 1, d'accord, qui va être à la position du label.
00:24:20 :Si je prends le cas, par exemple, de l'image que je vois au-dessus qui est attribuée au chiffre 4, d'accord,elle va être attribuée à un tableau de dimension 10, de 0,mais à la 4ème place, il y aura un 1, d'accord ?
00:24:37 :C'est une façon de pouvoir catégoriser de manière assez simple ce chose-là, d'accord ?Donc, c'est ce qu'on va faire directement avec nos labels, donc Ytrain et Ytrest.
00:24:48 :Pour ce faire, vous avez une fonction de Keras qui est assez bien, c'est Keras.utils.toCategoryCrawl.Donc, il prend en paramètre Ytrain, d'accord,et le nombre de classes. Là, en nombre de classes, nous en avons 10.
00:25:08 :Donc on en met 10, ok.Je n'oublie pas de faire ça aussi pour le test.Voilà. Donc maintenant, qu'est-ce qu'on fait ?On vérifie bien nos dimensions.
00:25:25 :Voilà. On a bien quelque chose.Alors, juste 10, 10.Hum, ça c'est bizarre.Ok, j'ai dû peut-être faire une erreur plus haut.Bon, on le regardera tout à l'heure.
00:25:46 :Alors, maintenant, autre chose qu'on va pouvoir faire,donc ça, ça va être en fait la dernière étape de tout notre preprocessing, d'accord,c'est en fait dans nos données de train, on va garder en fait une petite place, d'accord,pour faire ce qu'on appelle la validation.
00:26:04 :Alors, comme vous le savez, le train va permettre de faire l'entraînement de notre IA,le test de tester, etc., d'analyser les performances,mais il faut qu'on puisse tester aussi nos images sur des donnéesqui n'ont jamais été vues par la machine, d'accord.
00:26:20 :Et ça, c'est ce qu'on va appeler une étape de validation, ok.C'est comme si on plaçait notre IA en conditions réelles, d'accord,et qu'on regardait un petit peu ce qu'elle faisait, ok.
00:26:31 :Donc ça, c'est ce qu'on va faire directement.On va prendre en fait un xval, je pourrais le dire, d'accord.Donc on va lui dire de prendre, hop, voilà, tac.
00:26:46 :Là, ensuite, on va appeler un partial xtrain.Donc notre xtrain, je l'ai découpé en deux choses, d'accord,un de taille 10 000 et l'autre de prendre de 0 à 10 000, d'accord,donc c'est les 10 000 premières valeurs, et le partial xtrain, d'accord,il va être égal à xtrain, et je vais prendre du coup les 10 000 dernières,
00:27:11 :à partir de 10 000 jusqu'à la fin, d'accord.Ça, c'était des petits tics qu'on apprend quand on fait du numpy.Pareil lorsque je vais pouvoir faire mon yval, d'accord,puisque les étiquettes sont liées avec l'entrée.
00:27:26 :Et ça, c'est ce que tu expliquais l'autre coup, c'est ça,c'est-à-dire que tu as une partie de tes données qui te servent à t'entraîneret l'autre partie qui te sert à tester.
00:27:36 :En fait, ce qui se passe, c'est que l'autre fois,quand j'avais parlé en machine learning,il y a quelque chose que j'ai dit, notre façon de faire,qu'on pourrait, alors, en général, on fait un train test suite,c'est-à-dire qu'on fait un train et un test seulement,on prend soit 110% du dataset pour faire un train et 30% pour faire un test,
00:27:54 :mais vraiment, si on veut rentrer dans un cadre,quand on veut avoir une vérité terrain,une vérité, une performance, analyser une performance assez réelle, d'accord,on rajoute un troisième tout ensemble, d'accord, qui va permettre de valider.
00:28:10 :Par la suite, je vais te montrer, en fait, tu vas voir queil va y avoir, en fait, un entraînement de machineet il va y avoir une phase de validation, ok ?
00:28:19 :Donc ça, c'est bon.Ensuite, ce qu'on va pouvoir faire, c'est construire notre modèle.Donc, tout simplement, notre modèle, ça va être notre réseau de neurones, ok ?
00:28:29 :Donc, comme je l'ai fait au début, on va créer ce qu'on appelle un modèle séquentiel.Pourquoi un modèle séquentiel ?Parce que, sur mon Japan 1, je viens de gauche à droite, d'accord,lorsque je vais faire mes différentes couches de convolution.
00:28:42 :Parfois, dans certaines architectures, vous avez, en fait, des modèles qui sont en forme de U, d'accord ?Ça, c'est tout dépend des réseaux, d'accord ?
00:28:51 :Nous, vu qu'on a, en fait, des réseaux assez simples, d'accord,on va réciter sur quelque chose d'assez simple, voilà.Donc, souvenez-vous, la première chose à faire, dans un modèle de CNN,comme je vous ai montré, c'est d'ajouter une couche de convolution, d'accord ?
00:29:07 :Donc, par la fonction conv2d, ok ?Prendre plusieurs choses en paramètres.Alors, elle va prendre un batch size de 42, 32, par exemple,un kernel size.
00:29:19 :Donc, le kernel size, ça va être, en fait, la dimension du petit carré que je vous ai montré,qui va pouvoir, en fait, appliquer le filtre, d'accord ?
00:29:33 :On va appliquer ce qu'on appelle une fonction d'activation.Alors, ça, je vous en parlerai plus tard, d'accord ?Je la place ici, parce qu'il faut que je la mette pour qu'on soit dans mon réseau, d'accord ?
00:29:42 :Ça, si les personnes ont...Rappelez-vous, quand on a fait l'introduction au deep learning,j'ai dit qu'en fait, les neurones, parfois, certains s'activaient,et d'autres ne s'activaient pas, d'accord ?
00:29:54 :Mais ça, c'est une autre fonction qui permet de faire ça.C'est une fonction d'activation, ok ?Mais on verra tout ça dans une prochaine vidéo, plus en détail,parce que là, c'est vrai qu'il y a pas mal de petits paramètres comme çapour que la configuration...
00:30:07 :Mais en fait, c'est plus en pratique qu'on va pouvoir s'en servir et qu'on va comprendre.Donc, le dernier paramètre, en fait, ça va être un input shapequi va correspondre à ma taille entrée.
00:30:15 :Donc j'ai bien 28 par 28 par 1, ok ?La deuxième chose à faire, ça va être d'ajouter une couche...Alors moi, j'aime bien faire un max pooling, d'accord ?
00:30:25 :Parce qu'en average, souvent, on a vu que dans l'exemple tout à l'heure,ça prend pas forcément les...Ça fait une moyenne, mais là, dans ce qu'on veut,c'est pas important de faire une moyenne.
00:30:40 :On pourra tester par la suite, si vous voulez,si on a un petit peu de temps, de changer par un average, de comparer.Mais là, dans ce dataset-là, on verra pas de réelle différence.
00:30:50 :Parfois, quand on fait, par exemple, sur d'autres sujets,sur d'autres datasets, d'accord ?On a besoin de prendre, par exemple, une moyenneplutôt que de faire un max, d'accord ?
00:31:01 :Notamment quand on va faire de la...C'est pas du traitement sur de la peinture.Alors maintenant, les CNN aussi,là, je l'applique sur de la peinture, sur des images,parce que c'est la base que ça a été fait.
00:31:12 :Maintenant, je sais que les CNN, ça peut s'appliquer aussi sur du texte.D'accord ?Donc il y a plusieurs types de données qu'on peut vraiment montrer.
00:31:19 :Donc là, on a bien la couche de convolution,le max pool 2D, d'accord ?Ça, on va le faire deux fois, ok ?Pourquoi ? Parce que quand on l'a mis dans notre réseau,
00:31:30 :on va essayer de diminuer notre imagepour qu'elle soit vraiment très petite, d'accord ?Et ensuite, quand je vais terminer de faire mon deuxième max pooling,je vais faire un flatten.
00:31:41 :Le flatten va pouvoir, en fait, écraser notre matricepour la transformer en vecteur ligne ou en vecteur colonne, d'accord ?Et la dernière chose à faire, donc,ça va être d'ajouter la couche densequi va permettre de faire la classification, d'accord ?
00:31:56 :Donc là, nous avons 10 classes.Donc, du coup, on va avoir 10 unités.Et l'activation, ça va être un surfmax.Ça veut dire que notre réseau de neuronesva nous renvoyer une probabilitésur les différentes classes, d'accord ?
00:32:11 :Compris entre 0 et 1.Et la probabilité qu'il y aura la plus grande valeursera la probabilitéqui se rapproche du labelqu'elle pense prédire, d'accord ?
00:32:25 :Donc là, on a fini de faire notre réseau.On peut faire, en fait, ceci.Alors, on a un petit truc.Ah, j'ai oublié un petit...
00:32:36 :Voilà, kernel-size.Tac, voilà, c'est good.On va faire aussi une fonction qui est assez sympa,qui est le modèle pour le summary,qui va nous permettre, en fait, de faireun récapitulatif de notre réseau.
00:32:50 :D'accord ?Donc là, vous avez différentes couches.Vous avez les différents nombres de paramètres, d'accord ?Les différents pixels.On peut voir qu'en total, on a 15 818 neurones.
00:33:01 :D'accord ?Donc là, rappelez-vous, les neurones,c'est les petits perceptrons que j'avais mis dans ma slide.On peut, par exemple, si on avait fait une seule couchecomme ça, on peut voir que du coup,on en avait beaucoup plus.
00:33:16 :D'accord ?Donc ça, c'est quelque chose qu'il faut faire attention.C'est bien de pouvoir, en fait,délayer ce genre de choses,parce que parfois, on va pouvoir, en fait,utiliser moins de neurones.
00:33:27 :Là, on a 15 818, ce qui est assez bien.Donc ensuite, ce qu'on va faire,avant de faire le point fit,qui va être l'entraînement,on va faire cette étape-là.
00:33:38 :D'accord ?Donc cette fonction de compilationva permettre, là,de dire quel algorithme on va utiliserdans nos...Oups....BPRIA.D'accord ?Alors, je note tout en détailce que je vous explique.
00:33:58 :Alors, catégorie...Alors, du coup, qu'est-ce qu'on fait là-dedans ?On va utiliser, en fait, trois paramètres.L'optimiser, les loss et les metrics.L'optimiser, en fait, va mettre à jourles poids qui sont utiliséspar chacune des unités.
00:34:30 :D'accord ?Rappelez-vous, quand j'ai une équationqui fait la taille x1,donc x qui est égale à...Alors, c'est plus y pour le coup.Donc mon label, c'est égal àx1w1 plus x2w2, d'accord ?
00:34:44 :Plus le biais, ok ?En fait, l'optimiser va mettre à jourles valeurs de w.Ok ?La loss, du coup,ce serait la fonction de perte.
00:34:53 :D'accord ?Ça va nous permettre de détecter les pertesque fait notre machine, notre IA, d'accord ?Et la metric, qui est la stc,qui est le diminutif de accuracy, d'accord ?
00:35:04 :Ça, qui va nous permettre de savoirle score entre 0 à 100, d'accord ?Je vous rappelle, le but,c'est de se rapprocher d'un 100%, d'accord ?
00:35:10 :Pour vraiment avoir quelque chosed'assez solide, d'assez fiable.Parce qu'on est dans des modèles statistiques.Et maintenant, ce qu'on va faire,c'est tout simplement faire un point fit.
00:35:19 :D'accord ?Donc fit, ça va déclarer...à notre modèle,de pouvoir entraîner notre IA.Donc sur quoi on va faire l'entraînement ?Rappelez-vous,sur les partiels X-train, d'accord ?
00:35:30 :Que j'ai fait tout à l'heure.Avec les partiels Y-train.Ok ?Je configure un batch size de 128.Ça, je vous l'expliquerai plus tardce que c'est ce paramètre.
00:35:43 :Maintenant, je vaisappliquer ce qu'on appelle un paramètrequi s'appelle époque.Époque qui correspond, en fait,au nombre de foisque je vais faire un aller-retourpour faire la mesure de mon réseau.
00:35:53 :D'accord ?Donc, quand je vais de gauche à droite,quand j'ai fait un aller-retour,c'est un époque.Nous, il faut entraîner notre machineplusieurs fois.
00:36:01 :D'accord ?Là, en l'occurrence,on va l'entraîner 20 fois.20 fois, elle va reprendreses données d'entraînement.Elle va les tester.Elle va faire sa mise à jour, etc.
00:36:11 :Ça, c'est la partie qu'on ne touche pas tropparce que, du coup,on ne sait pas forcémentcomment ça fonctionne.D'accord ?C'est la partie cachée du deep learning.
00:36:19 :Ok ?Et ensuite, je vais tester,donc, avec mes données,des validations,d'accord, qui sont les suivantes.Donc, qui sont, hop,tac,qui vont être mon xval et mon yval.
00:36:34 :Ok ?Donc, quand on est là,ensuite, qu'est-ce qu'on peut faire ?Eh bien, on peut commencer notre entraînement.Et là, on avait une petite erreur.
00:36:42 :Pourquoi ?Parce qu'on avait notre fameuxproblème ici.Alors, avec,donc, c'était xtrain.shape,qui teste.Alors,tac, tac, tac,utilise le calcul de calcul école.
00:37:01 :Je vais relancer des foisce genre de choses.Voilà, donc, en fait,là, c'était juste un problèmed'utilisation du message.Voilà.Et donc, là, on lance notre entraînement.
00:37:16 :Donc, l'entraînement, il est assez coûteux.D'accord ?Je peux prendre un terminal pour vous montrerles performances de mon PC.Voilà.Alors, là, par défaut, en fait,ça le fait directement sur la carte graphique.
00:37:27 :D'accord ?Là, on peut voir le pourcentage d'utilisation.Bon, mais votre carte graphique, du coup,bam, ça va partir directement à 100%.Ça, c'est quelque chose que j'ai fait.
00:37:37 :Là, il fait son entraînement.Et donc, ça, ça peut prendre vraimentpas mal de temps.C'est-à-dire que là, on peut compter,bon, là, ça va être assez rapideparce que mini, c'est quelque chose d'assez simple.
00:37:46 :On a des images de 28 par 28.Bon, c'est quelque chose d'assez facile.D'accord ?Mais là, vous avez un historique.D'accord ?De la loss, de l'accuracy,de la val-loss et de la val-accuracy.
00:37:59 :Donc, val-loss, val-accuracy,c'est les valeurs de validation.D'accord ?Quand on a fait ça, du coup,ce qu'on va pouvoir faire,c'est déjà faire une évaluation,une première évaluation.
00:38:09 :Donc, avec la fonction evaluate.D'accord ?On va prendre tout simplementnotre valeur d'extest qui est avec test.Donc, learner, c'est ce que tu dis tout à l'heure.
00:38:17 :Et là, quand on va faire pour le test,on va avoir deux choses.On va avoir une liste qui va contenirdeux valeurs.La valeur de perteet la valeur du pourcentage d'accuracy.
00:38:30 :Là, on a un pourcentage de 98%,ce qui est assez fort.D'accord ?Alors, c'est normal parce que, du coup,on utilise MNIST.Maintenant, on sait vraiment faire,ça fait 20 ans qu'il existe, le truc,on a des performances qui sont assez élevéesparce que maintenant, c'est devenu assez simple
00:38:47 :pour pouvoir le classer.D'accord ?Donc, voilà.Là, on a fait des étapesqui sont assez représentativesde ce qu'on fait en pratique.Maintenant,ce qu'on va pouvoir faire,moi, ce que j'aime bien aussi voir,c'est de différer un petit peu les performances.
00:39:05 :D'accord ?Donc, de voir un petit peu les différentes courbes.Si on affiche les époquesen fonction de la loss et de l'accuracy,de voir un petit peu ce qui se cacheparce que, parfois,on va avoir des phénomènesqui sont assez étranges.
00:39:18 :Donc là, hop,je vous épargne l'attente sur le codepour refaire.Donc,tac.Donc, ça, ça va nous permettre, en fait,de tracer un graphequi va tracer en x,donc le nombre d'époques.
00:39:34 :D'accord ?Et en y,on va pouvoir avoir,donc là, les loss,donc loss during training process,avec les données de traininget les données de validation.
00:39:44 :Et qu'est-ce qu'on voit ?Alors,on voit que, déjà,l'ensemble des points sontassez proches de 0.D'accord ?Ce qui est normalparce qu'on avait une lossqui se rapprochait de 0.05.
00:39:53 :Donc, ça, c'est très bien.Et on voit qu'avec les 12 entraînements,ben, d'un coup, ça monte un petit peu.Ah !Qu'est-ce que ça veut dire, ça ?
00:40:02 :Ça, ça veut dire qu'en fait,notre machine, finalement,ben, en fait,elle va apprendre jusqu'à,on va dire,se diriger vers 0,aller à vue d'oeil 0,je ne sais pas, 0.08,
00:40:16 :un truc comme ça.Et ensuite, elle va remonter.Parfois, on a un phénomènequi est assez,assez communquand on fait de l'IA.D'accord ?
00:40:26 :C'est quand on va regarderle training et la validation,lorsque le training va remonter d'un coupet que la validation va diminuer,que là, on va avoir un écartqui est beaucoup plus grand.
00:40:35 :Donc, si on refait, par exemple,un processus,alors, je ne sais passi avec MMI, ça va marcher,mais si je fais un entraînement,par exemple, sur 50 époques,d'accord ?
00:40:45 :Donc, je relance tout çapendant 50 époqueset qu'ensuite, je regardeun petit peu ce qui va se passer.En fait, on va voirque parfois, ça va remonter.
00:40:55 :Quand ça va remonter,on va apprendre,il y a un phénomènequi s'appelle l'overfitting.C'est du surapprentissage.C'est-à-dire que la machineva surapprendresur les donnéesqu'elle va avoir en anglais.
00:41:05 :Et ça, on ne le veut pas.Pourquoi ?Parce que lorsqu'on va le testeravec des données en réel,le score, en fait,il va être complètement...
00:41:12 :il va se casser la tête.C'est-à-dire quequand je prends un enfantque je vais lui faire réviser,par exemple,sur son cours d'histoire géo,pour un contrôle,lorsqu'il va apprendredu par cœur, d'accord ?
00:41:23 :Apprendre par cœur,ce n'est pas apprendre.C'est-à-dire qu'au bout d'un moment,il ne va retenir que son textepar cœur, par cœur, par cœur.Et si, imaginons,je lui pose une questionqui n'a rien...
00:41:31 :pas qu'il n'a rien à voir,mais qui n'est pastout à fait liéavec ce qu'il a appris,mais qui est quand mêmelié avec son sujet,il va répondre à côté.
00:41:39 :Mais en fait,ce phénomène-là,c'est exactementce qu'on va voir, du coup,avec notre rire.D'accord ?Donc, c'est souventce rapport-làqu'on fait avec l'humainpour vraiment comprendreun petit peucomment ça fonctionne.
00:41:53 :D'accord ?Donc, on va voir un petit peusi on a ce phénomène-là.Je ne suis pas sûr,mais on peut essayer de regarder.Donc là, on a faitnotre entraînement sur cinqen époque.
00:42:02 :D'accord ?On fait ensuite notre test.Et voilà !Donc là, voyez,on a bien ce phénomène-làqu'on appelle du couple overfitting.Ça veut dire que du coup,au bout d'un moment,les données étaient tellement biendans un premier temps.
00:42:17 :D'accord ?On avait donc...Là, pour bien faire,il faudrait que je relance,en fait,pour avoir vraimentles courbes...Je vais essayer de tout relancer.
00:42:26 :Comme ça, on verra bien.Mais en fait,ce qui se passe,c'est que...Ah !J'ai beaucoup perdu l'image.Bon, elle va revenir.En fait, là,ça prend en comptel'ancien training.
00:42:36 :C'est pour çaqu'on n'a pas des lossesqui sont assez bonnes.Mais voyez,quand on a vraimentcet écart-là...D'accord ?Ça, c'est ce qu'on essaiede vraiment réduirequand on fait de l'IA.
00:42:46 :Parce que ça,c'est vraimentquelque chose d'assez obscur.Alors, il y a des techniquespour pouvoir l'empêcher.Les techniques sont souvent...Alors là, je ne l'ai pas miseparce que ce n'est pas...
00:42:54 :C'est les petits toolkitque je vous apprendsau fur et à mesure.Mais c'est par exemple...Tiens,je vais comparer l'accuracysur 3 étapes.D'accord ?
00:43:07 :Si sur ces 3 étapes,je n'ai pas l'améliorationde l'accuracy,bam !J'arrête le processusde l'entraînementet je retourne le modèle.D'accord ?C'est quelque chosequi se fait assez fréquemment.
00:43:17 :On fait souventquand on faitsur l'entraînement.Après,il y a un autre schémaqu'on pouvait regarder aussi.C'est de comparerun petit peu au niveaude l'accuracy,qu'est-ce que ça va donner.
00:43:29 :D'accord ?Donc des performances.Voilà,l'entraînement est assez rapidedonc on peut attendrequelques secondes.1,44.Je pense qu'on n'aura pastrop d'overfitting là,mais on peut quand mêmeessayer de regarder.
00:43:52 :Ah si, tu vois,on peut en avoir un.Voilà.Donc ça veut direque d'à partir de 10 époques,on va se rendre compteque du coup, lui,il va remonter progressivement.
00:44:02 :Alors quand on a une loss,là on voit que l'écartn'est pas beaucoup,il est minimumparce qu'on est entre 0.09 et 0.1.Bon là, je supposeque c'était vraimentpour vous montrer.
00:44:11 :Mais lorsqu'on va regarder,en fait,alors là ça va être du val AC.Donc là,on va regarder un petit peules valeurs au niveaudes performancesde l'accuracy.
00:44:21 :Alors,qu'est-ce qu'il n'aime pas ?Assez valieuse.Parce que peut-êtreque je n'ai pas assez.Je l'appelais comment déjà ?Sevelle.Alors,ACC,training process.
00:44:42 :Ah, c'est étrange.Pourquoi ça ne marche pas ?Bon,je l'ai appelé le...Non,je l'ai appelé ACC en plus.Bon,ce n'est pas importantparce qu'en fait,l'accuracy,on va avoir la même chose,mais lorsqu'on va pouvoir monter.
00:45:06 :D'accord ?Donc,on va avoir quelque chosequand on va regarderles performancesentre 0 et 100%.D'accord ?On va avoir ce phénomène-làaussi à 85.8.
00:45:15 :Par contre,pourquoi ça me fait ça ?Parce que c'est...Ah oui,je suis bête.En fait,on est à 51alors qu'on est à 51 d'époque.
00:45:23 :Voilà.Donc là,on donne une performance.Donc là,on voit bien que la vidélibération,elle va se stabiliser à 98%.Nous,on va monter à 100%.
00:45:33 :D'accord ?Mais là,ce phénomène-là,c'est de l'overfitting.D'accord ?Donc,nous,on va souvent arrêter notre potelà partir de cette étape-là.D'accord ?
00:45:43 :Donc là,c'est quelque choseque je vous montrequi est assez vraiment intéressantparce que ça,c'est un truc...Là,c'est pas très...Enfin,c'est pas très très parlant.
00:45:53 :Mais là,par exemple,je suis en train de testersur mon datasetsur des donnéesun petit peu autresque sur du...sur du...Comment ça s'appelle ?
00:46:02 :Sur des...Sur des pots.Là,on peut voir,en fait,j'ai créé un datasetoù on avait 8 classes différentes.D'accord ?Donc,si je prends le datasetque je voulais...
00:46:13 :que je voulais pasje fais ce truc.Hop.Tac.Donc ça,c'est un datasetque j'ai trouvé en ligne.Voilà.Donc là,j'ai plusieurs classes différentes.
00:46:23 :J'ai des bikes,des cars,des jogs,des machins,etc.Là,je regarde au niveaudes images.Là,vous voyez que j'ai des imagesqui sont beaucoup plus grandes.
00:46:34 :On parle de 640 par 480.Donc,en fait,je vais devoiradaptermon réseau.Alors là,ce que j'ai pu faire,c'est par exemplede normaliser,de dire,voilà,je veux juste des imagesde taille 512 par 512.
00:46:48 :Et là,ce que vous pouvez constaterau niveau de notre réseau,c'est qu'en fait,j'ai vraiment diminué,j'ai fait plusieurs couchesde Conv2D,MaxPooling,Conv2D,MaxPooling,afin vraimentde diminuerle nombre de paramètresqu'on va utiliserpar notre machine.
00:47:03 :D'accord ?Ok.Voilà.Tac.Alors,est-ce que sur ce,vous avez des questions ?Ah,du coup,j'ai fini ma présentation.Donc,j'ai des questionspour vous.
00:47:16 :Donc,je vais me mettre au silence.C'était super intéressant encore une fois.C'est cool.Je suis content que ça vous ait…Ça va ?C'était pas trop difficileà comprendre ?
00:47:31 :Vous avez réussi à…J'ai perdu personne ?Vraiment,j'ai quelque choseque vous ne comprenez pas.C'était un peu technique,mais enfin,tu as expliqué quand même.
00:47:40 :Je pense avoir comprisdans les grandes lignes.Donc je pense quepour les autres,ça va être pareil.Je vais regarder un petit peusur le serveur.
00:47:49 :Ok, oui,il y a une rediffusion.Oui, parce qu'en fait,tous les…Je ne sais pas qui a posé la question,mais du coup,toutes les vidéos,je les enregistre.
00:48:00 :Ensuite,je les mets sur ma page YouTubepour que vous puissiez les retrouver,etc.Le code est disponiblesur mon GitHub.D'accord ?Donc il est en ligne.
00:48:08 :Pour vraiment pouvoir…Là,je vais mettre le liencomme ça.Hop.Je vais allerdans le truc.Ouais,j'ai fait en faitun petit repo.
00:48:20 :Il y airsuccess,irsuccess,comme ça,vous pouvez en récupérertout çaet tester chez vouscomme ça.C'est vrai que je ne mens pas.
00:48:29 :Voilà.Et Pierre,il y a des…S'il a gué,vous avez des questionspar hasard ?Bon.S'il n'y a pas de questions,j'espère que vous avez tout compris.
00:48:51 :Écoute,je vous remercie déjàpour votre attention.Merci d'avoir enregistrécette vidéoet de l'avoir…d'avoir vraiment pula regarder,etc.J'espère quemaintenant,vous allez pouvoirfaire un premierstep de deep learningchez voussur vos machines.
00:49:07 :Alors là,je m'y fais tournersur le GPUparce que je l'ai configuréde manière…de manière généraleparce que je faisdu deep un peu partoutmaintenant,donc…Par défaut,c'est ma GPU,mais sur CPU,ça fonctionne très bien.
Aucune occurrence trouvée pour « ».
00:00:00
Introduction et contextualisation des CNN
00:01:19
Origine des CNN et dataset MNIST
00:03:12
Représentation des images en informatique
00:05:12
Première couche de convolution
00:06:25
Opération de pooling
00:07:17
Répétition des convolutions et poolings
00:14:02
Configuration Jupyter Notebook et importation des librairies
00:16:17
Préparation des données MNIST
00:23:01
One-hot encoding des labels
00:26:24
Construction du modèle CNN
00:34:18
Entraînement du modèle
00:37:01
Analyse des performances et ajustement