Réseau de Neuones

Réseau de Neuones - Algo - Programmation

Marsh Posté le 11-10-2007 à 20:33:40    

Bonsoir, j'ai codé à mes heures perdues un réseau de neurones de type PMC avec un algorithme de correction des erreurs basé sur la retropropagation du gradient. La fonction d'activation est la sigmoïde. J'ai introduit un taux d'apprentissage de 0.2 et le momentum est pour l'instant non évolutif et fixé à 0.9.
 
Je compte l'utiliser pour faire de la reconnaissance de forme basique. J'ai donc testé mon réseau sur une base d'apprentisssage constituée d'images en niveau de gris de 36 pixels. J'ai fait un petit alogrithme pour générer moi même la base d'exemples ( 6 formes avec pour chacune une trentaine d'exemples d'apprentissage bruités à 5% ). J'ai testé le réseau obtenu sur une autre base bruité avec succès. Le réseau consistait en 36 variables d'entrées ( une par pixel ), une couche cachée de 10 neurones et une sortie de 6 neurones.
 
Sur le même principe, j'ai alors généré une base d'images de 256 pixels et j'ai fait travailler mon réseau dessus. J'ai alors 256 variables d'entrée, une couche cachée de 120 exemples et 6 sorties. Là il me pond n'importe quoi avec des sorties toutes autour de 10^-11 voir 10^-23, tant sur mes exemples d'apprentissage que de test !   ( testé pour un nombre d'itérations de 10 à 10000 .... ) :cry: .
 
D'où mes questions:
 
- Lors de l'apprentissage, y a t'il des conséquences à soumettre tous les exemples concernant un caractère de façon linéaire : tous les a puis tous les b puis tous les c ... Cette façon de précéder à t'elle un impact négatif par rapport à celle qui consisterait  à soumettre des caractères de façon aléatoire ( du style un a puis un d puis un b ... ).
 
- Y a t'il une relation, au moins emprique entre le nombre de variables d'entrée du réseau de neurone et le nombre d'exemples à soumettre lors de l'apprentissage ?
 
Cordialement  :hello:

Reply

Marsh Posté le 11-10-2007 à 20:33:40   

Reply

Marsh Posté le 14-10-2007 à 18:17:56    

La longueur de mon premier message en ayant probablement rebuté plus d'un, je me permet un up déguisé pour espérer obtenir la réponse à cette question:
 
 Lors de l'apprentissage, y a t'il des conséquences à soumettre tous les exemples concernant un caractère de façon linéaire ?
 
Cordialement

Reply

Marsh Posté le 14-10-2007 à 20:27:56    

Fait voir le code  

Reply

Marsh Posté le 22-11-2007 à 21:26:29    

Je pense que ta couche cachée contient beaucoup de neurones, du coup ton réseau n'arrive pas a généraliser ce qu'il apprend, ce qui fait qu'il te sort un peu n'importe quoi.
 
Tu a essayé avec genre 5-6 neurones en cuoche cachée? histoire de voir ce que ca donne.
Sinon analyse l'evolution de la convergence du reseau lors de l'apprentissage ça te permettra pitetre de voir ce qui cloche.
 
Au niveau de l'ensemble d'apprentissage, ton réseau peut eventuellement "oublier" les caractéristiques qu'il a pu apprendre si tu lui présente les exemples par paquet similaires (d'apès la littérature), donc a toi d'adapter ce que tu lui présente lors de l'apprentissage pour que les caractéristiques qui t'intéressent ne soient pas oubliées. (je supose que donner les exemple de façon aléatoire plutot que par groupe similaires doit fonctionner par exemple).


---------------
You can't start a fire with moonlight
Reply

Marsh Posté le 11-12-2007 à 03:12:09    

Lors de l'apprentissage, y a t'il des conséquences à soumettre tous les exemples concernant un caractère de façon linéaire ?
> oui, envoie tous les exemples de façon aléatoire, et plusieurs fois
 
- Y a t'il une relation, au moins emprique entre le nombre de variables d'entrée du réseau de neurone et le nombre d'exemples à soumettre lors de l'apprentissage ?
> ben, tu as un certains nombre de bits en entrée, et la couche cachée en contient aussi. Le réseau ne peut apprendre plus des exemples que tu lui donne que ce qu'il peut stocker dans ces couches. Si le réseau est sous-dimensionné il oubliera le début de l'apprentissage. S'il est sur-dimensionné, il sort n'importe quoi comme résultat. Si tu te trouve dans le deuxième cas, tu devrais ajuster la couche cachée, elle doit être trop grosse. Elle devrait être de l'ordre de grandeur du nombre de sorties plutot que du nombre d'entrée. Si tu es dans le premier cas, alors tu devrais agrandir la couche cachée d'un ordre de grandeur supérieur au nombre de sorties. C'est habituellement le deuxième cas qui se présente dans le cas de reconnaissance d'image (couche cachée > couche d'entrée). Essaye qqchose comme 256 -> 512 -> 6.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed