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 :

Boîte à outils réseau de neurones


Sujet :

Méthodes prédictives

  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 Boîte à outils réseau de neurones
    Bonjour à tous,

    j'ai un doute sur la toolbox de réseau de neurones dans Matlab. En fait, c'est sur les réseaux de neurones en général.

    Je sais que l'on peut utiliser les RN pour faire de la prédiction. Par exemple, je peux essayer de prédire la valeur d'une voiture d'ici à 1 an après avoir entraîné mon réseau avec la variation de son prix pendant les 10 dernières années.

    Mon doute est lié aux fonctions d'activation utilisées (sigmoïde, tangente hyperbolique, etc). Normalement, les valeurs de sortie d'un réseau varient entre 0 et 1 (ou -1 et 1). Alors, comment est-il possible de prédire une valeur qui sort de cet intervalle ?

    je vous remercie en avance.

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut,

    Citation Envoyé par sketter Voir le message
    Normalement, les valeurs de sortie d'un réseau varient entre 0 et 1 (ou -1 et 1). Alors, comment est-il possible de prédire une valeur qui sort de cet intervalle ?
    Ben...
    Si c'est entre 0 et 1, tu multiplies par 30000, et tu as le prix en euros.
    Si c'est entre -1 et 1, tu multiplies par 10000, et tu as la variation par rapport au prix actuel.

    Non?

    Tu l'entraines avec quoi ton réseau? La valeur de sortie sera équivalente au résultats des jeux d'entrainement, donc si tu sais ce que tu lui apprends, tu sais ce qu'il va te sortir.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre régulier Avatar de Bucketpc
    Inscrit en
    Août 2008
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Août 2008
    Messages : 98
    Points : 118
    Points
    118
    Par défaut
    Alors, comment est-il possible de prédire une valeur qui sort de cet intervalle ?
    Comme tu les dis, la valeur doit être entre 0 et 1 ou -1 et 1. pour obtenir une valeur comme ça il faut utiliser la fonction sigmoid ou bien tang comme fonction d'activation sur la couche de sortie.

  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
    Citation Envoyé par Bucketpc Voir le message
    Comme tu les dis, la valeur doit être entre 0 et 1 ou -1 et 1. pour obtenir une valeur comme ça il faut utiliser la fonction sigmoid ou bien tang comme fonction d'activation sur la couche de sortie.
    en fait, j'ai quand-même donné un exemple idiot..hehe

    Mon vrai problème est le suivant : j'ai une matrice d'entrées contenant des températures mesurées par 5 sondes pendant l'année 2008. J'ai un total de 500 observations. Donc, la matrice est T(500,5).

    Comme sortie, j'ai un vecteur avec une fréquence propre de vibration d'un pont, avec 500 observations. Donc, w(500,1). Les fréquences propres varient entre 2 et 3 Hz.

    J'entraîne mon réseau (1 couche cachée avec 10 neurones) en utilisant 60% des observations et je le valide avec 10%. Après, je le test avec les autres 30%.

    Bon, le problème est que pour n'importe quelle combinaison de fonctions d'activation (logsig-tansig, tansig-logsig, logsig-pureline, etc.) mes sorties (les fréquences propres prédites) sont toujours à la bonne échelle (entre 2 et 3 Hz).

    Alors, ce ne devrait pas être entre 0 et 1 où encore entre -1 et 1 à cause des fonctions d'activation ??

    merci en avance

  5. #5
    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
    Salut,

    Précision: Je n'ai jamais utilisé les RdN matlab. Je les ai toujours codé.

    De la manière dont j'ai appris a faire un RdN, les fonctions d'activations type tanh, simoide ... Je ne les utilise que pour la couche cachée. Au niveau de ma couche de sortie la fonction de transfert et l'identité. Si matlab fonction de la même manière, tu peux très bien obtenir obtenir des valeurs de sortie sortant des intervalles [-1 1] ou [0 1] ...

  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 architecture d'un réseau de neurones
    merci Clerq.

    Finalement, j'ai découvert que Matlab fait une sorte de normalisation et de "dénormalisation". C'est pour ça que les sorties ne sont pas entre -1 et 1 (ou 0 et 1), mais sont toujours à la même échelle des entrées...

    Bon, maintenant j'ai un autre doute. Je n'arrive pas à comprendre l'architecture d'un réseau de neurones. Supposons que j'aie une matrice d'entrées avec 50 observations sur 5 caractéristiques (X=50x5). Et, comme sortie, un vecteur quelconque (y=50x1).

    Je veux entraîner un réseau avec une couche cachée ayant 10 neurones.

    L'architecture est donc :

    Couche d'entrée : 5 neurones
    Couche cachée : 10 neurones
    Couche de sortie : 1 neurones.

    Mes 50 observations vont être pondérées par 5 neurones. La sortie de la couche est un vecteur 5x1.

    Après, comment ça se passe pour la couche cachée et, finalement, comment est-il possible d'avoir un vecteur 50x1 en sortie !?!?!

    encore merci !

  7. #7
    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
    Mes 50 observations vont être pondérées par 5 neurones. La sortie de la couche est un vecteur 5x1.
    Les 50 observations ne sont pas pondérées par 5 neurones, chacune des observations, composées chacune de 5 paramètres vont permettre, connaissant le couple observation/résultat d'entrainer le réseau a prédire.
    La sortie ne sera pas un vecteur 5x1, mais un scalaire (->1 neurone en sortie) correspond a l'observation donnée.
    Après, comment ça se passe pour la couche cachée et, finalement, comment est-il possible d'avoir un vecteur 50x1 en sortie !?!?!
    Si en sortie tu as un neurone, tu n'a pas en sortie un vecteur, mais un scalaire.

    En fait, mathématiquement, prenant en compte que tu as:
    En entrée 5 neurones
    En couche cachée 10 neurones
    En sortie 1 neurone

    Tu aura deux matrices de poids :
    L'une entre l'entrée (E) et la couche cachée (H), W_eh, de dimension 5x10
    L'autre entre la couche cachée et la sortie (S), W_hs de dimension 10x1,

    La sortie est alors calculée de la façon suivante :
    E*W_eh (1X5 * 5X10 -> 1X10) = R_eh
    R_eh*W_hs (1x10 * 10x1 -> 1x1 (scalaire)) = R_hs = Y_hat (prédiction).

    Chaque observation est passée dans le réseau pour l'apprentissage, donc a chaque observation son scalaire.
    Il va de soi (mathématiquement), qu'après apprentissage je peux prendre les poids "appris", donc mes matrice W_eh et W_hs, et calculer en bloque mes observations, et la en effet 50x5 * 5x10 -> 50x10; 50x10 * 10x1 -> 50x1 (a chaque observation son scalaire).

  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 Clercq,

    merci beaucoup pour tes explications. Elles m'ont déjà aidé à mieux comprendre comment ça se passe à l'intérieur du réseau.

    j'aurais une dernière (j'espère) petite question. En considérant toujours mon exemple où j'ai une matrice d'entrées X (50 observations, 5 paramètres), un vecteur de sorties y (50 x 1), 10 neurones dans la couche cachée et 1 neurone dans la couche des sorties.

    1) D'après ce que j'ai compris, le réseau est entraîné avec l'ensemble des paires (X,y) tout en même temps et non observation par observation (c'est ça ?)

    2) Bon, si c'est bien ça, chaque neurone de la couche cachée (ayant 5 poids chacun) "reçoit" toutes les 50 observations. Donc, comme sortie pour chaque neurone, j'ai un vecteur (50x5 * 5x1 = 50x1).

    Ensuite, ce vecteur (et aussi ceux des autres neurones) sont multipliés par le neurone de la couche des sorties (ayant 10 poids). Donc, (50x10 * 10x1 = 50x1).

    Ce raisonnement est-il correct ?

    merci !

  9. #9
    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
    Citation Envoyé par sketter Voir le message
    En considérant toujours mon exemple où j'ai une matrice d'entrées X (50 observations, 5 paramètres), un vecteur de sorties y (50 x 1), 10 neurones dans la couche cachée et 1 neurone dans la couche des sorties.

    1) D'après ce que j'ai compris, le réseau est entraîné avec l'ensemble des paires (X,y) tout en même temps et non observation par observation (c'est ça ?)
    Non, justement, dans un réseaux de neurones, qu'il soit en mode batch ou live, les observation sont données au réseau une par une. En effet, tu donne une observation, tu compare la réponse du réseau avec la valeur connu de l'observation, et selon, tu corrige le réseau (modification des poids).
    A chaque donnée apporte au réseau tu corrige l'erreur, ce, jusqu'à convergence de ton réseau.
    Citation Envoyé par sketter Voir le message
    2) Bon, si c'est bien ça, chaque neurone de la couche cachée (ayant 5 poids chacun) "reçoit" toutes les 50 observations. Donc, comme sortie pour chaque neurone, j'ai un vecteur (50x5 * 5x1 = 50x1).
    Les neurones de ta couche cachée n'on pas 5 poids chacun, mais entre ta couche d'entrée, et ta couche cachée tu as "Nombre de dimension de l'entrée multiplier par nombre de neurones dans la couche cachée (dimension de la couche cachée)", soit 5*10 poids = 50 poids.
    Présentant observation par observation, algébriquement, tu as un vecteur ligne 1x5, multiplier par une matrice 5x10, le résultat est un vecteur ligne 1x10.
    La matrice 5x10 est la matrice de poids W_eh, qui contient bien 50 poids.
    Citation Envoyé par sketter Voir le message
    Ensuite, ce vecteur (et aussi ceux des autres neurones) sont multipliés par le neurone de la couche des sorties (ayant 10 poids). Donc, (50x10 * 10x1 = 50x1).
    Le nombre de poids a "apprendre" entre la couche cachée et la couche de sortie est "le nombre de neurones en couche cachée par le nombre de neurones en couche de sortie, soit 10*1 =10.
    Algébriquement, en sortie de couche cachée on a un vecteur ligne 1x10, la matrice de poids W_hs (ici un vecteur colonne) est de taille 10x1 (bien dix poids), on a alors 1x10 * 10x1 -> 1x1.

    Une bonne chose a faire étant de "dessiner" sont réseau et ses matrices pour bien visualiser.

  10. #10
    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 Clercq,

    tout d'abord, mes excuses pour cette réponse tardive. Je tiens à te remercier, car tes infos ont été très utiles.

    merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. interface graphique, réseau de neurones
    Par korp69 dans le forum C++
    Réponses: 19
    Dernier message: 13/11/2006, 13h44
  2. Fenêtre "boîte à outil" au premier plan
    Par Antoine88 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/10/2006, 14h01
  3. Réponses: 2
    Dernier message: 12/06/2006, 16h36
  4. Réseau de neurones - reconnaissance visage
    Par PrAbronsius dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 03/05/2006, 03h38
  5. [WD8] Boîte à outils
    Par Pascal dans le forum WinDev
    Réponses: 2
    Dernier message: 01/03/2005, 21h12

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