Programmer un réseau de neurones

Résolu/Fermé
xavier - 16 oct. 2004 à 20:05
 SETH - 29 oct. 2010 à 06:11
Bonjour à tous,

Je me suis mis dans l'idée de programmer un réseau de neurones, le problème étant que je ne sais pas par quel bout commencer.

En fait je ne parviens pas à trouver comment programmer une fonction réorganisation du réseau lors d'un apprentissage qui ne foutte pas en l'air tous les apprentissages précédents...
je sais aussi que le mieux pour moi, pour comprendre et apprendre, est d'examiner un programme déjà existant. Disons que j'ai quelques lacunes en matière de création, d'invention...

Qulequ'un a-t-il déjà programmer un tel réseau ? Si oui peut-il me le montrer en exemple ? Connaissez vous des liens de pages mettant en ligne des codes de réseaux ?

Merci de vos réponses.

Xavier.
A voir également:

88 réponses

bonjour
je suis un élève ingénieur de l'ecole nationale d'ingénieurs de Tunis (Tunisie)
je suis entrain de faire un projet sur la prévision de la demande en eau potable en utilisant les reseaux de nuerones
voici un document qui peut etre utile pour vous
33
salut Maher, c'est Dorra j'ai vraiment besoin de votre travail pour mon stage sur la prévision de la demande en eau potable au grand Tunis.Passes moi le document amaaaan
0
Bonjour Maher,
Peux-tu m'envoyer une copie de ton doc sur les rna.
Merci
0
Obeet Messages postés 1766 Date d'inscription jeudi 14 octobre 2004 Statut Modérateur Dernière intervention 17 novembre 2010 30
16 oct. 2004 à 22:54
Salut,
Pour programmer un reseau neuronal, il te faut absolument savoir ce qu'il va faire. Ensuite il te faut ton truc de test pour qu'il apprenne.

Il existe plusieurs type d'algos en fonctions dece que tu veux faire...mais trouver la doc avec google est assez facile :o)


Le TeebObeeT préféré de la moche...
6
C U, things TO TO
0
Salut,


Je viens de voir ton tuto et sa m interesserai bien de programmer un reseau de neurone pour la reconnaissance de caractere mais je sais pas par ou commencer.J ai essayer de trouver de la doc sur google mais pas evident(quel algo ??).
Je souhaite utilisé c++builder ou vb pour le faire/
Apparamment tu à l air de t y connaitre si sa ne te genrai pas de me donner un coup de pousse SVp

je te remercie d avance
5
franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008 5
15 déc. 2004 à 23:21
Obeet a tout a fait raison, mais si ça t'intéresse toujours, contacte-moi (en expliquant exactement ce que tu veux faire), je pourrai te donner 2-3 pistes (surtout sur la partie apprentissage : c'est pas si évident de trouver de la doc bien faite)

Eléctions : Bush filled his SOUl with HOpe
4
Bonjour franky!!

Je voudaris savoir ce que c'est un apprentissage (réseaux de neurones)
zéro mémoire!! on utilise quoi comme algotithme généralement?
Merci
0
franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008 5 > manou_2
25 août 2005 à 10:00
Salut,
Je ne me souviens pas avoir déjà entendu parler d'apprentissage zéro mémoire, c'est d'autant plus bizarre que si ton réseau "apprend" qqch, c'est qu'il a une mémoire. Et cette mémoire, c'est simplement les poids des connexions.

Les algorithmes d'apprentissage, pour un perceptron multi-couches, sont tous basés (à ma connaissance) sur la loi de Hebb, qui exprime le fait que 2 neurones qui travaillent ensemble voient leur liaison se renforcer. Ils sont également tous équivalents à un algorithme de descente de gradient (si tu as fait de la physique, ça doit te parler).
Et si tu veux plus d'informations, l'algorithme type s'appelle tout simplement algo de rétropropagation du gradient, ensuite, il en existe des variantes...
Tout ça doit se trouver sur internet.

J'espère que ça t'aidera,
Franky*
0
rachon Messages postés 1 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 6 décembre 2005 > franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008
6 déc. 2005 à 17:02
salut franky c'est sympa de ta part de vouloir nous aider
on a crée moi et mon pote ce compte pour te contacter et si on ne reussi pas dans la programattion nous sommes dans la merde c'est un TP noté et nous blocquons sur l'algorithme d'apprentissage
le prof ve la methode de descente du gradient

en effet je dois programmer un reseau de neurones
j'ai 4 neurones d'entrées
(1 couche cachée : 3 neuronnes)
1 neurone de sortie (qui prend les valeurs soit 0 soit 1)
il nous faut programmer l'algorithme d'apprentissage (méthode de la descente du gradient) on doit faire cela sur maple ou C++ .
si tu as des exemples peut tu nous les envoyés ou si tu as la solution merci de bienvouloir nous aider
Car le but c'est de tracer la courbe d'erreur en fonction du nombre de neurone de la couche cachée
on atteind impatiament ta réponse
merci
0
franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008 5 > rachon Messages postés 1 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 6 décembre 2005
6 déc. 2005 à 17:33
Salut,

J'espère pouvoir encore vous aider, mais ce n'est pas mon domaine, et j'oublie progressivement comment ça marche.

Déjà, il doit y avoir pas mal de réponses à vos questions dans les autres messages de ce post.

Ensuite, je sais que ça ne rentre pas dans le cadre de votre projet, mais si vous avez accès à Matlab, la toolbox réseaux de neurones est très bien faite (et permettrait de répondre facilement à la question de l'influence du nb de neurones de la couche cachée sur l'erreur).

Sinon, je peux déjà vous donner la réponse (quelle que soit la fonction à approximer) : l'erreur va diminuer progressivement (meilleure capacité d'apprentissage), puis réaugmenter rappidement (sur-apprentissage).

Pour finir, je ne vois pas trop comment vous aider pour la descente de gradient : il doit surement y avoir plein de cours sur internet (
http://fr.wikipedia.org/wiki/R%C3%A9tropropagation
par exemple), donc je pourrais plutôt vous aider pour des détails, mais pas pour expliquer toute la méthode !
En deux mots, la descente de gradient consiste à toujours suivre la pente maximale, entre le résultat voulu et l'endroit où on se trouve, mais elle a un ENORME défaut : elle reste coincée dans les minima locaux ! (voir à ce sujet le "recuit simulé").

Bon courage !
0
zineb > franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008
15 juin 2006 à 15:57
Bonjour,
je suis étudiante et la je fais un stage sur les réseaux de neurone.
on me demande de faire des réseaux de neurone en matlab mais ils n'ont pas la toolbox donc je fais avec BNT une librairie de matlab en libre service.
le probleme c'est que je ne sais pas m'en servir.
je sais que j'ai 2 entrées ,4 cachés,1 sortie.
je suis l'algorithme de retropropagation en feedforward.pourrais tu m'aider?
merci beaucoup
ps : que signifie le terme boite noire.
merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
16 déc. 2004 à 14:48
j'en ai deja codé, et je ne l'ai pas encore mis sur le net, par contre il ya plusieurs api sur sourceforge et c'est un bon début si tu veux lire du code. Nottament, ya une librairie qui s'appelle fann (fast neural network) et il est pas mal.

Par contre, tu ne pourras coder que si tu comprends comment fonctionne un réseau de neurones et donc il te faudra ds un premier temps lire de la doc. Par google, tu trouveras de bons liens ou sur cetesser.

tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
4
Merci pour vos réponses.

En fait je me suis acharné avec un copain, et j'ai réussi à programmer un reseau qui reconnait les caractères ( chiffres et lettres ). Mon problème était au niveau de la fonction modification du reseau, et j'ai trouvé à ce sujet quelques explications sur la méthode de "backpropagation", qui s'est avérée simple et efficace.
Toutefois, je reste ouvert à vos éventuelles propostions de réseaux, histoire de voire quelles autres méthodes que la mienne on peut utiliser pour programmer de l'intelligence !!!

Xavier
3
franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008 5
18 déc. 2004 à 23:39
Effectivement, pour la reconnaissance de caractères, rien ne vaut un réseau à 2 couches avec rétropropagation. C'était surtout pour t'expliquer cette méthode que j'aurais pu t'être utile, parce que c'est effectivement très simple sur le principe, mais pas toujours bien expliqué. D'ailleurs, si la documentation que tu as trouvée est en ligne (et bien faite), tu peux me donner l'adresse ?

Sinon, j'imagine que la reconnaisssance se fait sur une grille, tu peux me dire de combien sur combien, et à quel point c'est efficace ? (est-ce que tu peux reconnaitre toutes les écritures, avec quel pourcentage de réussite, etc.) (enfin si tu as fait les tests, bien sûr !)

Pour ce qui est de programmer de l'intelligence, tout dépend de ton objectif, et surtout de ce que tu appelles intelligence ! Les réseaux de neurones sont très adaptés à la reconnaissance, par exemple, même s'il existe d'autre méthodes de reconnaissance plus efficaces pour certains domaines (Ex reconnaissance de la parole par des réseaux Bayésiens, ou des modèles de Markov en général).
Et puis il existe d'autres architectures de réseaux de neurones que celle des couches ! C'est d'ailleurs très impressionnant : chaque fois que l'on a une nouvelle idée de type de réseau, on découvre un endroit dans le cerveau où la même "astuce" est utilisée (mais je pense que l'inverse est plus vrai encore : les modèles informatiques s'inspirent de la biologie !)

Si tu as des questions précises, n'hésites pas !

Eléctions : Bush filled his SOUl with HOpe
0
donny > franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008
14 févr. 2005 à 22:20
Salut,


Je viens de voir ton tuto et sa m interesserai bien de programmer un reseau de neurone pour la reconnaissance de caractere mais je sais pas par ou commencer.J ai essayer de trouver de la doc sur google mais pas evident(quel algo ??).
Je souhaite utilisé c++builder ou vb pour le faire/
Apparamment tu à l air de t y connaitre si sa ne te genrai pas de me donner un coup de pousse SVp

je te remercie d avance
0
Message a Xavier
je souhaite faire un programme qui reconnait les caracteres d'une matricule sur une image mais je ne sais pas comment m'y prendre ni ou avoir la documentation
si tu as deja un code pret ca serait bien que tu me l'envois
0
sabeur > franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008
28 mars 2005 à 13:30
Tu parle de la reconnaissance de parole par réseau de neurone c'est effectivement mon thème de recherche. Je suis entrain de développer un programm sous MATLAB pour la reconnaissance de mots . Mais je ne sais pas de quoi il est constitué le patron d'entrée de mon réseau. A tu une idée?? Merci quand meme.
0
franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008 5 > sabeur
28 mars 2005 à 14:41
Salut,

J'ai pas très bien compris ta question... Il me semble quand même que l'utilisation de réseaux de neurones pour la reconnaissance de la parole n'est plus très utilisée parce que décevante.
C'est pour ça que je parlais des réseaux bayésiens !
Mais dans tous les cas, il faut traiter tes données : tu ne peux pas faire de la reconnaissance vocale avec un signal de pression (donc ce que renvoit un micro), il faut d'abord découper le signal en fenêtres, calculer les fréquences de base, séparer la parle du bruit, etc. C'est un gros boulot !
0
franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008 5
13 mars 2005 à 23:50
Ah Ah !
Ben oui, mais c'est normal...
Si tu essaies de te mettre à la place de ton réseau, en ne t'accordant que ses capacités, tu vas voir qu'il est très difficile de reconnaitre quelque chose d'aussi compliqué qu'un chiffre !

Mais je t'avais déjà parlé de la nécessité d'un prétraitement des données : c'est là que c'est nécessaire. Ce que tu vas tenter de reconnaitre, ce ne sont plus des chiffres, mais des points particuliers de ta matrice. Par exemple, un "3" possède (en première approximation) deux extrémités dans les cartiers "nord-ouest" et "sud-ouest", et un point de rebroussement à peu près au milieu... Et en deuxième approximation (c'est-à-dire en complexifiant ton réseau, puisque tu lui donne plus de choses à reconnaitre), tu peux ajouter par exemple les "orientations" des extrêmités.

Une fois le prétraitement effectué, tu vas avoir des objets "plus simples" à reconnaitre, dans le sens où ils auront des caractéristiques qui correspondent mieux à ce que peut reconnaitre une carte auto-organisatrice.

Evidemment, le but du prétraitement n'est pas de fournir quelque chose de très précis, sinon, tu serais déjà en train de reconnaitre le chiffre, sans avoir besoin de passer par un réseau de neurones... Donc il ne faut pas accentuer un 3 parce que c'est un 3 et qu'il ne doit pas ressembler à un 8. Ce qu'il faut, c'est vraiment accentuer les caractéristiques des caractères écrits en général, pour pouvoir ajouter une lettre ou # ou $ indifféremment, et que ton réseau (après apprentissage) soit capable de le reconnaitre !

Par contre, je n'ai aucune idée du (des) "meilleur(s)" prétraitements qui existent pour les caractères, mais il y a surement plein d'exemples même sur internet. [Johann, si t'as une idée...]

A+
3
Bonjour
J'ai programmé un réseau de neurones en c++,mais je bloque sur l'interface en c++builder et je trouve pas une bonne documentation pour expliquer comment gérer les classes que j'ai dans mes algorithmes.
merci d'avance.
3
bonjour a tous
j plein de question à poser ;alors la premiére c'est que je cherche un logiciel open source consernant la reconnaissance facial(visage) ...j'ai fait qq recherche et j 'ai trouvé que des logiciels libres et moi j'ai gravement besoin d'un open source....
ensuite je fais des recherches concernant le réseau de neurone ..alors j'ai bien compri le mécanisme de fonctionnement mais j 'ai des choses pas encor évidente pour moi par exemple l'apprentissage est -il applicable pour tous l'informatique bioinspiré ?? çad dans des documents apar les réseaux de neurones ;on trouve l'apprentissage dans le réseau bayésien..
enfin je veux savoir c'est quoi la relation entre l'apprentissage et les lois(exemple loi de hubb)

c'est encore flou pour moi alors je serai reconnaissante si qq1 peut m'aider
merci d'avance
3
matmdx Messages postés 30 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 2 avril 2005 34
5 mars 2005 à 19:25
>>> t'es où ?
Lycée Clémenceau à Nantes...

>>> A propos du surapprentissage :

Comme tu me l'as dit, j'ai essayé de voir au niveau du surapprentissage pour tenter de diminuer sérieusement le coût des calculs, et de garder la propriété généralisatrice des réseau de neurone.
J'ai donc effectué les mesures suivantes : pour des paramètres fixés (paramètres qui me donnent une convergence assez rapide), j'ai fait varier la taille de ma base d'apprentissage (de 10 à 3500 exemples), et j'ai calculé à chaque fois :
- l'efficacité sur la base de test qui ne sert pas à l'apprentissage (1797 exemples)
- l'efficacité sur l'ensemble des exemples dont je dispose (app+test=5626 exemples) (les exemples de la base d'apprentissage servent à la fois à l'apprentissage et au test)

Voici les résultats :

- Nombre d'erreurs sur la base de test :
http://site.voila.fr/updt/tipe/image1.jpg

- Pourcentage d'erreur sur la base de test :
http://site.voila.fr/updt/tipe/image2.jpg

- Nombre d'erreurs pour les 2 bases :
http://site.voila.fr/updt/tipe/image4.jpg

- Pourcentage d'erreur pour les 2 bases :
http://site.voila.fr/updt/tipe/image3.jpg

On remarque bien qu'à un moment les courbes ne décroissent plus trop rapidement (à partir de 1500 exemples environ) et elles évoluent vers un minimum : 80 erreurs environ (toutes bases comprises).
Avec 1500 exemples il y a 100 erreurs sur la base de test et 200 sur les 2.
(Avec les meilleurs paramètres initiaux que j'ai trouvé pour l'instant, j'arrive à 60 erreurs).

Est-ce que cette différence est significative ?
Et au vu des résultats que j'obtiens devrais-je donc, comme tu me le conseillais, me contenter de moins d'exemples ?

Merci, et @+,
Matthieu

NB : quelques résultats :

- Nombre de modifications du réseau en fonction de a (avec 30 neurones cachées et un coeff d'app de 1) :
http://site.voila.fr/updt/tipe/modif_a_30_1.jpg

- Nombre d'erreurs sur la base de test en fonction de a (avec 70 neurones cachées et un coeff d'app de 1) :
http://site.voila.fr/updt/tipe/erreur_a_70_1.jpg

- Nombre de modif en fonction du nbr de neurones cachées (avec a=0.05 et un coeff d'app de 1) :
http://site.voila.fr/updt/tipe/modif_nbr_005_1.jpg

- Nombre d'erreurs en fct du nbr de neurones cachées (avec a=0.05 et un coeff d'app de 1) :
http://site.voila.fr/updt/tipe/erreur_nbr_005_1.jpg

Si jamais vous avez le logiciel de calcul formel Maple que j'utilise pour tracer les courbes et les surfaces, je pourrais mettre aussi en téléchargement ces fichiers (on voit bien mieux avec les surfaces 3D...)
2
1/ tapé nntool au fentre de winow de matlab
2/ sorte un tableau lode input and output
3/ ceat net
in netour the are nam
choisire l'algorithe " retoprobagation de gradien
fonction d'act
l'erreur
nobre de la couch caché
les nobre des neurones dans la couch caché
peut clic sur creat
revien a la tablu
clicé sur lr nom de votre net
sort un tablu de net
clicé sur targed
couché des input
choiser le nomber destrine and errur
clicé sur trien netowrk
ok
2
meme DE problem Programmer un réseau de neurones et
2
Bonsoir!
T'as deviné, je suis dans l'équipe #CENSURE# ! :-)

La laser ne demande pas énorme de traitement: juste pour détecter les distances...

Je vais bosser ton idée...

L'algo que j'espère en tirer n'est pas pour cette coupe car effectivement, pas le temps! mais on espère que le réseau pourra nous servir pour les autres coupe. D'où l'intérêt d'en trouver un qui "apprend" un objet à reconnaitre ... ca la vie n'est pas faite que de quilles....
1
matmdx Messages postés 30 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 2 avril 2005 34
1 avril 2005 à 17:33
Quelques petites nouveautés...

J'ai illuster la procédure d'apprentissage du PMC en fixant tous les poids de mon réseau, sauf 2 poids que je faisait varier... En testant pour chaque couples de poids le nombres d'erreurs sur la base de test, j'obtient de très belles surfaces qui représentent des puits de potentiel (comme on pouvait s'en douter).
Ensuite j'ai fixé les valeurs de ces 2 poids de telle sorte à avoir une grande erreur, puis j'ai lancé l'apprentissage, en ne modifiant que ces 2 poids avec la procédure classique, et en gardant toujour sles autres poids fixes : on peut ainsi représenter l'évolution du réseau sur la surface précédente, et on remarque bien qu'il évolue vers un minimum de potentiel ! (encore heureux, sinon tous les calculs théoriques sur le sujet seraient faux !)

Vous pouvez retrouver ces courbes sur mon mini-site :
http://site.voila.fr/updt/tipe/tipe.htm

Juste un petit problème : j'espérait pouvoir trouver des courbes de potentiel avec plusieurs minimum locaux, mais malheureusement je n'ai pas réussi (et pourtant j'en ai essayé plein...)...

@+,
Matthieu
1
franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008 5
1 avril 2005 à 18:37
Juste un petit problème : j'espérait pouvoir trouver des courbes de potentiel avec plusieurs minimum locaux, mais malheureusement je n'ai pas réussi (et pourtant j'en ai essayé plein...)...

He he ! C'est normal : ça me paraît pas évident avec que 2 paramètres dans un cas aussi "simple". Le problème, c'est que tu ne cherches les optimums que de 2 params parmis un bon paquet... Or tous tes autres paramètres sont déjà fixés sur des valeurs qui "ne laissent pas trop le choix" aux 2 restants ! Il y a "une solution", et le reste marche moins bien !

Alors tu as le choix : soit tu crées un problème avec seulement 2 paramètres, juste pour l'illustration, en t'arrangeant pour qu'il y ait plusieurs minimums locaux (ça me paraît vraiment dur, là...), soit tu reprends ton réseau, mais au lieu de fixer tous les poids sauf 2 "au bon endroit" (ce que tu as du faire...), tu les fixe de manière tout à fait débile, pour bien avoir au moins 2 minimums (ton but, ce n'est plus la performance, c'est d'avoir un joli dessin !). Tu n'as qu'à faire plusieurs essais avec des poids au hasard, tu finiras bien par tomber sur un cas avec 2 min. Le problème, c'est la temps de calcul pour dessiner toute la courbe... Tu peux toujours essayer d'itentifier quelques poids particulièrement importants, et deviner (estimer de manière qualitative) comment les fixer pour qu'il y ait plusieurs possibilités de fixer les autres poids de manière à avoir 2 minimums...

Je pense pas avoir été très clair, je le reconnais ! ;-) Mais j'ai des circonstance atténuantes !!! :-ppp

A+
0
hasnicom Messages postés 2 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 18 février 2008
17 févr. 2008 à 19:44
BONJOUR;je cherche de l'aide s'il vous plait
Avec qu'elle commande on peut réaliser se réseau
http://img1.imagilive.com/0208/ANN3.jpg
1
j'ai besoin des documents sur les reseaux de neurones
1
bonjour a tous
je suis entrain de développer un réseau de neurones et plus précisément une application de prédiction et j'ai trouvé bcp de probléme:
1. prédire quoi?? et j'aimerai bien que sa soit dans le domaine d'informatique
2.quel est le langage que j vais l'utiliser pour créer cet application?le java ou le matlab?? si le java ,alors qui peut me conseiller quelle éditeur de java je pourrai utiliser pour faire des interfaces sans écrire le code source??
3. je vais utiliser la rétropropagation de l'erreur avec la méthode supervisée pour l'apprentissage,alors j veux savoir comment on fait l'apprentissage?? est ce qu'on utilise des bases de donnée pour faire l'apprentissage???
et comment le réseau va apprendre?? théoriquement je sais bien mais pour faire le programme dois-je utiliser des fichiers,des bases ou quoi !!!!!?????

a l'aide :)))
vous voyez que je n'ai pas encore commencé et je suis déjà bloqué ....alors je vous en prie : ))) s'il y a qqc qui peut m'aider je serai vraiment reconnaissante...et merci d'avance
1
cheherazad Messages postés 12 Date d'inscription lundi 7 juillet 2008 Statut Membre Dernière intervention 3 avril 2009
3 avril 2009 à 19:36
bonjour a toi choupinoussa
j'aimerai bien t'aider mais je préfère que tu me donnes ta boite mail c mieu pour t'envoyé d fichié.a plus.
0
Bonjour à tous!

Je suis à la recherche de doc pour programmer un réseau de neurone sur un microcontrôleur. C'est pour faire de la reconnaissance d'objet (et plus précisement, une quille).
Je me documente pas mal sur le net mais je n'ai pas encore trouvé mon bonheur. De plus même soucis pour l'apprentissage...

Merci ;)
@@@@@@@@@
0
franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008 5
20 déc. 2004 à 16:59
OK, mais j'imagine que c'est différentes formes de quilles, que tu dois reconnaitre ? A moins que ce ne soit l'absence où la présence de quille (auquel cas le pb est différent !)... (quille de bateau, ou de jeu, d'ailleurs ?)

La première chose à faire est de décider d'une architecture, mais pour t'aider, il faudrait que tu m'en dises plus long sur le problème : quelle sorte d'entrée tu as, quelle taille de jeu d'apprentissage, etc.

La reconnaissance de forme marche très bien avec les réseaux à couches, mais en fonction du pb, peut-être qu'il faut envisager une solution tout a fait différente. Si tu gardes la solution des réseaux à couches, la méthode d'apprentissage classique s'appelle la rétropropagation (backpropagation en englais, si tu cherches de la doc).

Fonctionnement en qqs mots :
Dans le cas où tu n'as qu'une seule couche (le réseau s'appelle alors un "perceptron"), la méthode d'apprentissage est très simple : il suffit de modifier les poids directement en fonction de l'erreur commise sur chaque test (à condition de savoir quelle réponse il doit donner à chaque fois !).
Mais si tu as plus de couches, le problème est beaucoup plus complexe (on a pendant longtemps cru que ce n'était pas possible, a cause de ça !). Pourtant, une solution très efficace a finit par être trouvée, elle consiste en rien de plus que de modifier les poids de chaque couche en "rétropropageant" l'erreur commise, de la sortie vers l'entrée.

J'en dirai plus sur les détails techniques de l'opération si c'est bien cette méthode que tu dois utiliser, sinon, ça sert à rien de t'embêter avec ça.

Tiens-nous au courant,

Franky

Eléctions : Bush filled his SOUl with HOpe
0
totolito > franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008
20 déc. 2004 à 17:48
Merci bien pour ta réponse!

Je souhaite trouver un moyen pour faire de la reconnaissance de forme pour un robot (e=m6).
Il utilisera une caméra et devra reconaitre si oui ou non une quille est présente à l'image (au choix: l'image est centrée sur la quille suposée grâce à un laser puis l'image est analysée par le réseau de neurones afin de confirmer, ou bien dès qu'une quille est détectée, le réseau envoi les coordonnées de l'objet)

voilà tout!
0
franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008 5 > totolito
20 déc. 2004 à 18:51
Eh ben dis-donc !
T'as les moyens, si tu peux t'offrir un laser pour la coupe E=M6 ! ;-)
T'es dans quelle équipe ? Une école ?

En tous cas, t'embêtes pas, si tu décide d'utiliser un RN pour la reconnaissance, tu n'auras pas assez de puissance ou de temps (calcul !) pour utiliser un laser... Et inversement !

Mais l'idée du RN est très intéressante dans ce cas : l'apprentissage peut être aussi long que tu veux, mais une fois que ton réseau est entraîné, il est relativement rapide.

La première solution qui me vient en tête pour ton problème s'appelle la rétinotopie (toujours si tu veux chercher de la doc) : ça consiste en une carte de reconnaissance type Kohonen (j'explique après), mais l'entrée n'est pas la même pour tous les neurones -> c'est très utile si ta caméra te renvoie beaucoup de pixels, alors que tu veux gagner du temps en n'ayant que "peu" de neurones.
Une seule autre solution concurrente (pour moi ! Mais à vérifier...) : tu peux toujours utiliser une carte de Kohonen, mais avec un très gros prétraitement des données, bien bourrin pour gagner du temps de calcul ensuite.
A la réflexion, c'est même la 2ème solution la meilleure (ne serait-ce que parce que tu n'auras pas le temps d'étudier la première...)
Donc demande-toi ce qui différencie (à tes yeux, mais de manière facilement implémentable !) une quille de tout ce que voit le robot sinon, et traite chaque image de manière à laisser apparaitre cette différence.

Le but est de passer d'une image de (au pif) 300*300 pixels de ta caméra à une image 8*8 par exemple, sans perte d'information capitale (déjà, c'est pas gagné !)

Ensuite, Kohonen :
Commence par rechercher tout ce que tu peux sur "les cartes auto-organisatrices", parce que le cours serait un peu long ici ! Si tu as encore des questions après, je pourrai t'aider.
Ce qu'il faut savoir en gros : le principe de kohonen est une façon d'organiser une carte de neurones (plane dans ton cas) de manière à ce que chacun s'active plus que les autres lorsqu'une certaine configuration se présente, et surtout que 2 neurones proches sur la carte aient des configurations d'activation privilégiées (prototypes) proches !
Mais ce n'est qu'un principe, et il ne faut surtout pas tenter de le programmer tel quel ! En fait, il existe des algorithmes très simples qui simulent cette organisation, et c'est ça qui nous intéresse.

L'énorme intérêt pour toi de cette méthode, c'est qu'elle est "auto-organisatrice", c'est-à-dire qu'elle ne correspond pas à un apprentissage supervisé. Donc tu n'auras pas besoin de développer tout un jeu d'entraînement, mais seulement de présenter au réseau des données (pré-traitées comme expliqué avant), et de le laisser s'organiser.

Ce que tu vas obtenir, c'est une carte de neurones (Ex. 8*8 comme avant, peut-être plus), dans laquelle chaque neurone correspondra à une position de la quille (n'oublies pas de présenter des exemples où il n'y a pas de quille !). Comme tu n'auras pas supervisé l'apprentissage, tu auras toutes les chances que ce soit un réseau "à droite" (selon ton implémentation) qui s'active lorsque la quille est à gauche de l'image, mais quitte à tourner l'image dans tous les sens, les neurones s'activeront exactement suivant la position de la quille sur l'image !

D'où une petite réflexion : si les quilles sont au niveau du sol et que ta caméra ne monte pas ni ne descend, tu n'as pas besoin de créer une carte en 2 dimension, mais seulement 1 ! Et au lieu d'avoir 64 neurones, tu pourras te contenter d'en prendre 8, ou plutôt une quinzaine pour avoir un minimum de précision (sans oublier le cas absence de quille !!!).

Une fois que tu sais quel neurone s'active dans quel cas, ça devient très simple de diriger ton robot.

Par contre, 2 problèmes pour cette méthode :
Elle permet d'obtenir la direction d'une quille mais pas ses coordonnées ! Plutôt que de compliquer l'algo, on peut imaginer que tu places la caméra très haut et "regardant vers le bas" (ou l'inverse !), et on se retrouve avec le pb de la carte en 2 dimensions (par exemple si ton prétraitement fait ressortir la base des quilles, le réseau pourra "replacer" cette base dans l'image).
Pb 2 : si toute une équipe compte sur toi pour faire une méthode de reconnaissance correcte, en temps limité, c'est très chaud, alors fait en sorte qu'une autre méthode de secours soit développée en parallèle.

Je te laisse encore me tenir au courant,

A+

Eléctions : Bush filled his SOUl with HOpe
0
fleurfz > franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008
17 mai 2008 à 20:04
salut,
Svp j'ai besoin de votre aide, je suis entrain de préparer mon projet fin d'etude sur la reconnaissance des visages, et j'utilise normalment le reseau de kohonen, mais j'arriv pas à programer ce reseau(sur c++ builder6) .
j'attend votre réponse(il me reste pas bq de temps)
merci d'avance.
0
lolo > franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008
7 mai 2008 à 10:19
Bonjour,
Je cherche a programmer un reseau de type perceptron a 3 couches pour la reconnaissance de formes. Je souheite le faire sur matlab, avec une couches de neurones d'entrée, une couche cachée et un neurone de sortie. Mon but "premier" est de réaliser l'apprentissage afin que mon réseau puisse reconnaitre des sinusoides de phases et fréquneces aleatoires.Puis on verra pour faire plus compliqué si ca marche!! Je me suis pas mal renseignée sur l'apprentissage par retropagation du gradient mais je coince un peu au niveau de matlab...c'est pas mon fort. Pourriez vous m'aider à coder l'apprentissage, j'ai cru comprendre en lisant les discussions que vous en connaissiez pas mal dans ce domaine.
Merci de votre réponse
0
Bonjour! :o)
Je suis trés interessé par la explications que vous pouvez fournir en ce qui concerne la theoorie et la programmation d'un reseau neuronal.
Si vous avez quelques minutes à perdre, je suis preneur : xxxx@xxxx.xx
Merci d'avance à ceux qui me reponderont! ;o)

Modération : Pour ta sécurité et ta tranquillité, pas de données personnelles dans le pseudo ou le corps des messages. De plus, le principe même d'un forum est de poser publiquement sa question pour que tous profitent d'une réponse publique...
0
franky* Messages postés 165 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 4 décembre 2008 5
23 déc. 2004 à 12:46
Salut,

Pour la théorie comme pour la programmation, le mieux est de trouver de la documentation bien faite, mais je n'en connais aucune qui soit bien présentée, et qui corresponde au niveau débutant... (flemme de chercher, peut-être)

Ensuite, on peut toujours trouver beaucoup de doc sur des points plus précis, car il faut savoir que le domaine réseaux de neurones est très vaste !

Et c'est donc là que je veux en venir : tu peux effectivement t'intéresser à plein de choses différentes pour la théorie, mais si tu veux te mettre à la programmation, tout va dépendre du problème exact qui t'est posé (ou que tu te poses).

Je te donne une explication sommaire des concepts de base qui t'aidera peut-être pour ta recherche de documentation :
Si a la base, le but des RN était d'aider les recherches en neurobiologie, les RN actuels sont bel et bien informatiques, et il n'est pas toujours évident de voir où se situe le lien avec de vrais neurones.
les premiers résultats concluants, trouvés il y a relativement longtemps, concernent le perceptron : c'est donc un type de réseau très simple, et traditionnellement celui par lequel on commence la présentation des RN. Il s'agit d'un réseau "à une couche", c'est-à-dire que tu as des valeurs d'entrée (Ei), tu cherches des valeurs de sortie (Si), et les seules connexions possibles vont d'un Ei à un Si. Son principe de calcul s'appelle la loi de Hebb.

La généralisation du perceptron donne les "réseaux à couches", basés sur la rétropropagation (voir plus haut dans la discussion)

Une architecture différente permet d'aboutir à des réseaux entièrement connectés (je te fait pas de dessin). Il est plus compliqué sur le principe (donc moins utilisé), car il pose le problème de la stabilisation du réseau, qui est mathématiquement plus difficile à déterminer.

Si l'on utilise ces 2 architectures, c'est que ce sont les plus fréquentes dans la biologie, et qu'elles ont une description informatique simple. Mais la première représente plus la notion de fonction, tandis que la seconde correspond plus à un filtrage.

Ensuite, il y a les réseaux non-supervisés, avec en priorité kohonen (encore une fois, voir plus haut) : jusque là, pour entraîner ton réseau, tu devais avoir un jeu d'entraînement composé d'entrées et des sorties désirées associées. Maintenant (en non-supervisé), si tu fournis à ton réseau des exemples de données différentes mais bien réparties, il va avoir tendance à les classer en catégories "proches" (cette notion de proche est le problème principal de cette méthode). Et donc tu n'auras plus à fournir les résultats attendus. Comme on peut s'en douter, c'est très utile pour la reconnaissance de formes et le traitement d'images.

Il existe encore bien d'autres types de réseaux, mais c'est plus du niveau de la recherche que de l'exploitation, pour l'instant.

J'espère que tu t'en sortiras avec ça.

Eléctions : Bush filled his SOUl with HOpe
0
Réponse à Franky.

Pour l'instant, mon réseau reconnait des chiffres dans une matrice 5*7. Mais je suis en train de le modifier pour qu'à la fin il prenne en entrée un bmp de taille définie, ca ne va prendre beaucoup de temps, il suffit juste de changer le nombre de neurones d'entrée.
Pour qu'il reconnaisse aussi les lettres, il suffit que je change le nombre de neurones de sorties ( et les exemples evidemment ).

Il reconnait efficacement apres environ 200 apprentissages de chaque caractère. Il est presque infaillible dans le cas de caractères non douteux. Mais pour les cas litigieux, il dit l'une des réponses possibles ( mais bon, on ne peut pas lui demander de reconnaitre des caractères qui ressemblent à rien ).

Par contre, je n'ai mis qu'un exemple par caractère ( calligraphie carrée ). Je vais tenter d'augmenter le nombre d'exemples et voir le résultat. ( par exemple, le "4" existe sous de nombreuses formes, et je n'en ai rentré qu'une pour l'instant ).

Voilà voilà.
0