Ces voitures apprennent à conduire sur le circuit. Elles ont des télémtres laser (en quelque sorte) et chacune un reseau de neuron artificiel (2-3 couches selon comme on les compte)
L'algo génétique fonctionne bof, l'évaluation des voitures se base sur le temps pendant lequel elles restent sur la piste. Je les reproduit en moyennant les poids des synapse, pas sûr que ce soit très pertinent.
Quoiqu'il en soit, au bout de quelques dizaines de générations, une voiture devrait effectuer un tour complet.
On peut changer le nombre de laser (ça change le nombre de neurone aussi), la distance de détection et le taux de mutation avec les constantes.
La librairie élémentaire encore, permet de créer facilement des réseaux. Je vais m'atteler à rajouter la rétropropagation de gradiant pour l'apprentissage, maintenant.
A la fin de la dll, en commentaire un petit programme pour visualiser le réseau.
Code sur le forum anglais :
http://www.purebasic.fr/english/viewtop ... 16&t=70209
Edit: modification de l'algo génétique de sélection.
Edit2: ajout du bias aux neurones.
Réseau de neurones artificiel basic: voiture sur un circuit
Réseau de neurones artificiel basic: voiture sur un circuit
Dernière modification par Fig le lun. 19/févr./2018 0:27, modifié 8 fois.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits
Re: Réseau de neurones artificiel basic: voiture sur un circ
Je n'ai pas encore testé, mais c'est le genre de projet qui m'intéresse. Merci pour le partage, dès que je trouve du temps je me plonge dans le code.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Re: Réseau de neurones artificiel basic: voiture sur un circ
ça commence bien , comment tu passes d'une dll à une lib ?
Dans un premier temps tu demandes de créer une dll à partir du premier code source
Save as Dll "NeuralNetLib"
Dans le second code source tu ouvres une lib ?
Import "NeuroNetLib.lib"
J'ai loupé un truc ?
[EDIT]
ok j'ai trouvé, il faut sauver sous le nom 'NeuroNetLib' et pas 'NeuralNetLib'
Je laisse le message pour les benêts comme moi qui appliquent scrupuleusement les instructions sans réfléchir
(la lib est créée en même temps que la dll)
Et maintenant ça marche !! à la 17e génération , pas mal , faut que j'analyse ça maintenant.
Dans un premier temps tu demandes de créer une dll à partir du premier code source
Save as Dll "NeuralNetLib"
Dans le second code source tu ouvres une lib ?
Import "NeuroNetLib.lib"
J'ai loupé un truc ?
[EDIT]
ok j'ai trouvé, il faut sauver sous le nom 'NeuroNetLib' et pas 'NeuralNetLib'
Je laisse le message pour les benêts comme moi qui appliquent scrupuleusement les instructions sans réfléchir
(la lib est créée en même temps que la dll)
Et maintenant ça marche !! à la 17e génération , pas mal , faut que j'analyse ça maintenant.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Re: Réseau de neurones artificiel basic: voiture sur un circ
Bonjour Comtois,
J'ai corrigé le nom de la lib, j'ai inversé anglais et français.
17 genérations, tu as eu de la chance. L'algo génétique d'évolution et la fonction de fitness ne sont vraiment pas adaptés. Je vois des améliorations à faire, mais ce n'est pas le plus important dans l'immédiat (pas plus que les lourdeurs et les choses redondantes et inutiles qui sont dans le code des voitures) la retropropagation de gradient est le plus urgent. (à tester sur l'approximation d'une fonction XOR puis une reconnaissance de caractères manuscrites)
Ce n'est pas un code très didactique au sens où la mémoire n'est pas structurée clairement pour faciliter la lecture. Néanmoins, ce n'est guère complexe à suivre.
Ultimement, il faudrait traiter le réseau comme des matrices et utiliser un shader et opengl afin d'accélérer grandement le traitement d'un nombre faramineux de neurones. Pb nous permet d'écrire des shaders, nous verrons ...
J'ai corrigé le nom de la lib, j'ai inversé anglais et français.
17 genérations, tu as eu de la chance. L'algo génétique d'évolution et la fonction de fitness ne sont vraiment pas adaptés. Je vois des améliorations à faire, mais ce n'est pas le plus important dans l'immédiat (pas plus que les lourdeurs et les choses redondantes et inutiles qui sont dans le code des voitures) la retropropagation de gradient est le plus urgent. (à tester sur l'approximation d'une fonction XOR puis une reconnaissance de caractères manuscrites)
Ce n'est pas un code très didactique au sens où la mémoire n'est pas structurée clairement pour faciliter la lecture. Néanmoins, ce n'est guère complexe à suivre.
Ultimement, il faudrait traiter le réseau comme des matrices et utiliser un shader et opengl afin d'accélérer grandement le traitement d'un nombre faramineux de neurones. Pb nous permet d'écrire des shaders, nous verrons ...
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits
Re: Réseau de neurones artificiel basic: voiture sur un circ
Oh. Je suis intéressé. Très très TRES intéressé.
Re: Réseau de neurones artificiel basic: voiture sur un circ
Dans le sujet sur retropropagation de gradian XOR,AND,OR. Il y a la dernière version de la librairie. http://www.purebasic.fr/french/viewtopi ... =2&t=17169
Je suis actuellement bloqué sur les réseaux de convolution car je ne sais pas propager à l'envers à travers cette @$^¨!§ de couche de convolution. Dès que j'ai trouvé la solution, on s'attaque (vraiment) à la reconnaissance d'images.
Actuellement avec un réseau FC (full connected) et apprentissage supervisé, je n'obtiens que des résultats médiocres sur la reconnaissance de chiffres manuscrits (75% sur MNIST https://en.wikipedia.org/wiki/MNIST_database ).
Je suis actuellement bloqué sur les réseaux de convolution car je ne sais pas propager à l'envers à travers cette @$^¨!§ de couche de convolution. Dès que j'ai trouvé la solution, on s'attaque (vraiment) à la reconnaissance d'images.
Actuellement avec un réseau FC (full connected) et apprentissage supervisé, je n'obtiens que des résultats médiocres sur la reconnaissance de chiffres manuscrits (75% sur MNIST https://en.wikipedia.org/wiki/MNIST_database ).
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Version de PB : 6.00LTS - 64 bits
Re: Réseau de neurones artificiel basic: voiture sur un circ
Bonjour Fig,
si tu n'avais pas jeté un oeil sur ce partage de MiLoo, je te le recommande.
MiLoo a intégré la notion d'échelonnement au sein de chaque neurone.
http://www.purebasic.fr/english/viewtop ... 13&t=68406
si tu n'avais pas jeté un oeil sur ce partage de MiLoo, je te le recommande.
MiLoo a intégré la notion d'échelonnement au sein de chaque neurone.
http://www.purebasic.fr/english/viewtop ... 13&t=68406