 Bonsoir, Montréal-Piton. Good evening Montreal-Piton and welcome to Montreal-Piton 97. Bienvenue à Montréal-Piton 97, limousine xerrique. Et puis, si vous vous souvenez pas ce que ça veut dire xerrique, ça veut dire désertique, très déshydraté. Je sais pas ce que ça veut dire, limousine très déshydratée, mais ça m'amuse d'y penser. Donc ce soir, au programme, j'arrive au programme dans un instant, mais avant tout, je dois vous rappeler que on a un code de conduite à Montréal-Piton. Le code de conduite, c'est facile. Ça dit, soyez excellents les uns envers les autres. Et puis, joignez-vous à nous sur Slack si ça vous intéresse. Le lien est ici et puis le lien est aussi dans la description du vidéo sur YouTube. Et puis, vous pouvez aussi poser vos questions, vos commentaires, dans les commentaires YouTube tout au long de la soirée. Donc, première chose, je veux vous rappeler que, à Montréal-Piton, nous avons un code de conduite qui est très simple. Ça dit, soyez excellents entre l'un et l'autre. Et si vous voyez quelque chose qui ne vous semble pas excellente, Donc, notre programme, ce soir, en premier, on va avoir Andrew qui va nous parler de génération de code et puis de refactoring automatique avec lib.cst. Ensuite, Claude Coulomb, il va nous parler de la formation Viarena sur la vision artificielle, une formation que on a mis en place avec le collaboration. Et puis, on va rouler avec nos soirées de programmation, la première qui arrive lundi prochain. Et puis ensuite, Lindsay va nous parler de la mise en place de vision artificielle pour faire de la classification. Et puis, nous allons parler de la formation Viarena sur la vision artificielle. Et puis ensuite, Lindsay va nous parler d'une mise en place de vision artificielle pour faire de la classification avec, je ne sais pas avec quel libéré, mais elle va nous dire ça dans un instant. Et puis, par la suite, on a notre classique 5 à 7 virtuel sur JT, où tout le monde se joint ensemble en vidéo conférence. On va chercher notre rafraîchissement favori et puis on parle de sujets parfois techniques, parfois pas techniques du tout. Nos prochains événements, on va avoir la prochaine soirée de programmation qui va couvrir Django, la programmation web, et la vision artificielle dans un des volets du cours Viarena. C'est lundi prochain à 19 heures. Et puis, le mois prochain, le 21, notre dernière rencontre mensuelle de l'année, on va avoir Montréal-Piton 98. On n'a pas encore de sujets confirmés pour Montréal-Piton 98. Si vous voulez partager avec nous vos sujets favoris sur Piton, et bien envoyez-nous un courriel. Notre courriel est dans la description de ce vidéo sur YouTube. So, future events. Next Monday, we have our seventh programming night of the year, where we're going to cover Django, web development, and then computer vision as part of the Viarena series of classes. And then, next month, our last meeting of the year, Montréal-Piton 98. And we don't have any topics confirmed for Montréal-Piton 98. So, if you would be interested in sharing with us what you'd like to do with Python, well, send us an email. Our email is in the description of this video on YouTube. And that is it for me for tonight. I'd like to thank our partner, FJNR, who is hosting our happy hour. And then, Eddie, I simply ended up pronouncing his last name. I'm very sorry, Eddie, but I really like that picture of that blue viper. I think it just matches our color scheme so well. And now, being said, I'm going to invite Andrew to join us. Andrew. Okay, let me hit the present. Let me just find... I hit present. I will share a screen. I will share that screen. Can you see it? I see your screen. Let me add it to the stream. There we go. Okay. Are we ready to go? We're ready to go. This stage is yours, Andrew. Hi, folks. My name is Andrew Francis. And this is my first talk at Montréal-Piton in four years. It was almost to the date that I did my last talk, which was, okay, computer, we knew my loans. Anyhow, the subject of this talk is renovating a fixer upper. Code generation and refactoring of lib-cst. A little background. Basically, in some ways, this is the sequel to the November 2018 talk. It's where I basically renovate the code base from that time because it really hasn't changed. But first, let's talk about lib-cst. What is lib-cst? Well, it's basically a library from manipulating Python syntax trees. You may be saying to yourself, well, doesn't AST exist? Yeah, yeah, it does. But unlike AST or abstract syntax tree, lib-cst creates a concrete syntax tree. We'll get into that in a moment. And it's increasingly gaining popularity for automating the refactoring of large Python code bases. That's why Instagram created it to basically refactor their own code base of about 3 million lines of Python code. Oh, crying out loud. Okay, let's start off with this very simple little example. It's a function uses type annotations. It really does nothing. Okay, the first line of code, basically, the first line of code is the lib-cst parse module. What it does is it takes code, turns it into a lib-cst concrete syntax tree, and then it turns it back into Python code. Basically, it's round tripping. So what we're doing is we're round tripping the code and we're asserting that the lib-cst code equals the code that was fed into it. In this case, it works. Then what we do is we use the old AST library. It has a function that allows you to basically to take an AST tree and turn it back into Python code. We do an assert here and it fails. The two aren't the same. We dive a little deeper. We're going to use word count. Ignore, okay, so basically what it's saying, that little fragment, oh, yes, that's one thing that I should say about this. There are white spaces. There are extra lines and white spaces in it. You may not be able to see it. So we do a word count on that little fragment. It's got seven lines and 141 characters. If we do WC on the output of the AST, it gives you four lines and 89 characters. But if we do an output on the lib-cst, we get the exact same thing. And so in the literature, lib-cst talks about itself as being a lossless tree, meaning it preserves things like white spaces, comments, black lines. AST is lossy. It throws away things like comments. It'll throw away extraneous characters and whatnot. So let's get into my motivation for writing this. Essentially right now, I'm developing a voice app. It's a voice app that I presented four years ago. I'm still at it, guys. So I'm writing development tools to speed up back-end development. I realize that I'm still, although my code is superficially Python 3, you don't have a choice, but I still find that I'm living very much in a 2.x world. My code is poorly documented. And because I don't do things like type annotations, I can't take advantage of things like MyPy. There's a whole heap of tools that I can't take advantage of. The reason for the asterix is that while I was writing, I guess an incentive for me to go this path was reading Donald Canute's book, Literate Programming. And he has an essay just on the errors in tech. And I step back and say, well, where am I losing time writing code? A lot of things boil down to type. And there's a few other places where I make mistakes. The other big reason for writing development tools is I find that even for the creation of a trivial feature, I find myself modifying a lot of code and writing a lot of template code. And finally, after four years, the program was rigid, quick and dirty. And it's just this monolithic program. And I want to move away from a monolithic architecture to a more module-based. There's a number of things that are really, the architecture of the back end is fairly monolithic and I want to move away from that. And also, I want to write my own application-specific linters. So the solution to all of this is to generate the code from a specification. And as you can guess, I'm going to use libcst, which is really the foundation of the low-level library for writing basically a code generator. I'm not going to get into the code generator, the actual code generator itself too much because that would be just a never-talk. It may not be a November talk, but basically I have a YAML file where I have something that's akin to a functional specification for a feature. And I read this functional specification in and it may be either altering Python code, actually it's altering Python code and it's generating new Python code. Like, before I move on, the equivalent of doing hello world would take me maybe 90 minutes. By writing it up as a spec, you know, it takes around 10 minutes to write the spec. I ran it through the generator and bang. So this is a libcst utility. It does the equivalent of parse module, but you do this from the command line. So what we get from it is we basically get the tree and you can see that there's a function definition, the name, the parameters. It shows the annotations and it shows you the return value. Because the code doesn't fit, the upper level is a module and you can see that there's this body and the function definition is a part of the body. These things that we basically, the main, the most important part of libcst, we can say are modules. The module is basically the parent and almost everything else is a node. So as we can see, libcst gives you this tree-like structure. So in its hierarchicals, so you have a thing like a body and children attributes. Cst node is the superclass and basically the subclasses cover everything in Python's grammar plus other features like white spaces and commas. For the most part, according to the documentation, I guess the API acts like Python's abstract syntax tree and ansum. Well, since I don't really use AST, I can't comment more on that. It's really, I live in a libcst world. So this is a part of a method in my utility. It's called create method. And what I'm showing here is how you, one way of building up a program is you can call all these individual features. You know, you're instantiating the objects and you're basically building them up. So you see that we, at the lowest level, we have params and we have an, we have params and we have an annotation connected to that. We assemble those into a list of parameters. We also have this other thing called the indented body which corresponds to the indentation in Python and we have a function definition and you can take a look at the parameters there. So that's one way of building up structures in libcst. You know, you build them up one by one. But another way of doing it is that's sort of tedious. So there's this libcst. So we, there's another way of quickly building nodes and it's called parse statement. For instance, if we have return response, it's going to create a return statement. It'll parse it and return it. So already we've seen lib parse module. That's what we started off the talk with. Now we get to, now in conjunction with module, we have these things called transformers and we subclass the transformer. The transformer is based on a visitor pattern and what it does is it returns a modified tree and probably the most important part of the transformer are these two methods. Visit element name, leave element name. For instance, a function, we would have a method for function depth, indentation, assignment, you name it, if it's in Python's grammar, it's got a visit method. To help do things, we have these things called matchers and they're helper classes for comparing libcst nodes. And again, the matchers correspond to Python grammar elements. They allow you to not only do, they allow you to do complex comparisons in a relatively simple fashion and also they're there to avoid you right if statements where you're using stuff like is instance. So now let's try tying all this together. So let's do a very simple example. A part of my back end is I have persistence and I use SQL alchemy. So what I start off with is I have this template, which is just a string. I do a little bit more magic on this, but this is the essence. Okay, that's my subclass, the transformer. Also, I parse that template to get an alchemy module. So this is a concrete syntax tree, the module. And what happens is when I visit this module, using the transformer, it will transform it and give me a new alchemy module. And this, okay, we're going to really focus on this because this is where all the magic happens. Basically, don't worry about assignment. That's where I basically have a bunch of, it's basically SQL alchemy assignments. Then what I do is I, basic, oh yes, let me explain this. So you have the original tree. However, it's immutable. So you also have this updated mode, which is a mutable version. And this is a little tricky because they don't really get into it in great detail, the documentation. But you have to do little tricks when things are immutable. There is a clone, but I've never quite figured it out right. So anyway, I'm getting the children. And what I do is I go through all the children and I look for an indentation block because that's where I'm going to put my assignments, my statements. I clone the body. I put in new statements. It's really neat that you can just treat the code like a list. It's really nice. And then I create a new indentation block. And then I update the class with the indentation block. And that's what happens. So I've basically generated a SQL alchemy class. So the conclusions to this talk is I'm relatively new to the world of Python syntax trees. I've looked at them, never really had a reason to really explore them in detail until now. I find that libcst, it makes it really easy to modify existing code. However, when you want to do this bottom-up approach, you have to really write your own helper code to assemble stuff. But once that's done, things are fairly simple. Also what I find is I find that the documentation at times, for me, is a little hard to read. So a lot of what I do is I use that libcst tool print to dump, I write a little fragment, I dump it and I look at it and that sort of helps me figure out how to assemble stuff. And finally, really again in the documentation, they really don't get into the thing about immutability that much. Anyway, thanks for your time and these are some references. Thank you, Andrew. I'm going to bring Duke in the stream and Duke is going to be moderating our questions for this talk. So everyone, reminder, you can ask your questions in the YouTube comments or on Slack. Oh, I'm not on Slack. Oh, that's fine. And we're going to relay the questions to you, Andrew. That's our job. We got this. Donc tout le monde, vous pouvez poser vos questions dans les commentaires YouTube ou sur Slack. Et puis, Duke va se faire un plaisir de les relayer de vive voix à Andrew. Donc je laisse Duke moderer ces questions. Merci, Yannick. Thank you, Andrew. Je vais juste préciser aussi qu'on peut poser une question en français ou en anglais. Juste reminder, everybody, that you can ask your question in English or French. If you write it in French, I can probably understand it. But maybe it's more helpful if someone translates. Yeah, okay, good. My first question is because I did not kind of refactor the code a lot. Do you have a recommendation for somebody like me who do not refactor the code a lot? What is your tip or your description? Okay, I don't know if I can really answer that question. For this guy, the LPA, it's rather monolithic code. So the first part, it's rather monolithic code that lives really in a, it's a real shame that I did log into my ever machine. It's really code that lives in a, it's nominally 3.0. So the first part of refactoring for me is I have this very huge module called Processor. And what I want to do is, it's maybe a thousand lines, it's ridiculously large. So a part of that is to break it into individual modules that more closely resemble a feature. And I want to, I haven't written that part yet, but I'm going to use libcst to basically, it's right now, if it's a processor, if it's a method, the method will be in its own file. So I'll use libcst to help break that apart, but keep the internal logic. So rather than me cutting and pasting, libcst will just go and rip it apart. So yeah, basically a part of the refactoring, for me, it's just breaking up very large chunks of code and just modularizing them. And the other part of that is again, because I really live and serve a 2.x world, I want to start type annotating. And really, again, it's a shame that I didn't show the YAML file, but the YAML file has all sorts of type information in it. So that's why I can annotate because the spec has all sorts of type info. Does that make sense? It's the most common reason for refactoring. Things are just very monolithic, they're very large. But because maybe I miss a bit of things, are you going to write more code that use libcst? Oh yes. Okay, okay, okay. If I gave this in November, it would be a slightly longer talk and I would show that it would rip apart something monolithic and really put it in its own module. That's not whole. Yeah, okay, cool, cool. And now maybe you can put your code on Kithop or something like that so we can share with our community. Shaxarar, that's probably going to happen. Okay, what will happen and hopefully, I'm very bad at this, hopefully sometime in the middle of a toolkit for building a voice application. So I'm going to release the code base. Okay, nice. Okay, cool. I don't see any question from the other people so I don't know if that's a bitter bad thing. I hope I didn't lose folks. No, I don't think so. I try to keep the talk very short and not to talk too much about the voice app or talking back itself. The talk would become very long. Okay. Yeah, maybe we can do the next not in November maybe next year in January. Maybe you can anyway, we talk later. Yes. Yes, we keep in touch. Thank you very much, Andrew. Okay. Thank you again Andrew and thank you Duke and I'm going to I have to change plans a little bit. I have a good news and a bad news for everyone and I'm going to start with the good news is that we're going to have one more talk that I haven't mentioned as part of the agenda but I did mention it on Meetup so hopefully that doesn't come out of nowhere for people but Peter Cotton is going to tell us about cheap AI for everyone so we're going to see all of those computer vision talks and then we're going to know how to do that without breaking the bank. So we're excited about that. Unfortunately that means we're going to have to wait a little longer to go to the happy hour but I think it's for a good reason. Alors, petit changement dans l'horaire pour ce soir, une bonne et une mauvaise nouvelle pour Peter Cotton qui va nous parler de cheap AI pour tout le monde et il va nous raconter comment faire de l'intelligence artificielle sans hypothequer notre maison. Malheureusement, ça veut dire qu'il va falloir attendre un petit 20 minutes de plus avant d'aller à notre 5 à 7 virtuel mais c'est pour une bonne raison. Alors, sur ça, on passe au prochain point dans notre agenda et puis je vais inviter Claude à se joindre à nous, à l'eau Claude. Oui, bonjour, vous m'entendez bien? Super! Bon, je vais partager mon écran. Oui. Ok. Voilà. C'est clair aussi? C'est oui, je vois un navigateur. Excellent. C'est ça que je voulais partager. Parfait. Bon, Claude, je te passe le contrôle. Oui. Bonsoir tout le monde. Je vais vous montrer en fait un cours très intéressant parce que c'est un cours gratuit qui porte sur les applications de la vision artificielle. En fait, ce cours-là, ça a été, à l'origine, une réflexion sur le meilleur domaine pour faire des applications qui soient accessibles à des PME et à des entreprises en démarrage, des start-ups. J'étais spécialiste davantage du distraitement de la naturelle, mais j'avais quand même fait de la vision et en discutant entre autres avec mon ancien directeur de Thaise qui est bien connu, il y a toujours d'un bio. On était venus à la conclusion qu'il fallait un cours d'introduction à la vision artificielle qui soit vraiment accessible. Donc c'est un cours où il n'y a pas de mathématiques lourdes comme on voit souvent dans les cours d'introduction à l'IA ou à l'apprentissage automatique, donc vraiment c'est un cours pratico-pratique où on parle des codes existants, des librairies, des bibliothèques de codes, évidemment pittons, on parle d'exemples existants et puis on met l'accent sur les applications. C'est vraiment l'originalité du cours et le fait aussi que c'est un cours en français. Donc en gros, c'est un cours qui a 9 modules. Il y a deux profils, en fait, il y a CoA des doigts. C'est un cours qui est très, très québécois aussi au niveau de ses expressions, de son contenu. Les exemples sont souvent civiles de choses locales et tout ça c'est une idée d'appropriation. C'est pour montrer la technologie d'intelligence artificielle, particulièrement la vision. C'est des domaines où il y a énormément de talents locaux, je parlais d'Iosho tout à l'heure et il y en a beaucoup d'autres, il n'y a pas de seuls, il y a un énorme équipe autour de lui. Et c'est historique que l'Université McGill a produit une vision dans le domaine de l'intelligence artificielle, particulièrement des réseaux de neurones. Donc on a les CoA des bois qui sont, je dirais, plus les entrepreneurs. Puis eux, l'objectif c'est de faire des liens entre les connaissances acquises en vision artificielle puis les applications dans la vie réelle. Et on a évidemment les patenteux. Ce qui est l'équivalent en québécois en fait des techniciens si on veut. C'est eux l'objectif, c'est vraiment de réaliser des applications en vision artificielle à partir de l'acquisition des données, le traitement des images, la création des modèles, l'entraînement et puis l'évaluation pour finalement déployer soit sur la toile, un déploiement sur le web avec un serveur ou encore sous la forme d'une application mobile. Donc la conclusion du cours c'est qu'on va réaliser une petite application mobile en Android parce que c'était plus simple pour le développement avec Android, avec Android Studio. Donc on part vraiment à la fin avec une petite application qui porte sur la reconnaissance des écorces d'arbres. Donc on prend une image d'une écorce d'arbres puis on va pouvoir l'identifier. Donc ça c'était un autre objectif de ce cours-là. Donc on part pas les mains vides. Tous les cours, tous les codes évidemment sont sur des top. Et tout ça c'est en open source, c'est en libre. Donc on peut les copier. Quelqu'un pourrait même reprendre le cours tel quel. De l'application aussi. Là on voit mais c'est pas ça qu'on en a. On voit que c'est les écorces. Donc l'application qui fonctionne. Et tous les codes sont faits dans Collab. Sauf évidemment le code sur l'application mobile qui doit être fait dans l'environnement de Studio Android. Donc on a plusieurs modules, je vais faire un tour rapide. Bon évidemment on explique pourquoi la vision c'est une révolution en marche. En fait c'est qu'on a à la fois un accès aux données, ok, à cause du web. On a les algorithmes qui existent. Il y a plein de codes déjà tout fait entre autres sur GitHub, ok. On a aussi la capacité de calcul que ce soit par exemple des encolades. Ou encore évidemment en loin des processeurs en fait des processeurs graphiques, surtout des GPU sur des environnements qu'il faut lui adjudiquer dans le cloud. Donc ça permet aujourd'hui à des PME et c'est facile d'avoir des images parce qu'il y en a à la fois sur Internet mais aussi on peut aller chercher des images facilement avec les téléphones intelligents. Donc il y a vraiment une capacité d'aller chercher des images. Et j'insiste beaucoup moi sur la là on va voir un exemple ici de c'est un robot qui va cueillir des brocolis, ok. Ça c'est l'ancienne méthode là où on recueillait à la main, manuellement et c'est La Palma Tech qui a développé ça. C'est un robot qui fait de l'accueil de brocolis et évidemment c'est basé sur la vision artificielle. Je vous laisse un peu admirer la bête au travail. Mais c'est une très belle application locale en fait de la robotique et de la vision artificielle. Donc parce qu'évidemment il faut recueillir les brocolis quand ils sont dans un bon état qui sont murs à la bonne taille pour l'accueillir. Puis il faut évidemment saisir le brocolis ou un endroit et il y a la découpe. En fait le brocolis séparé du feuillage avec en fait un gédot à très haute et là on voit un peu le fonctionnement de ce cueillir de brocolis. Donc c'est vraiment le genre de, et puis j'ai même une entrevue avec le parcours entrepreneurial en fait d'Éric La Palma qui m'a expliqué comment il y a les venues à développer son. Malheureusement Claude je pense que ton son n'est pas partagé, on n'entend pas le son d'un côté. Même chose, j'appelle le moment Eureka c'est le moment où la personne a trouvé son idée. Donc on a en fait on a deux entrepreneurs comme ça, deux courants des bois qui parlent de leur parcours. Donc ça permet d'inspirer les gens. Évidemment c'est un peu afférent. Là je vous montre l'application quelques applications. Dans l'élevage on a un autre vraiment une application modèle. C'est un système qui prédit le meilleur moment pour faire l'insignation des parts en fait des truies. Et puis ça c'est par la détection du comportement des truies. Donc la jutation entre autres des truies avec un système de vision artificielle et on sait aussi à quel moment c'est vraiment critique. Puis là on a une entrevue avec l'inventeur, si on veut de cette technologie-là, c'est Jacqueline Labrec. C'est une firme dans banlieues de Québec qui sont spécialisées dans les équipements pour les porcheries. Donc ça c'est encore une application de en pêche en agriculture. Donc moi c'est vraiment le secteur les pêches, la culture. On a une firme de Québec qui exporte dans le monde entier. C'est des applications sur les bassins pour faire de l'élevage de crevettes. En fait c'est une application où on compte les crevettes entre autres. Le problème c'est de compter et de voir l'évolution des petites crevettes à partir des oeufs jusqu'à des larves et puis jusqu'à la taille adulte. Donc c'est vraiment une application encore de la vision artificielle. On a une espèce de bac intelligent pour compter les crevettes. Et puis il y a des fiches techniques où on explique ce qu'on peut faire. Des fois aussi on fait une déduction de ce qu'on peut faire comme souvent on n'a pas suffisamment de données. On va donc faire une augmentation de données. Donc l'amplification des données on a un certain nombre d'images. Puis on va les les empêcher en faisant des rotations des translations en mettant du flou changeant les couleurs etc. Donc on peut faire augmentation de données pour permettre l'entraînement des modèles des modèles de résoudre n'aura une profonde. Donc c'est vraiment une instance très grande sur les applications. Ensuite de tout ça, le cours est quand même complet dans le sens qui part vraiment de l'histoire du neuron artificiel dans lequel il y a évidemment quelques Québécois qui ont été impliqués. Donc la fameuse règle de Hebb qui est la règle qui dit que les neurones qui se déclarent ensemble c'est que ils vont se renforcer les uns les autres. Et ça c'est une règle qui a été établie par un professeur de l'université McGill. On a aussi David Hubbard qui lui a inventé en fait qui a fait des recherches sur le cortex visuel des chars et des humains et ça a amené évidemment l'invention des réseaux qu'on veut d'utiliser. Donc on a tout ce parcours et les gens sont libres de faire ce qu'ils veulent là-dedans. Ils ne s'intéressent pas trop à l'histoire de Mia. Ils vont sauter ces douleurs. Mais ils peuvent aller par exemple faire des simulations. Donc on a le laboratoire où on va simuler le neuron artificiel. Et ça c'est des simulateurs qui sont écrits en JavaScript. Donc ça va rouler sur une tablette d'ailleurs les laboratoires sont dans collab et collab ça va rouler évidemment à la fois sur un téléphone de dernière génération ou sur une tablette. Donc on n'est pas limité à utiliser les ordinateurs seulement. Sauf évidemment pour le dernier laboratoire qui lui a nécessité l'installation de studio d'Android Studio. Donc on a des simulations aussi au niveau du perceptron qui est le premier algorithme dans le fond que je peux lancer un nouvel entrainement de les voir comment c'est simple. Donc on voit vraiment tous les poids sur les neurons. C'est un petit évidemment c'est le perceptron le plus simple avec un seul neuron. Mais on voit quand même qu'il y a un retour d'information ce qu'on appelle la rétropopapagation de l'erreur et ça c'est le principe de base des algorithmes d'apprentissage. On voit que vraiment c'est l'idée d'apprendre comme ils nous met font, on apprend à partir de ces erreurs. Et donc là on peut faire la simulation ça rend compte des choses. On peut vraiment changer les poids de notre simulateur et regarder les résultats. Il ne va pas en cours de route mais au moment de l'initialisation on peut faire les changements de poids et regarder l'effet. Et on a différentes fonctions qu'on appelle des fonctions de transfert où ça introduit une non-linéamité dans les calculs pour le perceptron. Encore là je reviens sur les applications c'est extrêmement riche au niveau des applications donc et là j'ai une citation aussi qui est très intéressante de Hugo Dastou qui est directeur général de patate d'Olbeck dit si l'intelligence artificielle est rendue dans les patates il faut que le reste du Québec se réveille. Donc c'est clair qu'ici on a un système de triage de patates qui est à base de vie artificielle. On a les gens aussi de Vauban. Puis là justement c'est l'entrevue où Monsieur Dastou parle de l'utilisation de l'IA pour l'être des patates avec la firme Vauban qui était responsable de l'appui technique de cette technologie. Et puis on a aussi la surveillance des gestions et des ruches par la firme Nectar Technologie de Montréal avec une application mobile pour surveiller les ruches et même ils vont écouter les ruches pour savoir d'informations sur la santé des abeilles. Donc ça ça fait partie des choses. On a vraiment l'analyse des sols en temps réel encore là c'est Crisalabus de Montréal qui développe une solution basée sur une sonde intelligente qui est plantée dans le sol et qui va permettre de faire une analyse du sol. Puis là vous allez dire c'est quoi le lien avec la vision artificielle parce que l'analyse est faite à partir d'un spectrogramme et le spectrogramme c'est une image qu'on va analyser avec les mêmes réseaux convolutifs qu'on a utilisés pour faire de l'analyse d'images traditionnels. Un robot ici de Déserba c'est le fameux robot qui s'appelle la chèvre de la firme Nexus Robotics de Brossard au Québec. Donc c'est encore un autre exemple et évidemment il y a des vidéos, on a le fonctionnement c'est une pince ici qui va arracher les mauvaises herbes et donc là évidemment on voit les implications aussi au niveau environnemental donc si on enlève les mauvaises herbes avec un robot ce qu'on pourrait pas faire avec des humains à moins d'avoir des populations de chômeurs, puis savoir quoi faire ce qui n'est pas le cas évidemment mais t'en manque de main d'oeuvre et donc le système de vision artificielle et ça permet aussi de réduire la quantité d'herbicides et puis de pesticides qu'on va mettre dans les champs donc faire des opérations ciblées. On a aussi la vision artificielle qui est utilisé en entomoculture la culture des insectes qui est encore une solution à long terme pour l'alimentation humaine on parle de défensement climatique de la crise d'environnementale ça fait partie des solutions et encore là on utilise la vision artificielle dans ce domaine-là et puis plein d'autres exemples l'automatisation par exemple, le désherbage de précision c'est-à-dire qu'on a des bus pour on va répandre des pesticides avec un système de vision artificielle qui va détecter les endroits où on a besoin d'intervenir qui va faire en fait qu'on va faire un petit jet de pesticides juste sur les plans qui sont affectés au lieu d'arroser comme ça se fait encore couramment avec un avion souvent ou encore des tractables les gens là-dedans portent des masques parce que c'est toxique et donc là vous pensez l'impact que ça va avoir sur l'environnement donc là déjà c'est une amélioration d'épendage on a ce qu'on appelle le désherbage de précision on a les firmes verticales on a un exemple ici de culture de fraise en serre intérieure avec un contrôle de l'atmosphère qui est basé sur l'intelligence artificielle y compris l'éclairage et on a une série d'onglets et d'hyperliens vers d'autres applications comme les lioles dans les pouloillets je vous ai montré juste la partie qui concerne les applications d'agriculture et en élevage mais il y a aussi toute une partie sur la foresterie il y a une partie sur l'utilisation dans les pêches et la coaculture donc c'est vraiment complet et j'ai beaucoup insisté et on a des exemples aussi de l'étranger donc les payables, la fameuse silicone valide d'agriculture européenne un autre élément important c'est évidemment le moissonnage des données j'appelle les données au coeur des applications et ça ça fait la différence entre un cours d'IA académique où on parle d'un jeu de données qui sont déjà tout fait et l'IA en application dans les entreprises où là on est vraiment le coeur une grande partie du temps d'ailleurs mais on va passer plus de 80% du temps 60% et 90% du temps à nettoyer les données recueillir les données nettoyer les données, préparer les données pour obtenir des résultats et les algorithmes en fait c'est une partie vraiment congrue c'est peut-être 5% de l'effort qui est mis sur les algorithmes le gros de l'effort est vraiment sur la partie recueillie des données et c'est pour ça qu'on a un module complet là-dessus et ça a des techniques comme on a vu avec justement Piton récemment avec Piton Montréal où on veut utiliser des beautiful soups ou encore Selenium ou Scrappy pour aller chercher des données sur Internet et on a aussi des capsules sur l'éthique les aspects égaux par exemple, ou moi ça nage de données les pratiques entre autres dans le domaine par exemple de la reconnaissance de visage on est là-dessus on est en phase avec la déclaration de Montréal sur l'IA éthique donc on s'institue beaucoup de ça pour essayer de donner à nos entrepreneurs des bonnes notions d'éthique pour respecter la vue privée et aussi éviter les biais dans les données des choses comme ça je vais vous donner maintenant un exemple de laboratoire en fait il y a une trentaine de laboratoires le laboratoire 23 part de l'identification des laboratoires les données elles viennent de la faculté de foresterie de l'université Laval encore là j'ai essayé d'utiliser toujours des choses locales le plus possible on avait un très gros jeu de données il y avait 23 000 images d'écorces d'arbres prises par des chercheurs de faculté de foresterie d'université Laval et j'ai récupéré ça j'ai mis ça dans Kegel parce que Kegel permet comme c'est en fait une division entre Kegel et Collab donc on n'a pas de problème de transfert de données qu'on aurait si on avait les données locales sur notre poste qu'on devait télécharger les données, télémercer les données sur Collab ce qui pourrait prendre des arts parce qu'on parle quand même de traiter des gigas types de données et donc là ici on a ce qu'on va faire donc on va importer les bibliothèques pitons pour l'apprentissage on va lire le jeu de données d'entraînement, de validation, de test on va visualiser nos données on va préparer nos données on va créer un modèle en utilisant l'apprentissage par transfert parce que là on va utiliser un modèle pré-entraîné ça c'est une des techniques qu'on va voir pour pallier le fait qu'on partira pas de zéro puis qu'on va en faire que ça va nous permettre d'économiser aussi sur le temps de calcul donc on va prendre un gros modèle pré-entraîné c'est typiquement un REZ9P qui a été pré-entraîné sur Hommage9P et puis on va ajouter des données d'arbres, des écosses d'arbres puis on va impliquer les données encore des écosses d'arbres pour permettre de la création et l'entraînement de modèle donc on va compiler un modèle, l'entraîner on va l'évaluer avec des données de test important de savoir puis on en parle dans le cours évidemment mais les données de test c'est toujours des données qui n'ont jamais été vues par le modèle qui n'ont pas servi à son entraînement on va assurer les cours d'entraînement on va voir les graves exactitudes de ces choses-là on va assurer des matrices de confusion des bonnes classifications versus les erreurs on va assurer aussi des rapports sur le résultat on va sauvegarder notre modèle pour pouvoir l'utiliser après ça pour notre server qui va servir les modèles pré-entraîné ou encore qui va servir dans le cadre de notre application model donc on va devoir télécharger sur le poste de travail parce que plus tard on va devoir intégrer ça à une coquille d'endroit là on va regarder le code en tant que test en fait c'est pas des exercices de code tout le code est fourmis et fonctionne donc il manque une partie de code et vous devez le faire moi je parle de l'idée qu'on est dans une situation comme un employeur on a accès à GitHub on a accès au web on a toutes les ressources évidemment quand je m'inspire de quelque chose j'utilise beaucoup des tutoriels de TensorFlow mais c'est vraiment un montage on prend plusieurs sources des codes que j'ai écrit moi-même et tout des trucs qui viennent de François Cholé l'inventaire de Keras et je rassemble ça pour faire un exercice qui est en fait qui est cohérent donc ici par exemple on va faire je prends le temps de mettre des germes aléatoires pour pouvoir reproduire les résultats parce que très peu d'exercices vont faire mais moi je le fais parce que quand tu fais ça en entreprise c'est plutôt l'acquisition des données là ici on utilise on montre comment on va s'enregistrer votre membre de K-Gull mais comme on a un compte Google Gmail on veut facilement devenir membre de K-Gull on va aller chercher les données sur le site où j'ai déposé les données des courses d'arbres encore là j'explique chaque étape comme il y a un token il y a une clé privée pour chaque utilisateur de K-Gull à chaque fois qu'on a les données on va les répartir les données d'entraînement, les données de validation on va visualiser nos données si on va avoir quelques échantillons si ça nous donne une idée des écorces évidemment il y a différentes souches on a des tuyaux là ce qu'on appelle des cèdres on a évidemment des érables, des sapins etc. donc on a en tout le vingtaine d'arbres qui sont distingués par l'application Ecosia là on va créer des flux pour nourrir notre grippe pour l'entraînement ok on va faire de l'anxication de données c'est-à-dire qu'on va prendre les données puis on va faire des rotations des des images inversées ou ce qu'on appelle des flips plan anglais, des réflexions et puis sur des masses pour augmenter le jeu de données on va normaliser nos données ensuite de ça on va faire on peut visualiser aussi des échantillons des informations de données qui ont été retravaillées avec l'amplification de données et puis on va faire la normalisation des données puis l'entraînement proprement dit là j'ai lancé ça un petit peu avant je t'allais chercher évidemment pour mon entraînement je t'allais chercher un modèle pré-entraîné je vais montrer ici je vais chercher un modèle sur Google API qui est un modèle inception qui est un modèle pré-entraîné sur ImageNet et puis là on monte l'architecture du modèle pré-entraîné on montre aussi comment on fait le travail pour enlever les couches de sortie donc on va enlever les couches de sortie du modèle pré-entraîné on va remplacer ça par des nouvelles couches de sortie ici c'est ce qu'on fait, ici on crée le modèle il y a plein de commentaires détaillés par exemple où on met le nombre de classes etc le nombre de couches on va voir c'est qu'un perceptron en sortie mais qu'à la base il y a des réseaux convictifs qui finissent en fait par un classificateur à la base du perceptron là je sais que j'arrive avec des termes un peu compliqués mais c'est tout expliqué dans le cours évidemment et puis tout ça ça aboutit dans le fond à la compilation et à l'exécution là il est encore en train de s'exécuter c'est comme le gars des vues là on est à la littération 39 sur 40 donc on est aveuille d'avoir les résultats parce que j'ai lancé mon collab avant la séance de ce soir donc on devrait pouvoir voir les résultats tout à l'heure je vais vous montrer maintenant le fameux labo que j'appelle facultatif parce que ce qui ne fait pas dans le collab c'est l'application mobile écorcia encore là on a, si on voit un image d'écorcia avec au centre l'image d'écorce qui a été captée par la caméra de votre téléphone là c'est un frein d'amérique à 36.3% il donne comme deuxième choix un érable à sucre ou un ordre d'amérique encore là on donne tout le détail comment installer android studio comment aller télécharger comment configurer le projet on explique en fait c'est tout des petits screens en fait c'est très long c'est surtout moi qui a fait du travail pour préparer ça mais là j'explique les endroits il faut changer le code pour dire ça c'est pas en piton c'est en cote-line et en java mais bon on se bouche le nez et on le fait et donc vraiment tout le projet dans le détail et avec toutes les étapes pour créer l'application et si on réussit pas à le faire on peut toujours aller sur le site GitHub puis télécharger l'application qui a été compilée et qui suffit tout simplement de mettre sur son téléphone donc ça donne une idée du travail et puis là ici on a des exemples de l'exection d'écorcia on a ici le boulot à papier on voit ici un érable rouge en être une épinette noire donc etc c'est reconnu évidemment pour le système et on peut faire la même chose aussi dans un autre module où on va déployer ces modèles-là non pas sur un téléphone mais sur une application web où on va télécharger une photo puis qu'on peut avoir des résultats et pour terminer je dirais qu'on met en garde aussi qu'on fait que c'est pas magique l'intelligence artificielle, la vision artificielle donc il y a vraiment ce qu'on appelle un cycle ça c'est la fameuse courbe qu'on appelle l'évolution des attentes en technologie de la film Garnet où on part avec une nouvelle technologie on pourrait dire ça c'est autour des années 2012-2013 l'avoué sur le marché de l'apprentissage profond en vision artificielle puis la démonstration qui a été faite dans le concours justement ImageNet qui est une compétition en différentes équipes en vision artificielle et là les gens de Toronto avec Intern en tête sont arrivés avec un système à base de réseau convolutif qui a battu tout le monde pour faire une marge importante c'était de l'ordre de 10 à 15% évidemment ça avec les journalistes avec les réseaux sociaux ça suscite des attentes exagérées en fait on pense que l'intelligence artificielle ça va faire tout, y compris le café et la téléportation et puis là évidemment comme on a eu des attentes exagérées on a un cru de désillusion évidemment la courbe peut varier la forme de cette courbe, c'est pas une loi de la nature c'est une observation que les gens de Garnet ont fait une désillusion puis après ça remonte parce que là les vrais usages ça font sentir, ça se révèle et là on va utiliser mais évidemment on n'est pas au niveau des attentes exagérées on est sur un plateau qu'on appelle le plateau de la productivité puis on parle évidemment de l'éthique de l'impact par exemple environnemental des gros modèles pour entraîner de faire attention aussi à l'écho-blanchement puis au soulusionnisme numéré c'est pas parce qu'on a de l'IA qu'on peut tout résoudre en fait qu'on va résoudre tous les problèmes de la planète puis qu'en plus ces technologies-là sont quand même avares ou consommatrices d'énergie et de ressources comme on parle des téléphones si on ne les recycle pas on a des terres rares, on a plein de métaux qui sont perdus là et donc il faut penser, il faut avoir une balance puis regarder les impacts aussi de nos technologies et puis on a évidemment des discussions qui sont faites en intérieur du cours donc ça vous donne une idée du cours et que celui que ça intéresse puis là, je n'ai pas montré tous les trucs un peu plus techniques où on parle des réseaux on parle en fait, on parle du neuron jusqu'au réseau de neuron profond mais ça vous donne une idée de l'envers bleu puis du type de cours qu'on représente via Rena je vous invite à aller vous inscrire, c'est gratuit si vous n'aimez pas vous persistez pas et par contre c'est ce soir le dernier soir pour s'inscrire avant l'an prochain il y aura probablement une nouvelle session de cours en janvier et pour le moment ça s'arrête ce soir à 11h pour les instructions et vous avez jusqu'au 21 novembre pour terminer le cours ça fait le tour, j'ai parlé beaucoup mais est-ce que les gens m'ont compris puis est-ce que les gens sont intéressés merci beaucoup Claude je pense que comme on a un horaire un petit peu chargé on va pas sauter la période des questions mais je pense que tu restes avec nous pour le 5 à 7 juste après les présentations techniques bon on va avoir le 5 à 7 virtuel après nos 2 autres présentations donc je pense qu'on va éviter les gens à se joindre à nous au 5 à 7 s'ils ont plus de questions et puis je sais que tu es sur Slack avec un œil de links donc si les gens ont plus de questions ils peuvent les taper sur Slack les commentaires sur Slack et puis sinon on va se foutre oui, au 5 à 7 virtuel merci beaucoup Claude c'était une super présentation puis on a bien hâte de s'amuser avec ces technologies-là dans le cadre de nos soirées de programmation merci, au revoir merci et notre prochain présentateur c'est Lindsey elle va faire un deep dive sur un problème de vision un classif donc quelque chose très similaire à ce que Claude l'a décrit Claude a vécu très vite et j'espère que Lindsey va pouvoir s'occuper de tout ça et s'y couper et donc nous pouvons voir comment ça va Lindsey j'ai vu vos slides ici et nous sommes dans le milieu de la quiz j'espère oui, excellent le stage est yours, merci merci bonjour, avant de commencer j'ai mis sur la table quelques questions pour vous je vous souhaite une minute si vous pensez que vous savez l'answer n'hésitez pas à l'écrire ou à l'appeler et après une minute ou deux nous allons voir toutes ces questions ensemble ok, ne vous inquiétez pas si vous n'avez pas eu la chance de finir les questions nous allons voir les questions ça commence avec une fonction qui s'appelle Yoda et ça fait 3 variables et ça fait les mêmes variables dans un autre ordre en dessous de ça il y a un statement de print qui s'appelle la fonction Yoda c'est passée en trois pièces ces pièces ici sont pièces c'est fun on va rejoindre ce qu'il y a avec les espaces et on va attaquer un point d'exclamation sur la fin vous pouvez double-check que la fonction de Yoda fait une pièce fun comme vous le voyez dans la seconde question on a une liste c'est l'assignée Biddle et Eggman dans cette liste et ce que vous pouvez voir ci-dessous c'est un loop on va prendre l'input de l'input et on va assigner l'input à l'usage variable si vous pouvez le voir et ce qu'il va faire c'est vérifier si l'input est dans la liste de l'usage donc peut-être si vous avez si vous inquiétez un nom d'usage qui a déjà été pris ou utilisé si c'est déjà dans cette liste on va prendre l'input et on va prendre l'input de l'input ce qu'on a installé ici c'est qu'on va en mettre l'input de l'input et ce n'est pas dans la liste donc on va prendre l'input de l'input et on va prendre l'input de l'input ok, donc maintenant que l'on a warmé un petit peu je vais m'introduire Hello Montréal je suis Lindsay Martin c'est bon d'être ici j'ai environ 5 ans d'expérience en machine learning c'est un peu plus que ça maintenant quelques années auparavant j'ai fait le programme Microsoft professionnel dans l'intelligence artificielle et l'input de l'input ma degree d'éducation est de l'Université de Washington en sciences computer et je suis maintenant dans mon travail dans l'intelligence artificielle de l'Université de Colorado dans l'intelligence artificielle et machine learning un peu plus tard j'ai commencé en faisant des questions de quiz comme vous l'avez vu en ligne et en postant pour le fun et ils ont été surprisement populaires et c'est comme ça que j'ai connecté et il m'a invité d'être ici avec vous tous aujourd'hui donc ce que nous allons aller vers c'est un peu en fait j'ai demandé d'être de haut niveau technique et il m'a dit que c'est quelque chose je pense que vous avez eu beaucoup d'études techniques donc ce sera un peu plus de haut niveau et j'espère qu'il va mettre des gens à des niveaux différents de la connaissance de Python ensemble on va regarder des trucs cool de Python comme on l'a vu un petit peu sur comment devenir un expert dans l'espace des conseils d'interview et nous allons faire un deep dive technique dans un code qui fait vision pour Halloween candy donc c'est un classifier pour Halloween parce que c'est en octobre donc on va voir les structures de Python donc c'est un code qui peut bien je suis étonnée je suis étonnel donc moi j'ai un bateau qui c'est un style qui mais ça marche. Vous pouvez faire des operations bit-wise ou en Python, ça fait vraiment facile. Vous pouvez juste faire A, B, B, A. C'est bien, c'est bien. Je ne vais pas vous mettre sur le spot encore pour celui-là. Nous allons vous donner l'answer, mais nous allons le faire ensemble. Cette première ligne, vous pouvez voir que c'est en faisant A, B, 10 000, 3. Vous pouvez en fait prendre deux valeurs et les assigner à deux variables dans une ligne. Nous allons avoir un petit disclaimer sur le next slide sur si vous devez faire des choses comme ça. La ligne après ça est un statement de print. Il y a un F-string dans ça. Les F-strings sont beaucoup plus divertis. Si vous ne le savez pas, vous devez les regarder. Vous pouvez faire beaucoup de choses avec eux. Ici, c'est juste d'appliquer ce dollar sign, comme c'est. Dans les brackets de curly, ça va être évalué. A divided by B is going to be 10,000 divided by 3, which is 3,333.333 repeating. Après le colon, right here, you can see that we have a comma and a point 2 F. The comma is asked for it to be comma separated and the point 2 F is going to ask for it to truncate it to decimal places. So you see in that first answer, we do have the two decimal points truncated. We have the comma and we have the dollar sign. And here's that disclaimer that I mentioned. Tricks like these help you to debug and read other people's code. They can really help you understand how things work under the hood, but they are not always the best to use in practice. Sometimes they're great, sometimes they make for really messy or condensed code. Remember to always keep your code pythonic. What does that mean? If you've never done so, you can import this and read the Zen of Python by Tim Peters. It talks about having clear and readable code. I will let you read that on your own time. It's a good read. All right, a few more Python tips and tricks on the next two slides. I'm going to let you take a look at these for just a minute and then we'll go over them. So the example on the left there is an example of understanding how Python works under the hood. You have an X on the first line and then you have an X that's in the for loop. The big question is, is the X in the for loop local only to the for loop or is it the same X as is on the first line? So first you have X equals 32 and then you have that for loop. And the answer in Python is it's going to be the same X throughout. So it's going to jump in the for loop and X is going to immediately become one because that's the first thing in the list. It's going to plus equals 40, so it'll be 41. Then it'll be 2, the next element in that list, then 42. And finally, it will print out that 42. So on the upper right, you see a big number, you see 1 billion. And it's got some underscores under it. This is just a handy little tip that you can use. It makes it a lot more readable for you and whoever's reading your code to use those underscores on big numbers. And Python will treat it just the same as it would as if it didn't have the underscores. And the last one on the screen there down below, answer equals 4842, RIP Douglas Adams. In this F string, we are going to do a neat trick that's new to Python. I believe 3.8, one of my favorites. In the curly braces, we put answer equals. And what's going to do is it's going to print out the variable name, which is answer. It's going to print out the equal sign. And it's going to print out 42. And this is super handy if you're debugging. So here is our last page of cool Python tips. I will not go into depth on these. If you don't know maps, stars, and comprehensions, you are going to see them a lot in Python. And I suggest definitely digging into all of those. So we'll start with stars. Obviously, you can use stars for multiplication. In the top over here, you'll see it generally used as an exponent. But what you might not know is it has a couple more uses in Python. So nums is a list. And we are going to assign nums to A, B, and star C. A is going to get the first element in that nums list. B is going to get the second. And star C means that C is going to get all the remaining elements in that list. And you see that printed out on that third line there. On the right, we have a generator comprehension. Similar to a list comprehension, which you might see all the time. There's also dictionary comprehensions and set comprehensions. Comprehensions are all over Python. I'm sure you've ran into them already. If you haven't, you will. Generator, we won't go into depth about what that is, but it can basically return one thing at a time if you need for it to in Python. In here, we have it generating the values negative five, negative four, negative three, negative two, and negative one. It's going to be the range from negative five to zero, but it's not going to include that zero. Below that, you have a print statement. And it's calling the map function. Map will map some other function. In this case, we're doing absolute value onto your values in that generator. So it's going to take the absolute value function right there. And it's going to put them on all those negative values that we just had in that generator. So all that negative values will become five, four, three, two, one. And then the other use you might not know for star is right there. And it's going to do some unpacking. And what that means is it's going to take all those values in that generator. It's going to unpack them and pass them into the print statement as separate arguments. And so what print does by default with the separate arguments is it spaces them out with a space in between them. So that's why you have the right answer as this one right here. OK, so by far, the question I get asked the most often is how do I get good at this stuff? And I have a little suggested roadmap for you. You might have your own system and that is great. And maybe a few of these suggestions will be helpful anyway on the top of that system. That's great for you. I suggest the code method connect, organize, dive in and expertise first connect. You're already doing this. You are already here. You're on it. So I won't spend too much time on this one. Super valuable. You're going to want to do this throughout your career but begin early. It can be virtual. It can be in person. There are all sorts of tools for it. It's important. The next one is organize. And this is where you're going to want to know what you can do well for you. Do you work better with time blocks? Maybe the Pomodoro technique? Do you work better buddying up with Tim Urban's procrastination monster, which is a hilarious TED talk if you haven't seen it? Highly recommend it. There's a lot of different approaches. What I suggest is something like this. You might have heard of atomic habits where you do small amounts of things each day that add up to some pretty solid knowledge and something. You might need tools like leat code. Maybe you need to brush up on some other fundamentals like statistics for small amounts of time each day. And then spend a bigger chunk of time on some technical deep dives, hands-on tutorials and such. And then it would spend an hour or two, depending on the amount of time that you have available, putting context around what you're learning in this space. That might include podcasts, conference talks, cutting edge research papers, etc. Lastly, a habit of recall, summarizing what you've learned, quizzing yourself. That really helps to solidify that new knowledge. So what does that diving in part look like? That's the kind of more technical, larger chunk of your day. That's going to include books, courses, video lectures, tutorials, quizzes, projects, lots of different things for different learning styles. Send me a message for a list of recommendations, especially if you are interested in the machine learning space. OK, note about this zone. This plan we just went through is great at keeping you on track and learning. But if you find yourself excited about a particular project that you're super interested in and you want to go further with it, feel free to abandon the plan for a little while. Sometimes the best learning happens when you're voraciously looking for answers to problems that you're trying to solve on your own, that somebody told you to go solve. When things slow down or you're getting lost in the weeds, jump back into the plan again. And sometimes all of this can be incredibly overwhelming. The more you know, the more you know that you don't know. For me, it was kind of like, wow, machine learning is cool, deep learning is cool, NLP and reinforcement learning are totally new ball games. I need to buff up on my statistics, my matrix algebra, my calculus, and with all the new tools available in that space, it can be a lot to take in. So what can you do? Well, really what you need to do, unless you're working for a small startup where you need a little knowledge in everything, is you need to specialize. You need to pick a path. What does that look like? How do you pick a path? What interested you when you were diving in? Maybe reinforcement was really interesting to you when you were learning, but you chatted with folks in that network, that very valuable connections piece. And it sounds like there's not a lot of jobs in that space yet. Maybe there will be down the road, but not right now. And that's really good to know. Find something that's interesting and in demand. Take a look at the job postings that you're targeting. What skills do you lack? What expertise is still needed? And in my past life, many moons ago, I was a technical recruiter. So I have just a few tips for you in that space. Big question is how do I get a job in a space that requires experience without having experience? Remember, projects count. If you do a project, say, in proving the fairness of candidates sourcing, for example, and a company is looking for that kind of expertise, they will be very interested in that project, even if it was not with a particular company. So do some projects on your own time by yourself or with another group. And also know your worth, what is an appropriate salary for a certain job at a certain level in a given location. Know the demand for your skill set, and know your stuff. Anything on your resume, you should be able to speak to in depth. OK, as I promised, we are going to do a mini technical deep dive with Candy Classifier. My daughter and I put this together, this little demo last year for her high school's machine learning club. She is the vice president of her machine learning club, and I'm very proud of mama. And here's the steps that this code is going to go through. We're going to import the packages. You're going to get the data, that's the candy images. You're going to set your global variables. We're going to do our train and test split. We're going to make our model, train our model, test our model, and we'll test on a single image to see how it does. And we are going to go just quickly, very high level through this. I'm going to put a link to the Google collab code at the end, and you can go there and use it on your own time, go in depth, feel free to message me with questions about it. But first, we are going to import all the things. Then you're going to download your data, and that can be from anywhere. For us, we have it on GitHub. It's going to be your candy images and their labels. We're going to bring it into Google collab and then zip it. And then we're going to set our global variables. So we have 5 classes here. Those are KitKat, Rises, Smarties, Tutsis, and Wothers. Our images are going to be 64 by 64 pixels. And channels equals 3 just means that it's a color image. And that's our RGB values. Then we're just going to display a few of those images. Make sure that our data is not corrupted. Make sure that it's candy images, not cats and dogs. And then we're going to split all of those images into train and test. Little note, I highly recommend doing train validation test splits for anything that is of any size whatsoever, bigger than a tiny little demo like this. It is possible to overfit on your test set. And then we're going to make our model. So you do not need to reinvent the wheel when it comes to vision recognition. There is a lot of different model choices out there in PyTorch or TensorFlow Keras. I put a few of those choices up at the top there for you to play with. For this one, we're going to use VGG16. It's pretty robust and works pretty well for stuff like this. And already in just a few slides our model is learning. It's going to go through 32 epochs so trying to figure out what Tutsia versus a Wothers versus a KitKat. And then we're going to evaluate how well it did on that test set. So you can see there that it's like a 93.8% accuracy, not bad for just a few hundred images and a little demo put together. This is just some code to test for a single image. So we want it to be in the same format as it was going into our model and this helps us format it that way. And this will just grab a couple images from GitHub for us to test on. These are images that it's never seen before. Those are the images there and you can see that when we ask for it to predict on those images it predicts Rises, KitKat and Rises, which looks right to me. Here's the code link. I'll put this up on the last slide as well so you can take a picture of it there if you want to use it or dive in further with that code. And one last little note on ethics. Just because you can doesn't mean that you always should. Don't get me wrong, there are a lot of awesome things that you can do in this space very impactful. That is why I'm here. I'm so excited about the potential for all of these tools that we have. But there are some things that you can do that are not so awesome. So please use your skills in Python, machine learning and or AI responsibly. And that's all I have for you today. I have the candy code link there for you and feel free to connect with me on LinkedIn. Love to connect with y'all. Take any questions if you have them. Thank you so much, Lindsay. I'm going to bring back Zook to moderate a very brief period of question. Go for it. Thank you, Lindsay. I have a lot of questions but you already answer a lot of my questions. So you prefer people to connect with you on LinkedIn. Sure. Cool. I think President Matthews. I will send you a lot of questions. I know you throw it on time too. I invite everybody to connect to Lindsay by LinkedIn and ask her whatever you want. Thank you for your pretty nice advice. Thank you. Thank you again, Lindsay. Thank you, Zook. And now we're going to bring in Peter to talk about machine learning cheap machine learning for all. Hello, Peter. Hello, everyone. Thanks for inviting me to this meeting. And I do realize that Happy Hour is presumably supposed to start already. So I think we're going to resolve that by I think people to grab their drink if you really need one right now but we're getting there actually I have my friend's wine right here. They said you're giving us the example. Yes, leading us by example. Thank you and I let you also I'm going to show you a type of AI you can do while you're drunk because it's so easy. Perfect. That's sometimes from here. How's that? You see my slides okay? So yeah, thanks for having me. So briefly I'll just talk about my experiences, very short biography and why this led me to create micro prediction which is my open source passion project that I invite you to play with. The long story version of this talk is a new book coming out I think November 8th published by MIT Press which is sort of a a book length essay on the power of markets if they're made easier to use. So briefly I started my career as a mathematician I worked on Wall Street and helped create disasters there I was an entrepreneur briefly for six years I built a data company I went back to JP Morgan and I helped optimize their flow trading of bonds and credit default swaps algorithmic trading and I currently work for a hedge fund which manages about 20 billion dollars so longer than the equity hedge fund so that's me. However, my most relevant background for this talk doesn't even appear on my my resume or on LinkedIn and that is my history as a semi-professional gambler and I worked for a guy who made his living betting on peri-mutuals and maybe I don't have to explain that because the peri-mutual is a market clearing mechanism it's a French invention actually for settling bets on cock fighting and has an amazing Australian implementation in 1913 by an engineer named George Julius which is sort of the unsung history of computing so I invite you to go down that rabbit hole if you're interested. What I'm going to show you is sort of a continuous generalisation of the peri-mutual anyway I want to keep you from your drink so what have I learnt in my sort of 20 years as a kind of front office quant not much I've really only learnt that markets are better than models of predicting things and again I probably can't convince you in 60 seconds if you're not already convinced but there's a lot been written on the topic going back to Hayek in 1945 and all the economists who were pined on the topic since markets are a model of sorts they're just one that anyone can improve without asking for permission so that's why they tend to work well question is can we make markets as simple to use as models import pandas import start a market yourself with a few lines of code if you could do that then you might be able to change the way we think about AI that's the idea now again if you don't believe me you could try running this bash script you can find this by the way I have the dexterity to share it in the chat but if you google micro prediction and you find the micro prediction home page and then you click on setup or the docs and then setup you'll find this little bash script and if you run it right now you'll actually be participating in a market a little bit like an options market and what you'll be doing is you'll be adding power adding prediction power to what you see here which is a very simple call it the community micro prediction API it exists so that anybody who wants a prediction of any live source of data can receive it without doing anything and of course for that to be effective you need to have some sort of market mechanism sorting the good from the bad and you have to have people contributing models on the other side of it so that's what you'll be doing so you think of this as a sort of micro prediction oracle if you will an imperfect oracle you can find it's a sort of mysterious gateway to a seething swarm of algorithms and data written in python Julia type script etc authored by anyone at all potentially finding any data that they can see in the universe and delivering it all back to you in the form of predictions of the things you care about so this is completely turn key prediction of anything at all in theory of course it'll be more effective if the world was full of these oracles and the algorithms who inhabited them talk to each other this is a slightly better perhaps artists impression of a micro prediction oracle it is simply a place where you send your data stream and you sort of go fishing for the relevant algorithms and they come to you rather than the other way around and how easy is this to use well I try to make it as easy as possible let me walk through an example here I call this one the 10 minute data science project and I guess the the premise is that you work for NOAA and you've been charged with predicting building a predictive model for the height of water on earth somewhere and of course you could go down a whole rabbit hole and start reading literature and you could hold meetings to discuss this and so forth but this piece of code is intended to illustrate that you could actually start and finish your project in 10 minutes or perhaps kind of do it on the slide during the first meeting to discuss that particular project and all you have to do is import micro prediction in this case I'm actually importing a micro writer you need to instantiate the micro writer with the right key since we're short on time I won't go into how you generate a right key but you can do that yourself for a large function now we come down to definition water height this is just a function with no arguments that returns a floating point number it happens to kind of demangle some terrible source of data in some weird format supplied by NOAA but it returns a number and that number is the height of water somewhere on planet earth that is the thing we want to predict how do we predict it ? very simple On a un petit script qui s'appelle pole for an hour, je dirais, et à chaque 15 minutes, il va mettre un valeur. Et ce que c'est en faisant ici, c'est envoyer le valeur de l'eau dans le plan de l'Earth dans l'oracle de production magique que vous avez appris. C'est l'open source, vous pouvez le mettre à l'aise, par contre. Et c'est tout que vous faites. Et puis, vous pouvez le mettre à l'aise, peut-être que vous l'aurez sur un grand travail. Et vous le mettez, et vous revenez dans un jour ou une semaine, ou un mois ou 3 ans. Et c'est tout. Je vais entrer à ce que vous recueillez, momentanément. Mais comment ça fonctionne ? Ça fonctionne parce que tout le monde peut apporter de l'aise. Et l'une de les choses qu'ils peuvent faire, c'est qu'ils peuvent importer un microcrawler de l'libré de microprédiction. Ils peuvent distancier un microcrawler, et ils peuvent juste le faire. Et ce microcrawler, on va regarder tous les streams qui sont envoyés à cet oracle par quelqu'un qui veut quelque chose qui est prédiqué, et qui commence à prédiquer. Maintenant, bien sûr, ce que vous recueillez, c'est le microcrawler, mais je vais voir comment il peut changer. Et ce qu'il va faire, c'est qu'il va regarder tous les streams différents que les gens veulent prédiquer. Par exemple, on va regarder le trafic dans la région de New York, ou le wind speed dans Seattle, ou peut-être, je ne sais, les changements au prix de Bitcoin, ou quelque chose. Il y a de 425 baked points qui vont arriver après un médecin fixé, et qui a changé. Ce n'est pas un point estimate. C'est une tentative vers un estimat distributionnel. Ça va être une proof que nous allonsそのleur pour que vous ne seniorsz pas ça. Un point estimat estimatable. C'est un point à!!). Et ce sont les mécaniques du système, mais le manière dans laquelle il operationne c'est que quand le point de date arrive, le vrai, nous simplement regardons en temps à qui on a fait les prédictions et nous regardons comment beaucoup de gens ont eu des décisions de plus en plus, et par compte de si vous êtes plus ou pas, ou le nombre de décisions que vous avez plus, vous avez un uptick dans les crédits ou si vous n'avez pas de décision. Donc c'est un mécanisme simple, sous le coude, dont je n'ai pas de temps pour aller en détail. Mais le point c'est que votre crawler, comme je le disais, peut juste commencer à produire as many different things as it wants, et si vous roulez cet ascript que j'ai donné vous, vous pouvez juste couper et placer la clé, ça va se placer en microprédiction.org et vous allez avoir un dashboard comme ça, vous montrer comment vos prédictions vont. Donc, c'est tout, c'est libre, short, horizon, forecastation d'une quantité de vie, à un an en avance. C'est bon pour quelque chose, et ce n'est pas si bon pour d'autres prédictions, on n'a pas besoin d'utiliser les prédictions de la prochaine sélection, ou pour un long terme forecastation de choses, évidemment, parce qu'on ne peut pas autonomiquement déterminer si la prédiction est bonne ou non. Mais pour les problèmes de l'opération fast-moving, c'est essentiellement libre, libre d'intelligence. Encore une fois, j'ai donné un peu d'autres choses dans la bibliothèque qui peuvent vous aider avec des objectifs de choses pour que vous puissiez s'améliorer votre modèles préférés dans ces prédictions, et pour que vous puissiez prédire des choses. Je ne veux pas dire que ça. Il y a beaucoup d'exemples. Mais ici, c'est un exemple très simple. Vous pouvez subclasser les prédictions que j'ai offertes, et vous pouvez juste changer l'une méthode qui prend des valeurs de temps et produisent les prédictions. Et ça, et puis vous pouvez juste rassembler. Et donc, si vous voulez une prédiction de prédiction, vous pouvez juste s'insérer dans cette méthode, et vous pouvez rassembler et trouver des choses pour prédire, et j'espère que ça va être bien pour quelque chose. Donc, c'est tout de suite. Mais ce que vous faites avec ça, c'est un peu pour vous. Vous pouvez utiliser votre imagination, parce que le truc que vous envoyez à cet oracle, c'est toutes les choses. Ça pourrait être une fonction de valeur dans un problème de renforcement. Vous savez, ça pourrait être, vous pouvez juste être une source d'imperfecture de data, et vous voulez que les gens puissent trouver la vraie chose. Il y a toutes les choses que les crawlers, comme l'on les appelle sur l'autre côté, peuvent faire. Ils peuvent vous donner de données. Ils peuvent exploiter tous les modèles que vous n'avez jamais entendu. Ils peuvent créer des sub-tasques pour eux-mêmes, etc. Ils peuvent faire toutes les choses. Donc, évidemment, vous pouvez prédire avec des valeurs absolues par ce service de service, qui, bien sûr, c'est gratuit. Vous pouvez prédire le speed de trafic absolu, et vous avez un estimate distributionnel de cela. Vous pouvez prédire des changements et des valeurs, ce qui, parfois, est plus utile. Vous pouvez, en fait, prendre des données et squisher, de deux dimensions, par un et obtenir des estimations de copules. Ils sont variés, ils sont très variés. J'ai des exemples de ce qui est faktible. Vous pouvez créer des modèles sur sur which you could send fake data in, this is a simulated epidemic data from an agent model, I sent into it. And yeah, so that's it. I won't be going to details because it's in the docs about how you can change your algorithm. If you want to participate on that side of the network, instead I'd simply invite you to poke around and play with it and I'll call it. On va très rapidement vous montrer l'application live. On a encore un moment. On va voir. Donc, c'est l'application live. C'est l'application de l'application. Si vous avez décidé de donner votre algorithme open source, ou l'application close source, pour ce qui concerne le monde, vous pouvez voir que ici, mon algorithme est essayant de prétendre toutes les choses différentes. C'est une série de temps très étrange, avec beaucoup de zéros. C'est la façon de la communauté, la fonction distribution qui a été produite par tous ces algorithmes ici, sur la gauche, qui sont tous compétents. Bouze-Leach est le meilleur algorithme. Ils font des prédictions sur différents horizons. Comme vous pouvez le voir. Et c'est le cas. Si vous bougez sur la liste des streams ici, vous pouvez voir toutes les choses randomes que les gens tentent d'utiliser pour prétendre des choses financières. C'est une série d'interessants. Qu'est-ce que c'est? Ce n'est pas très bien. La série d'interessants arrive tout le temps. Et, vous savez, certains sont plus intéressants que d'autres. C'est le temps d'émergence à l'émergence d'une salle d'émergence, par exemple, qui a été préditée par ces algorithmes qui sont disponibles pour vous. C'est ça. C'est le projet. C'est un projet ouvert. C'est possible pour quelqu'un d'entre eux de leur propre version de ça. Ou ils peuvent juste choisir celui que j'ai et ma compagnie de manière gracieuse. Le but est que ce qui s'étend et devient un réseau de prédiction ou un plan de prédiction, si vous voulez. Il y a des plateformes d'obviance qui peuvent occuper si tout le monde commence à détenir le logiciel de prédiction de la suite de l'application qu'ils utilisent. C'est ça pour moi. Je vais ouvrir ça aux questions. Merci. Je vais remercier ma question. Qu'est-ce qui serait le meilleur place pour vous contacter si vous avez des questions après ce talk ? Oui. En fait, LinkedIn est assez bon. Je vais juste mettre le link dans la chaine. D'une bonne manière, c'est juste de Google pour la prédiction. Et si vous faites ça, vous trouverez le site, vous trouverez moi, vous trouverez le livre, vous trouverez le contact des détails. On a une chaîne Slack en fait, il y a 1 000 personnes sur une chaîne Slack. Si vous voulez parler de la chaine, vous êtes bienvenus. Ok, et je pense que vous avez le reportage qui est sur le code. Ok, cool. Je vous envisage si vous ne m'avez pas mis, je vous envisage votre reportage de reportage pour notre communauté. Ok, cool. Merci. Je n'ai pas d'autres questions, Yannick. Je pense que nous pouvons ouvrir cette question. Oui. D'un coup, Peter, nous sommes en train de voir où notre crowd peut-être se dévier. Vous êtes devant nous. J'espère que vous pourrez nous faire pour cette heure heure. Nous savons maintenant comment vous allez atteindre si vous devez aller plus tard pour la heure heure heure. Merci, Peter. Et maintenant, le moment que vous avez tous été attendus pour la heure heure est là-bas. Comme ça. J'ai posté le lien ici. C'est là-bas. C'est aussi cliquable. Il devrait être dans la description de cet événement sur YouTube. Alors, le moment que vous avez tous le 5 à 7 virtuel, il y a un lien ici et c'est aussi un lien cliquable dans la description de la vidéo sur YouTube. Donc, on vous y attend. Allez vous chercher un rafraîchissement. Un rafraîchissement aussi divers... Comment dire ? Diverses c'est bien ? Non, divertissants que vous le souhaitez. Et puis, on vous voit lundi prochain pour la soirée de programmation et le mois prochain pour Montréal-Piton 98, notre dernière rencontre mensuelle de l'année. Bonne soirée, tout le monde. Sous-titres réalisés par la communauté d'Amara.org