コード例 #1
0
ファイル: CoucheFullConnecte.cs プロジェクト: andromede76/RNC
        protected override void CreationCouche()
        {
            int IndexPoids;
            var rdm = new Random();


            if (NombreNeurones > 0 || neurones != null)
            {
                neurones       = null;
                NombreNeurones = 0;
            }

            if (NombrePoids > 0 || poids != null)
            {
                poids       = null;
                NombrePoids = 0;
            }

            if (CouchePrecedente != null)
            {
                NombreNeurones = nombreFeatureMaps * featureMapSize.Width * featureMapSize.Height;
                neurones       = new List <Neurone>();
                poids          = new List <Poids>();

                for (int i = 0; i < NombreNeurones; i++)
                {
                    String lb = String.Format("Layer {0}, Neuron {1}", Label, i);
                    neurones.Add(new Neurone(lb));
                }

                rdm         = new Random();
                NombrePoids = NombreNeurones * (CouchePrecedente.NombreNeurones + 1);

                for (int j = 0; j < NombrePoids; j++)
                {
                    String lb        = String.Format("Layer {0}, Poids {1}", Label, j);
                    double initPoids = 0.05 * (2.0 * rdm.NextDouble() - 1.0);
                    poids.Add(new Poids(lb, initPoids));
                }

                IndexPoids = 0;

                for (int j = 0; j < NombreNeurones; j++)
                {
                    Neurone n         = neurones[j];
                    int     connCount = CouchePrecedente.NombreNeurones + 1;
                    n.nombreConnections = connCount;
                    n.AddConnection((uint)0xffffffff, (uint)IndexPoids); // Biais

                    for (int i = 0; i < CouchePrecedente.NombreNeurones; i++)
                    {
                        n.AddConnection((uint)i, (uint)IndexPoids++, (uint)i + 1);
                    }
                }
            }
        }
コード例 #2
0
        protected override void CreationCouche()
        {
            int IndexPoids;
            var rdm = new Random();


            if (NombreNeurones > 0 || neurones != null)
            {
                neurones       = null;
                NombreNeurones = 0;
            }

            if (NombrePoids > 0 || poids != null)
            {
                poids       = null;
                NombrePoids = 0;
            }

            neurones = new List <Neurone>();
            poids    = new List <Poids>();

            if (CouchePrecedente != null)
            {
                NombreNeurones = nombreFeatureMaps * featureMapSize.Width * featureMapSize.Height;
                NombrePoids    = nombreFeatureMaps * (kernelsize * kernelsize * CouchePrecedente.nombreFeatureMaps + 1);

                for (int i = 0; i < NombreNeurones; i++)
                {
                    String lb = String.Format("Layer {0} , Neuron {1}", Label, i);
                    neurones.Add(new Neurone(lb));
                }

                rdm = new Random();

                for (int j = 0; j < NombrePoids; j++)
                {
                    String lb        = String.Format("Layer {0}, Poids {1}", Label, j);
                    double initPoids = 0.05 * (2.0 * rdm.NextDouble() - 1.0);
                    poids.Add(new Poids(lb, initPoids));
                }

                int[] kernelTemplate = CreateKernelTemplate(kernelsize, CouchePrecedente.featureMapSize.Width);

                for (int indexFeatureMap = 0; indexFeatureMap < nombreFeatureMaps; indexFeatureMap++)
                {
                    for (int hauteur = 0; hauteur < featureMapSize.Height; hauteur++)
                    {
                        for (int largeur = 0; largeur < featureMapSize.Width; largeur++)
                        {
                            IndexPoids = indexFeatureMap * ((int)Math.Pow(kernelsize, 2) * CouchePrecedente.nombreFeatureMaps + 1);

                            Neurone n = neurones[largeur + hauteur * featureMapSize.Width + indexFeatureMap * featureMapSize.Width * featureMapSize.Height];
                            int     nombreConnection = ((kernelsize * kernelsize * CouchePrecedente.nombreFeatureMaps) + 1);
                            n.nombreConnections = nombreConnection;
                            // 26 connections
                            n.AddConnection((uint)0xffffffff, (uint)IndexPoids); // Biais

                            for (int k = 0; k < kernelsize * kernelsize; k++)
                            {
                                for (int l = 0; l < CouchePrecedente.nombreFeatureMaps; l++)
                                {
                                    int iNeurons = (2 * largeur + (2 * hauteur * CouchePrecedente.featureMapSize.Width) + kernelTemplate[k] +
                                                    l * CouchePrecedente.featureMapSize.Width * CouchePrecedente.featureMapSize.Height);
                                    int connID = 1 + l + k * CouchePrecedente.nombreFeatureMaps;
                                    n.AddConnection((uint)iNeurons, (uint)IndexPoids++, (uint)connID);
                                    // n.AddConnection((uint)iNeurons, (uint)IndexPoids++, connID);
                                }
                            }
                        }
                    }
                }
            }
        }