IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Méthodes prédictives Discussion :

programmer la règle de delta généralisée


Sujet :

Méthodes prédictives

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut problème dans la phase d'ajustement des poids
    Bonjour,
    j'utilise le code de retropropagation "on-line" pour programmer un perceptron multicouche, mon réseau est à deux sortie, je me suis bloquée dans l'implémentation sous matlab , toujours il y des bugs concernant les tailles des matrices.
    s'il vous plait aidez moi c'est trop urgent et merci d'avance
    cordialement.

  2. #2
    Membre actif
    Inscrit en
    Mai 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 196
    Points : 202
    Points
    202
    Par défaut
    Pour tout code la première chose à faire est de la poser sur papier, et pour les matrices de faire des petits dessins

    si ma matrice d'entrée est [n d], n : nb data; d : dimension de mes data, alors
    ma matrice Whi (poids entre l'entrée et la couché) est [d h], d : dimension de mes datas, h : nombre de neurones dans ma couche caché, alors
    ma matrice Wij (entre couche caché ou entre la couche caché et la sortie) est [h hn] ou [h s], h : nombre de neurones dans ma couche caché, hn : nombre de neurones dans ma couche caché n, s : nombre de neurones dans ma couche de sortie (nombre de classe).

    Le tout devant être initialisé au début .

    Si tu as des problèmes post ton code que l'on y regarde.

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Salut,

    merci Clercq pour votre réponse, c'est très bien compris.

    En fait mon problème et maintenant est dans le produit de matrices élément par élément dans l'étape d'ajustement des poids :

    voilà la ligne de l'algorithme backprop correspondante :

    delta_HO = error.*blr .*hval;

    dans mon cas le nombre de neur. de soritie est 2, donc erreur est de taille 1x2 -blr est un scalaire (taux d'appr.)
    -hval : la sortie des neur.cachés est de taille 1x40

    il faut bien que ce calcul soit élément par élément parce qu'on cherche le delta de chaque liaison et non pas une somme.

    j'ai donc décidé de construire delta_HO par la concaténation de deux colonnes : la première vient deu produit : error(1,1).*blr.*hval
    la deuxième est résultat de error(1,2).*blr.*hval
    c-à-d que je fait la multiplication de chaque scalaire de "error" à part

    voilà la solution que j'ai trouvé j'espère que quelqu'un me dise si c'est correcte ou pas

    merci d'avance.

    à+

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Salut,

    voilà le code que j'utilise (la phse d'apprentissage) :

    %-----------------------------------
    %--- Learning ------------- ---------
    %-----------------------------------

    %do a number of epochs
    for iter = 1:epochs

    %get the learning rate from the slider
    alr = get(hlr,'value');
    blr = alr / 10;

    %loop through the patterns, selecting randomly
    for j = 1:patterns

    %select a random pattern
    patnum = round((rand * patterns) + 0.5);
    if patnum > patterns
    patnum = patterns;
    elseif patnum < 1
    patnum = 1;
    end

    %set the current pattern
    this_pat = train_inp(patnum,;
    act = train_out(patnum,1);

    %calculate the current error for this pattern
    hval = (tanh(this_pat*weight_input_hidden))';
    pred = hval'*weight_hidden_output';
    error = pred - act;

    % adjust weight hidden - output
    delta_HO = error.*blr .*hval;
    weight_hidden_output = weight_hidden_output - delta_HO';

    % adjust the weights input - hidden
    delta_IH= alr.*error.*weight_hidden_output'.*(1-(hval.^2))*this_pat;
    weight_input_hidden = weight_input_hidden - delta_IH';

    end

    ce code marche bien pour un réseau à une seule sortie
    Mais dans mon cas (deux sortie) j'ai des problèmes, j'ai tellement essayé en mais toujours ça ne marche pas
    Mon problème est dans la ligne en rouge,
    s'il vous plait aidez moi, je suis trop préssée par le temps, merci.

Discussions similaires

  1. Programmer une règle à calcul
    Par mochel dans le forum Android
    Réponses: 5
    Dernier message: 25/02/2013, 10h13
  2. Réponses: 2
    Dernier message: 15/05/2007, 08h39
  3. [Eclipse 3.1.2] Règles de programmation
    Par chris78 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 21/08/2006, 17h02
  4. [Info]Règles pour programmer proprement
    Par pingoui dans le forum Langage
    Réponses: 2
    Dernier message: 16/02/2006, 19h45
  5. Règles de programmation "officielles"
    Par delphim dans le forum Débuter
    Réponses: 2
    Dernier message: 23/03/2004, 18h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo