Bonjour,
j'aurai besoin de votre aide si c'est possible.
J'ai programme en C++ un reseau de neurone qui utilise la retropropagation du gradient avec la methode batch en C++ (de A a Z).
Mon sert reseau sert a l'approximation de fonctions.
J'utilise la sigmoide comme fonction logistique.
Mon reseau est constitue de 3 couches, avec un neurone en entree, 20 neurones sur la couche cachee, et un neurone en sortie.
J'initialise le biais de la deuxieme couche et celui de la troisieme couche a 0.5, j'initialise les poids a 0.5, je fixe le taux d'apprentissage a 0.9 et je fixe le moment (threshold) a 0.5.
J'initiale la premiere variation des poids (((((Δw(1)) a 0, de meme avec la premiere variation du biais.
Ma population d'apprentissage est la suivante :
entrees : 0.1 ; 0.2 ; 0.5 ; 0.7 ; 0.9
sorties desirees : 0.3 ; 0.6 ; 0.5 ; 0.4 ; 0.8
(les couples d'entrees sorties sont donc (0.1 ; 0.3) ..... (0.9 ; 0.8))
Mon reseau tourne mais j'ai un probleme je ne trouve pas les bons resultats.
J'ai refait les calcul sous excells a la main en essayant de voir ou j'avais pu commettre une erreur dans mon algorithme et malheur de malheur je trouve la meme chose que dans mon programme. Ma conclusion est donc qu'il y a quelque chose que je n'ai pas bien compris a cet algorithme ou alors que mes donnees sont erronnees (ce qui pour le coup m'etonnerai)
Je n'ai aucun moyen de verifier mes resultats, je suis sous linux debian etch, je n'ai pas mathlab je n'arrive pas a faire marcher octivate et quand je lance scilab j'ai un segmentation fault.
Ca fait des semaines que je planche dessus, que je lis tous les tutos, les cours et les bouquins possible que j'ai en stock pour essayer de comprendre ou est l'erreur et je ne trouve pas.
Pour la premiere iteration (les poids n'ont pas encore changes) je trouve le bon resultat : je calcul E qui est egal a un 1/2 de la norme au carre de l'erreur en sortie et ce pour chacunes de mes entrees. Et ensuite je calcul la somme des E de chaque entrees.
Cette somme me donne le resultat suivant : 0.648114 (qui est bon)
Ensuite j'applique les algortihmes de retropropagation. Et je recalcul mes sorties, les E et la somme des E.
Cette deuxieme iterationme donne le resultat suivant pour la somme des E : 0.648082 qui lui n'est pas bon du tout et apres c'est la cata.
Normallement au bout de 3000 iterations je devrait arriver a une erreur de l'ordre de 0.03 et je ne descends pas au dessous de 0.04.
Et ce n'est pas une question de precision en virgule flottante ou du genre, j'ai verifi2, ca m'a pris des heures et ce n'est pas la source du probleme.
Alors voila ma demande : si l'un de vous a un peu de temps a perdre, est-ce qu'il pourrait faire tourner le meme reseau que celui que je teste et me dire si effectivement les resultats sont differents de ceux que je trouve ?
Si c'est le cas, serait-il possible alors que je vous dise comment j'ai compris et programme cet algorithme de retropropragation pour m'aider a debusquer l'erreur ?
Quelle que soit votre reponse merci d'avoir pris le temps de lire mon message
PS : excusez-moi pour les c cedilles qui manquent ainsi que les accents, je suis sur un clavier qwerty
Partager