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

MATLAB Discussion :

[Neural Networks Toolbox] Récupérer le vecteur des poids (w) de la régression


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut [Neural Networks Toolbox] Récupérer le vecteur des poids (w) de la régression
    bonjour à tous,

    j'ai un problème assez simple de régression à faire : en gros, j'ai une matrice X (20x7) qui contient 20 observations par 7 "variables" dépendantes et un vecteur y (20x1) contenant 20 observations.

    Alors, comment pourrais-je avoir le vecteur des poids (w) de la régression ?

    J'ai essayé comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    net = newff(X,y,10);
    [net,tr] = train(net,X,y);
    Toutefois, je n'arrive pas à avoir les poids...

    Par avance merci.

    Sergio

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Salut,

    apparemment newff et train renvoient un objet contenant la description du réseau de neurones, non? Donc tu devrais trouver dedans un champs contenant les poids du réseau.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Salut,

    Oui tu peux récupérer les poids et les biais comme tu peux aussi les définir avant d'entrainer ton réseau.

    Il faut que tu utilises : "net.IW" pour les poids d'entrée et "net.LW{2,1}" pour les poids entre la couche 2 et la couche 1.

    Un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    % exemple d'un réseau à 3 couches
    % initialisation de l'architecture du RDN
    net=newff(input,output,[20 5],{'logsig','logsig'},'trainrp');
     
    % définition de certains paramètres
    net.trainParam.epochs   = 3000;
    net.trainParam.goal     = 1e-10;
    net.trainParam.min_grad = 1e-10;
     
    % definition des poids et biais utilisés entre la couche 2 et 3 du RDN
    net.LW{3,2}=w; %w est calculé dans mon exemple
    net.b{3}=zeros(3,1);
     
    % entrainement du réseau
    net=train(net,input,output);
     
    % visualisation des poids
    net.IW{1,1} % poids entre la couche 1 et les valeurs d'entrées
    net.b{1}      %biais associé à la couche 1
    net.LW{2,1} % poids entre la couche 1 et 2
    net.b{2}      % biais associé à la couche 2
    net.LW{3,2} % poids entre la couche 2 et 3
    net.b{3}      % biais associé à la couche 3
    bonne continuation

    Christophe
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

  4. #4
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci de ta réponse, Christophe.

    Effectivement, j'ai trouvé les vecteurs de poids et de biais dans ces variables. Par contre, je ne comprend pas pourquoi ils sont égales à zéro !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Si tu as des zéros... tu auras toujours zéro en sortie...

    Peux tu en dire plus ?

    Christophe
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

  6. #6
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Bon, mon problème consiste à trouver tout simplement les poids (w) d'une régression: y = X*w + biais,

    où X est ma matrice d'entrée contenant 20 lignes (observations) et 7 colonnes (variables) et y est le vecteur de sortie avec 20 lignes aussi.

    Donc, j'espère avoir un vecteur de sortie contenant 7 poids + 1 biais.

    Déjà, j'arrive à définir le réseau comme : mais j'ai une erreur quand j'essaie de l'entrainer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [net,tr] = train(net,X,y);
    Cela est dû au fait que le nombre de colonnes de y n'est pas égal à celui de X. Donc, je fais un "repmat(y,1,7)" et, comme sortie, il me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TRAINLM-calcjx, Epoch 0/100, MSE 0/0, Gradient 0/1e-010
    TRAINLM, Performance goal met.
    Le vecteur de biais (50x1) et les poids (50x13).

    Je vois bien que je dois prendre les résultats de la dernière époque, mais je ne suis pas sur que la régression avec le RN marche comme cela.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    J'ai déjà eu le problème que tu as énoncé à propos de l'apprentissage.

    Le tableau d'entrée et de sortie doivent être donner comme ceci :

    colonne : les différents jeu entrée ou sortie
    ligne : le nombre d'entrée ou sortie

    Tu devrais avoir 7 lignes et 20 colonnes pour "X" et 3 lignes et 20 colonnes pour "y".

    Chaque colonne = 1 jeu d'entrée pour "X" et 1 jeu de sortie pour "y"

    Peux-tu déposer tes jeux entrées/sorties (en zip) ?
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

  8. #8
    Futur Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Salut,

    Excuse-moi pour la réponse tardive...

    Je te laisse le fichier contenant les variables :

    X - Matrice d'entrée d'entraînement avec 13 observations et 9 variables
    d - Matrice de sortie avec 13 observations et 2 variables

    J'ai bien compris qu'il faut transposer les matrices, mais je n'arrive pas à comprendre ce qu'il me donne comme les poids de sortie.

    Pour l'instant, tu peux utiliser juste la 1ère colonne de la matrice "d"

    Voici le fichier :

    http://www.filefactory.com/file/a0e2763/n/exemple_zip

    Merci beaucoup !

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    regarde ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    load exempe.mat
     
    size(X',1) % nb entrées
    size(X',2) % nb d'observations des entrées
     
    size(d',1) % nb de sorties
    size(d',2) % nb d'observations des sorties
     
     
    in_exemple = X';
    out_exemple = d';
     
    net = newff(in_exemple,out_exemple,10);  % mise en place de l'architecture du réseau
     
    size(net.LW{1}) % on retrouve le lien entre les dimensions des entrées (9 
    % ici) et le nombre de neurone dans la couche cachée (10 ici)
    % le fait de ne pas retrouver les deux variables précédentes indique que tu
    % as mal définies ton architecture.
     
    size(net.LW{2,1}) % dimensions de la matrice de poids reliant la sortie à 
    % la couche cachée. On doit donc retrouver les nombres de sorties (2 ici)
    % et le nombre de neurones dans la couche cachée (10 ici).
     
    % une erreur aurait été visible si un des chiffres renvoyé par
    % "size(net.blabla)" correspondait au nombre d'observations (nombre de
    % colonne dans tes matrices d'entrées et de sorties.
     
    % tu peux retrouver cette erreur si tu définies l'architecture comme ceci :
    % net=newff(X,d,10);
    % size(net.IW{1}) % tu as du 10 et du 13 mais pas le nombre d'entrées...
    % size(net.LW{2,1} % tu as du 10 et du 13 mais le nombre de sorties...
     
    net = train(net,in_exemple,out_exemple); % apprentissage de ton réseau
     
    % maintenant qu'il est entrainé, tu peux récupérer les poids par les
    % commandes suivantes :
    poids_in = net.IW{1}
     
    poids_out = net.LW{2,1}
     
    % chez moi ça marche (enfin l'entrainement) car vu ton petit nombre
    % d'observation, je doute de la convergence du réseau...
    % il est donc bon de tester cette architecture en utilisant un nouveau jeu
    % de données (entrées/sorties connues : in_test et out_test)
     
    out_reseau = sim(net,in_test);
     
    % puis regarder toi même l'erreur donnée par ton réseau en comparant
    % out_reseau et out_test...
    N'hésites pas si il te reste des zones d'ombres...

    Christophe
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2009, 13h55
  2. Neural networks toolbox
    Par berlilou dans le forum MATLAB
    Réponses: 2
    Dernier message: 24/09/2009, 07h36
  3. [neural network toolbox] définir la précision que l'on veut obtenir
    Par christophe_halgand dans le forum MATLAB
    Réponses: 0
    Dernier message: 27/04/2009, 13h44
  4. Réponses: 2
    Dernier message: 22/04/2009, 23h04
  5. Réponses: 0
    Dernier message: 10/02/2009, 14h08

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