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 :

Mon réseau de neurones n'apprend rien


Sujet :

Méthodes prédictives

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    J'ai implémenté un petit reseau de neurones en java en utilisant joone.

    J'ai 4 entrées ce sont des entiers et j'ai un entier en sortie (0 ou 1).

    J'ai tenté d'utiliser plusieurs architectures (3 couches linear/sigmoid/simoid, 4 couches ,....), mais mon reseau n'apprend toujours pas , alors qu'il réussi à apprendre le XOR...


    Mon échatillon d'apprentissage est parfaitement cohérent.Il ne contient aucune érreur.
    On peut facilement faire une fonction qui match à 100% avec l'échantillon d'apprentissage en faisant Si A<5 && B>8 alors sortie=0 else ...

    où est le problème ?

    Comment faire pour trouver la bonne architecture ???


    merci

    PS : je suis un noob en RNA

    un extrait de l'échantillon de ce que je veux lui faire apprendre :

    {4,6,1,0,1},
    {4,6,2,0,1},
    {4,6,3,0,1},
    {4,6,4,0,0},

    {4,5,1,0,1},
    {4,5,2,0,1},
    {4,5,3,0,0},
    {4,5,4,0,0},

    {3,6,1,0,1},
    {3,5,1,0,1},
    {3,5,2,0,0},
    {3,4,1,0,,1},
    {3,4,2,0,0},
    {3,3,1,0,1},
    {3,2,2,0,0},

    ....

    les 4 1er valeurs sont des entrées, la 5em valeur est la sortie.


    J'ai 4 neurones d'entrée avec 1 sigmoide, 4 neurones cachés avec 1 sigmoide, 1 neurone de sortie avec 1 sigmoide.

    J'ai un mis un learning rate de 0.4 et un momentum de 0.9.

    après 10000 apprentissages , le reseau me sort toujours un résultat proche de 1 quelquesoit ce que je lui donne en entrée .

    Où est le problème ???

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Il faut peut-être que je fasse 2 neurones de sortie ???

    personne pour m'aider ?

  3. #3
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    On peut facilement faire une fonction qui match à 100% avec l'échantillon d'apprentissage en faisant Si A<5 && B>8 alors sortie=0 else ...
    Quelque chose m'échappe: pourquoi faire un réseau de neurones si tu as déjà un algo qui te donne l'état de la sortie en fonction des entrées
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  4. #4
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 860
    Points
    11 860

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par SpiceGuid Voir le message
    Quelque chose m'échappe: pourquoi faire un réseau de neurones si tu as déjà un algo qui te donne l'état de la sortie en fonction des entrées
    J'ai prix un extrait de l'échantillon que je veux faire apprendre pour faire un test,
    mais mon échantillon complet est trop compliqué pour être traduit en un algo.

    sinon il est évident que je ne m'embêterai pas à utiliser un RNA

    Citation Envoyé par alp
    Tu as lu mon article sur les RNA ?
    oui je l'ai lu et il est très bien ;-) fait mais très "théorique".

    Peut-être que vous pourrez m'aider si je vous met des extraits de mon code :

    En fait j'ai un problème de classification .

    Pour ma base d'apprentissage :

    J'ai un échantillon assez conséquent qui peut contenir des erreurs.
    C'est pourquoi un RNA me paraît être la meilleur solution.


    Ma base d'apprentissage est un ensemble de vecteurs , par exemple {1,2,4,5,3,1} , le dernier élément de ce vecteurs étant la classification.

    Dois-je "normaliser" ces vecteurs pour qu'ils prennent des valeurs dans [0,1] ?

    J'ai essayé de le faire en divisant chaque valeur par la valeur max mais ça n'a rien changé :/


    Mon réseau de neurone
    C'est un perceptron multicouches avec 1 couche cachées.
    J'utilise l'api joone
    http://www.jooneworld.com/

    Pour la couche d'entrée j'ai 4 neurones avec une fonction d'activation Sigmoide .


    Pour la couche cachée j'utilise 4 neurones avec une fonction d'activation Sigmoide .


    J'ai essayé de mettre 2 neurone,3,4,5,6,12,24 neurone dans cette couche cachées , ça ne change jamais rien

    Pour la couche de sortie, j'ai aussi une fonction d'activation sigmoide .
    J'ai mis 2 neurones car qu'il faut autant de fonction de sortie que de classification mais ça ne change rien :/


    Un extrait de mon code :
    Code java : 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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    ...
    net = new NeuralNet();
    // First, creates the three Layers
    input = new SigmoidLayer();
    hidden = new SigmoidLayer();
    output = new SigmoidLayer();
     
    input.setLayerName("input");
    hidden.setLayerName("hidden");
    output.setLayerName("output");
     
    // sets their dimensions
    input.setRows(4);
    hidden.setRows(4);
    output.setRows(2);
     
     
    net.addLayer(input);
    net.addLayer(hidden);
    net.addLayer(output);
     
    // Now create the two Synapses
    FullSynapse synapse_IH = new FullSynapse();	/* input -> hidden conn. */
    FullSynapse synapse_HO = new FullSynapse();	/* hidden -> output conn. */
     
    synapse_IH.setName("IH");
    synapse_HO.setName("HO");
     
    // Connect the input layer whit the hidden layer
    input.addOutputSynapse(synapse_IH);
    hidden.addInputSynapse(synapse_IH);
     
    // Connect the hidden layer whit the output layer
    hidden.addOutputSynapse(synapse_HO);
    output.addInputSynapse(synapse_HO);
    ...
     
     
     
     
    // Create the Monitor object and set the learning parameters
    monitor = new Monitor();	
    monitor.setLearningRate(0.1);
    monitor.setMomentum(0.9);
    net.setMonitor(monitor);
    monitor.addNeuralNetListener(this);
    MemoryInputSynapse  inputStream = new MemoryInputSynapse();
     
    // The first two columns contain the input values
    inputStream.setInputArray(inputArray);
    inputStream.setAdvancedColumnSelector("1-4");
     
    // set the input data
    net.addInputSynapse(inputStream);
    TeachingSynapse trainer = new TeachingSynapse();
     
    trainer.setMonitor(monitor);
    MemoryInputSynapse samples = new MemoryInputSynapse();
     
    // The output values are on the third column of the file
    samples.setInputArray(inputArray);
    samples.setAdvancedColumnSelector("5,6");
    trainer.setDesired(samples);
     
    // Connects the Teacher to the last layer of the net
    net.addOutputSynapse(trainer);
    net.start();
    monitor.setTrainingPatterns(inputArray.length);	// # of rows (patterns) contained in the input file
    monitor.setTotCicles(8000);		// How many times the net must be trained on the input patterns
    monitor.setLearning(true);		// The net must be trained
    mills = System.currentTimeMillis();
    monitor.Go();					// The net starts the training job


    J'ai choisi cette architecture 3 couches sigmoid/sigmoid/sigmoid car on m'a dit que c'était aproprié pour ce problème.
    Quel que soit ce que je met en entrée de mon RNA après l'apprentissage il me renvoie toujours quel que chose proche de (1,0)

    Where is the problem ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Tjs bloqué ?
    Salut, tjs bloqué sur ce pb ?

    Je pense que la source de ton code doit etre cette page:
    http://lis.fh-aargau.ch/WBSLectures/src/Perceptron.java

    Le perceptron comporte une phase d'apprentissage avant de pouvoir etre efficace. Plutot que de lancer cet apprentissage et de lancer de suite les nouvelles entrées que tu veux lui faire tester, la fonction décrite ds ce lien et tres importante est de voir si ton apprentissage converge ! (sinon ton reseau n'a rien appris de bon)

    Donc teste cette fct (cf lien)

    public void errorChanged(NeuralNetEvent e) {
    Monitor mon = (Monitor)e.getSource();
    long c = mon.getCurrentCicle();
    long cl = c / 500;
    /* We want print the results every 1000 cycles */
    if ((cl * 500) == c)
    System.out.println(c + " cycles remaining - Error = " + mon.getGlobalError());
    }

    Et ensuite selon l'evolution de ton erreur tu peux voir si ton reseau est pret ou pas !

    Si cette etape est bonne, je ne peux t'aider plus, ms essaie peut etre ces valeurs de depart:
    monitor.setLearningRate(0.8);
    monitor.setMomentum(0.3);

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    ok merci Sly ;-)

    Je vais essayer ça et je vous tiens au courant.

Discussions similaires

  1. [Réseau de neurones] Plan pour mon rapport
    Par yagami-psychiatre dans le forum Méthodes prédictives
    Réponses: 0
    Dernier message: 11/05/2015, 18h49
  2. Quelle architecture pour mon réseau de neurones?
    Par matstriker dans le forum Traitement d'images
    Réponses: 9
    Dernier message: 28/05/2008, 14h34
  3. Faire mon réseau
    Par samlepiratepaddy dans le forum Autres Logiciels
    Réponses: 10
    Dernier message: 04/11/2005, 16h11
  4. Installation de Windows XP via le serveur de mon réseau
    Par TheBAT dans le forum Windows XP
    Réponses: 1
    Dernier message: 03/11/2005, 15h34
  5. Surveiller mon réseau
    Par stkam dans le forum Développement
    Réponses: 2
    Dernier message: 03/11/2005, 10h20

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