RESEAUX NEURONAUX : MODELE DE HOPFIELD

MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 - 29 déc. 2003 à 16:03
MaxTB Messages postés 1 Date d'inscription mardi 26 février 2008 Statut Membre Dernière intervention 16 mars 2008 - 16 mars 2008 à 14:33
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/19075-reseaux-neuronaux-modele-de-hopfield

MaxTB Messages postés 1 Date d'inscription mardi 26 février 2008 Statut Membre Dernière intervention 16 mars 2008
16 mars 2008 à 14:33
serai il possible d'avoir un petit sample tout simple montrant comment on l'utilise car je galère un peu...
Merci
romeofr Messages postés 3 Date d'inscription vendredi 4 août 2006 Statut Membre Dernière intervention 11 avril 2007
13 mars 2007 à 12:04
Bonjour,

Je cherche a voir si je peut utiliser le reseau de neurone pour resoudre un probleme d'effectation de ressource. Si c'est possible, informer moi sur la methode a suivre.

Merci!
Raja_Lon_Flatterie Messages postés 1 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 24 août 2006
24 août 2006 à 19:02
Salut,

Je cherche du code pour un réseau de Hopfield A VALEURS CONTINUES..
Absolument introuvable sur le net apparemment !
Code Python préféré, mais vu la rareté du truc je ne ferai pas le diffiçile.

Si quelqu'un connaît un lien? Merci!
stb2680 Messages postés 9 Date d'inscription samedi 4 octobre 2003 Statut Membre Dernière intervention 10 mars 2011
17 mai 2006 à 17:33
Salut,
Ce programme est très interessant, mais comme tu le fais remarqué, assez limité.
Je travaille sur des images de 640*480 en NDG, dc ce type de prog n'est pas utile ici.

Je me tente le perceptron, mais c'est plus dure.

Et t'en es où toi avec lui ?
djmalo Messages postés 1 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 26 février 2006
26 févr. 2006 à 02:42
Ce code n'est pas très exact, en effet il boucle pour ne jamais converger.
cs_tikenjah Messages postés 4 Date d'inscription mercredi 9 juin 2004 Statut Membre Dernière intervention 10 novembre 2005
10 nov. 2005 à 11:30
Joli travaille c'est trop utile en plus tes explication sont claires ;)
Merci AlexFlt !
delfare Messages postés 25 Date d'inscription samedi 27 août 2005 Statut Membre Dernière intervention 13 juillet 2007
9 sept. 2005 à 17:55
bon, si je comprend bien, dans apprendre :
poid[i][j] prend comme valeur le nombre modeles qui ont le pixel i qui est le meme que le pixel j mais je ne comprend pas comment ca peut servir a retrouver a la fin quel est le modele a qui correspond le tableau entree
merci de m'expliquer
nestorfr Messages postés 4 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 12 décembre 2009
26 déc. 2004 à 00:07
es bacan tambien me sirve este codigo alguien que me pueda ayudar a hacer un proyecto de detecion de placas de autos por favor contactarse a nestorricardo20@hotmail.com
o a
nmamaniza@unsa.edu.pe
BumpMANN Messages postés 330 Date d'inscription jeudi 22 mai 2003 Statut Membre Dernière intervention 26 janvier 2009
12 août 2004 à 21:56
Super! nikel, 10/10. ca va me servir ;)
haikoull Messages postés 2 Date d'inscription vendredi 25 juin 2004 Statut Membre Dernière intervention 5 juillet 2004
26 juin 2004 à 17:55
salut, je suis nouveau dans le site!! je suis intéressé par les réseaux de neurones !! en fait j'ai un sujet auquel je doi travailler : "utilisation des réseaux de neurones pour la détection q'une configuration graphique". mais le pb c que je sais pas trop de choses sur les RN.
si vous pouvez me donner qques liens pour la documentation et en particulier pour cette application ( reconnaissance des courbes )!! merci
AlexFlt Messages postés 7 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 11 avril 2004
11 avril 2004 à 17:18
Voila ce n'est pas la version utiliser dans le TPE (celle du TPE était en Visual Basic pour des raison de simplicité)
AlexFlt Messages postés 7 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 11 avril 2004
11 avril 2004 à 16:58
Mon TPe est maintenant terminer. Pour celui-ci j'ai utiliser une petite optimisation du programme. Elle consiste a ne pas traiter les neurones dans un ordre aléatoire mais a traité toute une couche d'un seul coup. Cela permet de gagner en vitesse de "convergeance" et surtout de simplifier le code source.
neocracker Messages postés 35 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 20 février 2009
7 avril 2004 à 20:33
Bonjour,
je pense etre un peut au-retard mais bon
il est sur qu'un programme ne peut pas contenir que se genre de systeme mais AlexFlt parlait de perceptrons multicouches celui mis a la suite du reseau d'hopfield peut permettre de meilleur resultat
voir meme un travail du genre un calcul sans hopfield puis un avec et on prend le meilleur resultat c la qu'un systeme plus classique peut prendre le relais
AlexFlt Messages postés 7 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 11 avril 2004
4 janv. 2004 à 15:55
la dans le cas de ce reseau, le plus facile c'est si l'on a une image en noir et blanc. Mais je pensse que sa marche aussi avec des couleurs mais sa va etre plus dur a transmettre au reseau et il va falloir des millions de neurones. Je ne suis pas un expert en reseau de neurone, (je ne suis que en Terminale et j'ai commençé a m'interressé au reseau de neurone au debut de l'année (scolaire).).
Mais pour la couleur je pensse que le modele de Hopfield n'est pas bon, il faudrais utiliser un perceptron.(il faut que j'en fasse un pour mon TPE donc je le mettrais sur ccpfrance.com quand il sera terminé).
Et desoler pour l'orthographe je rajouterai un s a poid(s), et je vais voir se que je peux faire pour la lisibilité.
cs_Laurent17 Messages postés 1 Date d'inscription jeudi 1 janvier 2004 Statut Membre Dernière intervention 1 janvier 2004
1 janv. 2004 à 20:50
Développeur de logiciel de gestion depuis de nombreuses années, je suis aujourd'hui trés intéressé par ce genre de petites routines permettant d'offrir d'excellentes options dans des applications existantes :-). Je suis peu familiarisé avec ce genre de développement mais aussi au niveau syntaxe du langage utilisé dans ce source. (Ceci dit la transcription dans le langage que j'utilise ne me semble pas être insurmontable).
J'ai cependant compris la technique de comparaison par rapport à des modèles, mais je me pose maintenant la question de la source des données à reconnaitre. En effet si ce source donne une methode de comparaison il faut bien avoir de la "matière" à comparer.
Quels sont alors les méthodes d'acquisition des données à comparer ? Comment peut-on par exemple reconnaitre ensuite un caractère 'noyé' au milieu d'un fichier bitmap ?
Merci de vos lumières et bonne année à tous
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
1 janv. 2004 à 17:49
à mon avis c'est à cause de cette ligne-ci que tu as du avoir 1 ou -1, ceci dit, un short aurait fait l'affaire (signed short int, mais c'est short en court, tiens, bizarre) (et puis, je voudrais pas t'emmerder, surtout pas, mais un bool aurait qd même fait l'affaire avec une macro, comme tu as l'air d'aimer.

poid[i][j]+= egal(Modele[k][i],Modele[k][j]);

une chtite remarque, poids ça prend un s même au singulier, si c'est bien la même orthographe que le poids au sens commun. ds mon dico robert (le gros volume, mais il a qq années mtnt) y a pas poid, ça existe pas.


ah et puis tant que j'y suis, y a un truc que je voulais dire, à propos de la 'mise en page' de ton code. moi en général je mets la définitino de la classe avec toutes ses méthodes et propriétés dans un header, puis les implémentations dans un .cpp. c'est vrmnt pratique parce qu'il suffit de lire le header pr comprendre comment la classe fonctionne (pr le programmeur qui veut l'utiliser, pas forcément svr ce qu'elle a ds le ventre, ce qui n'est pas une bonne chose ds l'absolu mais parfois bien utile)

mais donc ici ben tout est déclaré dans le bloc class{} et (AMHA) ça tue la lisibilité. l'avantage c évidemment d'avoir qu'un seul fichier, mais alors, on peut faire une entorse et mettre les implémentations à la suite du bloc, tjs ds le header, même si c pas vrmnt tt propre (je vois pas pq ce serait faux, c juste une "convention tacite".

vala, c t ennuyeux ce message non? lol
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
1 janv. 2004 à 17:36
Dis, merci pr tes explications mais c impossible que je suive, je sais pas ce que 'poids' veut dire dans ce contexte, j'ai jamais lu d'article à propos des réseaux de neurones donc j'ai pas du tout de vocabulaire.

Et la sorte est de type quoi? oui/non c'est ça ?

je vias qd même lire ton code, c peut etre pas idiot :-P
AlexFlt Messages postés 7 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 11 avril 2004
31 déc. 2003 à 11:00
Oui tu a presque bien compris comment sa marche !!!
(et effectivement des bool sa sufirait mais j'y avais pensser en faisant le code et finalement j'etait revenu a des int je ne sais plus pourquoi je pensse par simplicité pour utiliser -1 et 1 plutot que 0 et 1.

Comment sa marche :

1/L'apprentissage regle tous les poids

2/ A chaque neurone correspond une place du tableau

3/ Chaque neurone calcul sa sortie en fonction de tous les autres neurones:
Sortie [j]= Somme (poid[i] * S[i])
Sortie[j]=sortie du neurone que l'on est en train de traiter
Sortie[i]=sortie du neurone i
poid[i]=poid associé a la liaison i-j

4/ Quand tous les neurones on ete traiter (dans un ordre aleatoire) on reprend au 3/ . Jusqu'a ce que les sortie sont "stable" (ne change plus)
(Hopfield a demontrée que son reseaux converger donc cela devrais se produire)

5/ La sortie du reseau est ensuite la sortie de chaque neurone quand les sorties sont "stable" (ne change plus)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
31 déc. 2003 à 01:23
moi je trouve pas du tout que ça à l'air de servir à rien, je trouve ça plutôt fascinant :-)

je vais te dire assez brièvement ce que j'ai compris, ce serait cool que tu me dises quoi par rapport à ça.

voilà, alors il y a ces modèles, par exemple pr reprendre ton exemple, 160 bool (oui tu as mis int, mais des booléens suffiraient non?), quand le réseau reçoit un tableau de 160 booléens, il demande à tous les néurones (qui corrsepondent chacun à une place du tableau de 160) si c'est potentiellement un 0, un 1, un 2, etc... puisque le neurone 'sait' que si c'est un 0, il doit/ne doit pas être 'allumé' (true). on passe en revue tous les nombres/caractères à reconnaître, et celui qui obtient le meilleur score de conformité est choisi. alors, j'ai gagné? :-P j'ai pas lu ton code, mais c'est à ça que j'ai pensé en lisant ton commentaire.

ciao

Kirua
AlexFlt Messages postés 7 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 11 avril 2004
30 déc. 2003 à 16:10
Je vais voir pour le prog exemple actuellement je travail sur un reseaux type perceptrons multicouche

Concretement ce qu'il apprend sa peut-etre n'importe quoi mais dans le cas des reseau de Hopfield on essais plutot de reconnaitre des forme par exemple si on lui apprend les 26 lettre de l'alphabet on peut realiser une application qui quand on scanne une page du dictionnaire reconnait toutes les lettre et l'enregistre sous forme d'un TXT (concretement ces programmes s'appellent des OCR)

Exemple:
trier les envelope a la poste selon les code postaux :
on a 10 caractere a reconnaitre : 0 1 2 3 4 5 6 7 8 9
il faut donc minimum 0.13*10 Neurones soit 76 on prend 100 Neurone pour simplifier.
nos pattern seront de 10*10 (car 10*10=100 Neurone)
on realise le pattern du 0 puis du 1 , ... et on les apprend o reseau
int modele_a_apprendre[10][100]={{modele du 0},{modele du 1}, ...};
exemple de pattern(pour 160 neurones):

int Trois[160]={
0,1,1,1,1,1,1,1,0,0,
1,1,1,1,1,1,1,1,1,0,
0,1,1,1,1,1,1,1,1,1,
0,0,0,0,0,0,1,1,1,1,
0,0,0,0,0,0,0,1,1,0,
0,0,0,0,0,0,1,1,1,0,
0,0,0,1,1,1,1,1,1,0,
0,0,1,1,1,1,1,1,0,0,
0,0,0,1,1,1,1,1,0,0,
0,0,0,0,0,0,1,1,1,0,
0,0,0,0,0,0,0,1,1,0,
0,0,0,0,0,0,0,1,1,1,
0,0,0,0,0,0,1,1,1,1,
0,1,1,1,1,1,1,1,1,0,
1,1,1,1,1,1,1,1,0,0,
0,1,1,1,1,1,1,0,0,0,
};

ensuite on fait:

notre_reseau.Apprendre(nos_10_modeles, 10);

et voila notre reseau et pres !!!

maintenant pour l'utiliser il faut realiser un pattern de 10*10 d'un chiffre (par exemple un chiffre manuscrit assez ressemblant a un des modeles appris)

ensuite on fait :

notre_reseau.Calcul_Sortie(pattern_du_chiffre_manuscrit);

puis on lit le resultat si notre chiffre manuscrit a reconnaitre été un 3, on auras dans sortie le pattern du chiffre 3 appris au depard (ou un resultat trés proche , beaucoup plus proche que le 3 manuscrit)

comme sa on dirait que sa sert a rien!! mais faut pensser au OCR, reconnaissance de courbe, ... il y a plein d'utilisation
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
30 déc. 2003 à 12:14
Merci c'est mieux ^^ maintenant concretement : il apprends quoi?
Des int simple? si ce n'est que ca il faudra voir autre chose pour en mettre plein els yeux aux correcteur de tpe ^^
Mais bon je ne crois pas avoir compris ce qu'il apprenais ni comment rééllement le faire focntionner je pense qu'un prog exemple serait le mieux !
Merci bcoup et bonen chance !
AlexFlt Messages postés 7 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 11 avril 2004
29 déc. 2003 à 16:52
desoler j'avais oublier ce petit detail de toute façon c'etait une verssion pour attendre la je me suis connecter pour mettre la nouvelle verssion !! (beaucoup plus "pro")
MoDDiB Messages postés 546 Date d'inscription mardi 26 novembre 2002 Statut Membre Dernière intervention 4 mai 2007 1
29 déc. 2003 à 16:03
OK mais on le trouve ou modele.h ??
Rejoignez-nous