コード例 #1
0
        // Calcul nécessaire pour backprop
        private double sommedelta(Neurone neur)
        {
            int     i;
            Neurone neuronesucc;
            double  somme;

            somme = 0;
            for (i = 0; i < neur.sorties.Count; i++)
            {
                neuronesucc = neur.sorties[i];
                somme       = somme + tabpoids[neur.GetNumero(), neuronesucc.GetNumero()]
                              * neuronesucc.Getdelta();
            }
            return(somme);
        }
コード例 #2
0
        private void Initialisation(int nbEntrees, int nbCouches, int nbNeurCouche)
        {
            int     i, j, k, cpt;
            Neurone neurone;

            // Initialisation des listes avant de poursuivre
            listeneurones = new List <Neurone>();
            tabcouches    = new List <Neurone> [nbCouches];
            for (i = 0; i < nbCouches; i++)
            {
                tabcouches[i] = new List <Neurone>();
            }
            cpt = -1;
            for (i = 0; i < nbEntrees; i++)
            {
                cpt++;
                neurone = new Neurone(cpt, 0);
                listeneurones.Add(neurone);
                tabcouches[0].Add(neurone);
            }
            // On fait les couches cachées :
            for (i = 1; i < nbCouches - 1; i++)
            {
                for (j = 0; j < nbNeurCouche; j++)
                {
                    cpt++;
                    neurone = new Neurone(cpt, i);
                    listeneurones.Add(neurone);
                    tabcouches[i].Add(neurone);
                    // Connexion avec neurones couche précédente
                    for (k = 0; k < tabcouches[i - 1].Count; k++)
                    {
                        tabcouches[i - 1][k].sorties.Add(neurone);
                        neurone.entrees.Add(tabcouches[i - 1][k]);
                    }
                }
            }
            // On fait le neurone de sortie
            cpt++;
            neurone = new Neurone(cpt, nbCouches - 1);
            listeneurones.Add(neurone);
            tabcouches[nbCouches - 1].Add(neurone);
            // Connexion avec neurones couche précédente
            for (k = 0; k < tabcouches[nbCouches - 2].Count; k++)
            {
                tabcouches[nbCouches - 2][k].sorties.Add(neurone);
                neurone.entrees.Add(tabcouches[nbCouches - 2][k]);
            }

            // Initialisation de la matrice des poids synap. : 0= pas de synapse
            int nbneurones = listeneurones.Count;

            tabpoids = new double[nbneurones, nbneurones];
            Random rnd = new Random();

            for (i = 0; i < nbneurones; i++)
            {
                for (j = 0; j < nbneurones; j++)
                {
                    tabpoids[i, j] = rnd.NextDouble() * 2 - 1;
                }
            }
        }