begin process at 2012 05 27 19:02:45
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > RESEAU DE NEURONE ET APPRENTISSAGE

RESEAU DE NEURONE ET APPRENTISSAGE


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Classé sous :reseau, neurone, gradient, algorithme, retropropagation Niveau :Initié Date de création :11/12/2005 Vu / téléchargé :48 524 / 5 212

Auteur : lebojojo

Ecrire un message privé
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

 Description

Salut c'est la premiere fois que je poste ici.J'ai fait un petit prog qui permet de creer un reseau de neurones multicouche et j'y ai appliqué l'algorithme de retropropagation du gradient pour faire l'apprentissage.Si des personnes ont déja travaillé la dessus j'aimerai bien quelques commentaires constructifs pour m'aider à améliorer mon prog.Je voudrais m'en servir afin de faire l'intelligence artificiel d'un jeu de contrée.
Pour l'algorithme d'apprentissage j'ai vu qu'il était possible de soumettre d'abord tous les exemples et ensuite de modifier les coefs(methode dite "batch"),mais malgré de nombreuse recherches sur le net je n'ai pas saisie comment on modifié les coefs après avoir stocké tous les gradients puisques les entrées sont différentes pour chaque exemple.Merci d'avance et veuillez m'excuser si mes prog sont des fois pas très clair.
J'ai utilisé borland pour la compil



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • apprentissage.bpfTélécharger ce fichier [Réservé aux membres club]98 octets
  • apprentissage.bprTélécharger ce fichier [Réservé aux membres club]3 410 octets
  • apprentissage.resTélécharger ce fichier [Réservé aux membres club]876 octets
  • apprentissage.tdsTélécharger ce fichier [Réservé aux membres club]524 288 octets
  • coef.txtTélécharger ce fichier [Réservé aux membres club]Voir ce fichier25 octets
  • entree.txtTélécharger ce fichier [Réservé aux membres club]Voir ce fichier24 octets
  • rdn.~cppTélécharger ce fichier [Réservé aux membres club]19 679 octets
  • rdn.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier19 679 octets
  • rdn.objTélécharger ce fichier [Réservé aux membres club]299 949 octets
  • sortie.txtTélécharger ce fichier [Réservé aux membres club]Voir ce fichier31 octets

Télécharger le zip


 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture MINI SERVEUR HTTP [WINDOWS] par ganjarasta
Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture SECURE REMOTE SHELL [WIN32] par ganjarasta
Source avec Zip Source avec une capture BIEN EXPLIQUE: EXEMPLE DE RESEAU DE NEURONE par acx01b
Source avec Zip Source avec une capture INTELLIGENCE ARTIFICIELLE (RECONNAISSANCE DES FORMES EN TEMP... par ciddu42

Commentaires et avis

Commentaire de vdust le 13/12/2005 04:11:54

C'est une base très intéressante, et le code a le mérite d'être très clair. J'ai cependant plusieurs critiques (constructives je l'espère) :

Ce qui est dommage, c'est que la classe 'reseau' soit aussi liée à l'interface Homme-Machine : les tâches comme la demande d'informations à l'utilisateur, la lecture des données d'un fichier, etc., je les aurais personnellement laissé au 'main', en passant les données récupérées en arguments aux fonctions de la classe. Par exemple, le réseau lit des fichiers prédéfinis : mais un programme utilisant tes classes peut avoir besoin de passer des données d'apprentissage lues dans un autre format de fichier, ou demandées directement à l'utilisateur du programme.

De plus, et je trouve qu'il y a ici une bonne habitude à prendre (et à moindre effort) lorsqu'on veut écrire un code portable, ça serait encore plus clair si chaque classe était définie dans un fichier différent, en utilisant des headers pour les déclarations. Avec une telle structure, le code serait plus facilement réutilisable et te permettrait aussi de mieux voir où doit s'arrêter le rôle de chaque classe.

Sinon, il y a une très grosse optimisation à faire au niveau de tes couches. La séparation en réseau/couches/neurones est une conception très "visuelle". Mais si l'on se place au niveau de la mémoire de l'ordinateur, on constate que les neurones d'une même couche sont éparpillés (chaque neurone étant créé par une instruction "new"), ce qui est catastrophique en terme de temps d'accès aux différents neurones, accès qui sont extrêmements fréquents lors de la rétropropagation ( à la récupération des valeurs des neurones d'une autre couche pour chaque neurone de la couche.). Même si d'un point de vue conceptuel, la séparation est élégante, d'un point de vue calculatoire, il est préférable de "fusionner" le concept de neurone à la classe "couche", en créant des tableaux pour chaque propriété des neurones. Comme dans ce cas, les différentes valeurs se suivent en mémoire, les accès sont beaucoups plus rapide, et le temps d'apprentissage en est très sévèrement amélioré.

Malgré toutes ces critiques, bravo pour ton programme, qui, même si l'interface H-M ne gère aucune erreur de saisie au clavier (entre autres, un caractère non prévu (comme 'a', que j'ai malencontreusement tapé à la place de '1') fait boucler le programme), a le mérite de fonctionner correctement.

Commentaire de dominion le 13/12/2005 13:39:25

J'y connais pas grand chose sur les réseaux de neurones, mais ça m'intéresse beaucoup !
Tu n'aurais pas une ou deux url (ou livre) à me conseiller ?

Au fait, je suppose que ça vient de moi, mais ton programme foire lorsque je fais un apprentissage... Ca serait super si tu écrivait une petite doc sur comment utiliser ton code, et aussi une application pratique de ton algo (je ne sais pas trop si dans le cas des réseaux de neurones il y ai vraiment un réseau designé en fonction de l'application, enfin j'avais compris que c'était assez abstrait et général)

Commentaire de vdust le 13/12/2005 18:49:39

Les réseaux de neurones peuvent servir à plein de choses. En pratique, ils sont utilisés notamment dans tous les problèmes de détection de formes : par exemple la Poste utilise un programme à base de réseaux de neurones pour identifier le code postal (les algorithmes utilisés mettent en oeuvrent un couplage deux types de réseau pour accroître les performances : les perceptrons et les réseaux de Hopfield (voir la source 19075 sur ce site à ce sujet). Les OCR fonctionnent exactement sur le même principe, mais les réseaux utilisés sont dans l'ensemble plus complexes, puisqu'ils sont moins spécialisés (seuls les chiffres de 0 à 9 sont nécessaire pour les codes postaux).
Certaines intelligences artificielles de jeux se servent également de réseaux de neurones.
Chose amusante à tester, on peut aussi faire de la compression d'images avec un perceptron multicouches...

Commentaire de dominion le 13/12/2005 23:35:09

Tout ça, je sais, c'est le côté pratique qui me fait défaut... Je ne trouve pas d'explication pratique d'un réseau de neurones !!! Je veux dire par là une implémentation expliquée et un joli doc qui explique pourquoi cette fonction, pour quoi cette archi etc...

Commentaire de lebojojo le 14/12/2005 16:41:37

Desole de mettre du temps a repondre mais en semaine j'ai pas un acces facile au net.
Pour l'interface H-M en fait c parce que je ne voulais pas faire un prog de reseau de neurones complet mais juste calculer personnellement des coefs pour les adapter a mes besoin:c'est entre autre pour ca que ça n'accepte pas d'autre fichier pour les valeurs et que je n'ai pas trouvé utile de verifier qu'on ne mette pas une donnée incorecte genre un char.
Merci Vdust pour tes critiques et surtout celle concernant la gestion de la memoire de l'ordi.Sinon quel genre de fonctions a tu reussi a faire apprendre et quel nombre de couche a tu utilisé car c'est sur la maniere de bien parametrer un rdn que j'ai des lacunes(et aussi sur comment optimiser mon algorithme d'apprentissage).
Sinon Dominion si tu veux utiliser le programme tu dois avant dans les souces mettre NB_EX a la valeur nombre d'exemple que tu veux presenter, KPRECISION doit etre réglé sur la precision du resultat que tu veux obtenir et sinon tu met un nombre suffisant de coef dans le fichier coef.txt ,sachant que chaque neurone d'une couche est reliée a tous les neurones de la couche suivante.Et enfin dans le fichier entree.txt tu met les valeurs d'entrée et dans le fichier sortie.txt les valeurs de sortie correspondantes et en conservant le meme ordre.Voilà tout .

Commentaire de vdust le 14/12/2005 19:17:11

Tu peux en théorie faire apprendre tout et n'importe quoi à un réseau. J'ai testé la restitution de données après compression sur les couches internes, avec un perceptron à 3 couches. Les résultats sont tels qu'espérés, c'est à dire bon tant que l'échantillon de données tests n'est pas trop grand par rapport au nombre de neurones des couches internes.
Pour le paramétrage de ton réseau, il n'y a pas de règle absolue. Tout dépend ce que tu veux en faire. Le nombre de couches, le nombre de neurones par couches, etc. dépendent du type de résultat que tu veux obtenir. Mais il faut toujours garder à l'esprit l'efficacité du réseau : plus un réseau a de couches et/ou de neurones par couche, plus l'apprentissage et même le calcul du réseau, prennent du temps. A toi d'essayer de trouver le meilleur compromis rapidité/fiabilité de ton réseau suivant l'utilisation que tu souhaites en faire.
Très souvent, le nombre de couches n'excède pas 3. Plus de couches n'améliorent pas les performances du réseau ; cela peut même avoir l'effet inverse.

Commentaire de Bel0 le 14/12/2005 23:44:18

Tout faire apprendre à un réseau de neurones, oui c'est possible, le seul problème c'est qu'il faut un temps considérable pour entrainer ces réseaux. Si tu veux faire un module d'intelligence artificielle pour un jeu, il serait sans doute plus intéressant de faire des algorithmes utilisant la recherche alpha-beta ou A* (astar) . Si tu tiens absolument à utiliser une réseau de neuronnes (multi-layer perceptron:  MLP en anglais), tu devrais t'orienter vers le logiciel WEKA. Il est écrit en java et permet entre autre d'entrainer toutes sortes de réseaux de neuronnes. A partir de  ça, tu devrais avoir plus facile à comprendre comment fonctionne la mise à jour des poids du perceptron ... ce n'est pas la chose des plus facile (pas mal de maths dans l'affaire).

En résumé (mais vraiment très résumé):

Un training set est ensemble de valeurs qui sert à entrainer le réseau. Chaque élément de cet ensemble contient toutes les valeurs d'entrés du réseau et la valeur de sortie du réseau correspondante.

- Au début d'une itération, on possède un ensmeble de poids qui pondère les différents inputs d'un neuronne et ce pour tous les neuronnes.
- A l'aide d'une élément du training set, on peut évaluer l'erreur comise par le réseau (valeur de sortie du réseau pour l'instance - valeur de sortie du réseau en
utilisant les poids actuels).
- Grâce à cette erreur, on peut mettre à jour les poids du réseau de façon à minimiser l'erreur commise (le carré de l'erreur commise en fait): la méthode pour effectuer la minimisation de l'erreur s'appelle en fait gradient descent.
- Recommencer l'itération tant qu'on a une diminution de l'erreur.

A la fin des itérations, on se trouve dans un endroit (un point dans l'espace à n dimensions où n représente le nombre de poids) qui est le minimum LOCAL de la fonction d'erreur dans cette espace à n dimensions. Il faut bien garder à l'esprit que cette règle de mise-à-jour des poids ne trouve qu'un minimum local à la fonction d'erreur. La solution trouvée n'est donc pas LA solution optimale mais une approximation.

Il y a un bouquin utilisé dans les cours d'intelligence artificielle: "Machine Learning" de Tom Mitchell (ISBN 0070428077). Le site du livre propose aussi des transparents comme base pour des cours: http://www.cs.cmu.edu/~tom/mlbook-chapter-slides.html. Le chapitre 4 devrait particulièrement t'intéresser je crois ;)

Commentaire de hitcher le 18/12/2005 12:07:59

J'ai bossser sur les réseaux en finance. Je n'ai pas de conseil a donner sur la programmation, je suis un débutant. Par contre de l'expérience que j'en ai tiré sur MatLab il est très interessant que tu puisse définir les connections neuronne par neuronne et pas couche par couche. Par exemeple si les poids recuent par un neuronne sont [100 100 1]. Tu vois bien que tu peux déconnecter la troisième liaison (=1) qui n'apporte que du bruit, de plus cela evite les phénomenes de surapprentissage liée au Reseaux de neuronnes et rend donc ton perceptron plus parcimonieux.       Pour de la littérature: "Réseaux de neuronnes" Eyrolles de G. Dreyfus, JM. Martinez, M. Samuelides

Commentaire de davidla3000 le 17/01/2006 14:34:37

Je voies que le sujet sur les réseaux de neurones plutôt que l’aspect programmation. Et bien soit parlons en !

l’algorithme de back propagation, est l’un des algorithmes les plus simples (hors demonstration mathématique) et des plus utilisé, il permet faire apprendre par jeux d’exemples (motif d’entré associé a un motif de sortie). c’est un algorithme a base de mémoire associative, avec un apprentissage supervisé. L’utilisation d’un tel algorithme pose néanmoins pas mal de condition pour l’apprentissage (nombre de neurone, coefficient d’apprentissage, nombre de motif en entrée a apprendre, …) a l’époque je suivais les recommandations de yann le cun pour tous ces parametres, mais  surtout pour minimiser l’erreur du réseau.

Il existe en France quelques bon guide pour les réseaux de neurones (les principaux : perceptron, adaline, regle de Widrow-Hoff,  hopfield, aprentissage par pénalité, les fonctions radiales de base, Boltzman et Kohonen) voici une adresse
http://www.up.univ-mrs.fr/Local/umr_6149/umr/page_perso/Touzet/Les_reseaux_de_neurones_artificiels.pdf

Ce sont des modeles classiques en connexionisme, actuellement, on recherche des modeles plus puissant permettant de reconnaître des motifs déformés dans l’espace, mais aussi dans le temps (voir boucle récurentes, le modèle de jordan ou elman, delai time, integrate and fire).

J’ai trouvé un situe ou vous pourrez trouver de la bonne lecture

http://cortex.loria.fr/fr/publications.html

il s’agit de theses, je vous recommande de lire Stéphane DURAND et Nicolas PICAN, ils ont un regard critique sur certain modele.

En ce qui concerne ton programme :

- pas mal l’idée de généré des couches de neurones au besoin, cepedant lorsque tu developpes un réseau suivant un besoin spéficique, par exemple celui utilisé par la poste a une rétine de 16x16, qui pointe sur une couche cache de n cluster (c’est a dire n groupe de neurone identifiant un meme motifs, soit tous les neurones d’un groupe ont les meme poids synaptique.).
- Le nombre de neurones, tu as deja du le lire quelques part, trop de neurones ne permet pas la classification, et pas assez peut faire que ton reseau n’aboutisse pas.
- Les coeficients, il y a plusieurs coeficient la fonction simoïde f(x)=tanh(x) serait plutot f(x)=m*tanh(k*x), Yann le cun modifiait ces parametres (k,m), pour eviter les minimas locaux. Le coefcient alpha pour la correction des poids etait evolutif, un peu comme pour Kohonen. Yann le cun disait qu’il vallait mieux diminuer le seuil de l’erreur du reseaux par serie de motfis présenté et de modifier egalement alpha en consequence, toujours afin d’eviter les minimas locaux.

Commentaire de kaouter le 12/03/2007 14:31:38

la modifications des poids sont automatique au niveau d'algorithme de gradient .il faut saisir d'abord les entreés et initialiser les poids de façon aléatoire et deciver ton réseau ( le modéle ) .puisque le but d'algorithme de gradient est de minimiser léerreur entre la sortie obtenue et la sortie désirée .

Commentaire de anisboujelbene le 07/12/2007 12:10:51

j'essai de compiler ce code avec le microsoft visual studio 6 mais ça marche pas puisque la bibliothèque alloc.h n'existe pas.
mème en remplaçant include <alloc.h par include <malloc.h , il me sort plusieurs erreur
J'ai télécharger de net un fichier alloc.h mais toujours ça compile avec des erreurs

Y a t il des solutions???

Commentaire de nicorenejaque le 04/04/2010 21:12:29

A quoi sert la variable terme_stochastique, qui appartient à la classe neurone ?
Je ne l'ai vu utilisé qu'une seule fois, dans le constructeur...

Commentaire de terkou le 21/04/2010 17:58:48

je m'interresse au reseau de neurones. je cherche à réaliser un systeme de reconnaissance de caractères.
mais je n'arrive pas à lire les fichiers publiés par Jack.
je code en C et utilise Eclipse (Wascana )
merci beaucoup

Commentaire de manittarafik le 23/02/2012 15:15:36

salut je m'interesse au réseau de neurone et je cherche à realiser un perceptron multi couche pour le problème de XOR en java,est ce que vous pouvez me donner quelque site qui peut m'aider.merci d'avance

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

apprentissage avec reseau de neurone [ par resau ] bonsoir, j'ai un problème dans le vecteur caractéristique de réseau de neurone comment l'adapter a mes donnés ,qui sont une matrice qui contient le va matlab algorithme de graham [ par nounou2009 ] je suis nouveaux en matlab quelqu'un peut m'aider et me donner l algorithme de graham(j'utilise une interface graphique) avec matlab urgent j'ai essay clustring en NS2+TCL [ par hakimainfo ] bonjour tout le monde, mon projet de fin d'étude c'est de simuler un algorithme d'auto_organisation des clustrs dans un réseau ad hoc en NS2, j'ai d [BAR]clustring en NS2 [ par hakimainfo ] bonjour tout le monde, mon projet de fin d'étude c'est de simuler un algorithme d'auto_organisation des clustrs dans un réseau ad hoc en NS2, j'ai dé détection de main par réseau de neurone matlab [ par toufti ] salut, une débutante sur Matlab en utilisant le Toolbox neural network recognition tool pour détecter un main jusqu'à maintenant j'ai fait 100 images cherche à inclure un algorithme [ par baster200x ] bonjour tous le mande [^^happy13]; vue que je suis débutant en programmation (en terme générale), j'ai besoin toujours de votre aide, alors algorithme de Shannon [ par chiheb1106 ] SVP je veux avoir le code de compression d'un fichier texte selon l'algorithme de Shannon cherche un algorithme [ par baster200x ] bonjour[^^clinoeil1] je cherche un algorithme nommé Vector Evaluation Genetic Algorithme (VEGA) mais en C/C++, je l'ai déjà en java mais puisque Il e


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales