Self Driving Car Javascript Course
Le lien : https://www.youtube.com/watch?v=Rs_rAxEsAvI
C’est assez intrigant de voir le fonctionnement : juste en créant un réseau et en laissant le programme choisir des valeurs au hasard, on arrive à construire un mini réseau capable de “conduire” une voiture.
Brain.js
En faisant deux trois recherches, je suis tombé sur cette libraire. Test :) (J’ai pas regardé si elle était récente ou pas …)
Liens :
Premier tuto
- Pour le premier tuto, le lien CDN ne semble plus être à jour :),
- Entrainement :
- Basé sur la propagation,
- Sur la base de données en input, il teste une valeur et mesure l’erreur par rapport à au résultat attendu,
- A chaque boucle d’entraînement, il progresse pour diminuer l’erreur,
- Deux étapes :
- Forward propagation : Prediction. Il tente et regarde s’il arrive,
- Back propagation : Apprentissage. Il mesure l’erreur,
- Boucle entre les différentes étapes pour diminuer l’erreur,
- Si une donnée est manquante : considéré comme 0,
- Dans un des exemples, il faut donner le jour gratuit du restaurant. j’ai fait ca :
const res = restaurants[restaurant];
mais je ne pense pas que ce soit ce qui était attendu … - Normalisation :
- Il est possible d’utiliser des données brutes mais il semble conseillé de “normaliser” en essayant d’avoir des valeurs toujours comprise entre 0 & 1,
- Une fonction de base : valeur / la plus petite de la liste,
- Une autre fonction : A = (value - lowest) / (highest - lowest)
Bilan :
- franchement, je suis un peu déçu. Les exemples s’enchaînent mais sans le pourquoi ?
- Quel est l’intérêt du ML dans le cas présenté ? De plus, dans la plupart des exemples, si la donnée n’est pas dans le données sources, ca marche pas …
- Les exemples s’enchaînent mais au final, pourquoi cette technique plus que celle-ci ?
- Bref pas d’effets wahou ou ah oui quand même contrairement au premier court …
Les autres
- Lien : https://scrimba.com/scrim/c36zkcb,
- Simple mais efficace,
- Pour un paramétrage identique et des données “similaires”, il est possible de passer d’un résultat de 0.82 à 1 …
- Permet d’aller chercher la fonction “toJSON” et “fromJSON” car c’est bien d’avoir entraîné
- Lien : https://stackabuse.com/neural-networks-in-javascript-with-brain-js/
- Lien : https://itnext.io/you-can-build-a-neural-network-in-javascript-even-if-you-dont-really-understand-neural-networks-e63e12713a3 ==> intéressant :)
Mise en place dans la voiture
L’objectif était de remplacer le réseau de neurones de la première vidéo par Brain.js.
Pour ce faire, il est nécessaire d’avoir un jeu de données pour entraîner Brain.js. Afin d’en avoir, j’ai fait des modifications dans le premier programme pour obtenir des couples de données type:
{
"input": [0.5245961661663605, 0.12156825648740721, 0, 0, 0],
"output": "output": [1, 1, 1, 0]
}
L’entrée correspond aux capteurs et la sortie à ce que donne une voiture qui est allé au bout.
Avec les données, j’ai crée un fichier dont le but était de généré un flux JSON permettant de paramétrer Brain.js dans le programme initial.
Alors, je vais le dire tout de suite ==> jamais réussi à doubler la première voiture …
Ce que j’ai fait :
- Obtenu une nouvelle voiture qui fonctionne avec le cerveau de base afin d’avoir plus de donnés,
- Plusieurs tentatives de paramétrages :
- nombre de noeuds,
- niveau d’erreur,
- …
A chaque fois, la voiture commence bien mais fini dans le décor …