Ejemplo n.º 1
0
        private void btnProcess_Click(object sender, EventArgs e)
        {
            NeuronNet net = new NeuronNet(new int[] { 4096, 4096, 4 });
            Bitmap bmp = new Bitmap(picboxReferenceImage.Image);
            float[] inputArray = new float[4096];
            int i = 0;
            for (int x = 0; x < bmp.Width; x++)
            {
                for (int y = 0; y < bmp.Height; y++)
                {
                    inputArray[i] = bmp.GetPixel(x,y).GetBrightness();
                    i++;
                }
            }

            float[] resultArray = net.Process(inputArray);

            picboxLayer0.Image = (Image)net.bmps[0];
            picboxLayer1.Image = (Image)net.bmps[1];
            picboxLayer2.Image = (Image)net.bmps[2];

            textBoxQuad.Text = resultArray[0].ToString();
            textBoxCircle.Text = resultArray[1].ToString();
            textBoxTriangle.Text = resultArray[2].ToString();
            textBoxStar.Text = resultArray[3].ToString();
        }
Ejemplo n.º 2
0
 private void FastCrossIndividuals(NeuronNet individualA, NeuronNet individualB)
 {
     if (individualA.Layers.Count != individualB.Layers.Count)
     {
         throw new Exception("Different layer size. Can not cross");
     }
     for (int i = 0; i < individualA.Layers.Count; i++)
     {
         if (individualA.Layers[i].Neurons.Count != individualB.Layers[i].Neurons.Count)
         {
             throw new Exception("Different neuron size. Can not cross");
         }
         for (int j = 0; j < individualA.Layers[i].Neurons.Count; j++)
         {
             if (individualA.Layers[i].Neurons[j].Dendrites.Count != individualB.Layers[i].Neurons[j].Dendrites.Count)
             {
                 throw new Exception("Different dendrite count. Can not cross");
             }
             for (int k = 0; k < individualA.Layers[i].Neurons[j].Dendrites.Count; k++)
             {
                 double auxDendriteWeightA = individualA.Layers[i].Neurons[j].Dendrites[k].Weight;
                 double auxDendriteWeightB = individualB.Layers[i].Neurons[j].Dendrites[k].Weight;
                 individualA.Layers[i].Neurons[j].Dendrites[k].Weight = auxDendriteWeightB;
                 individualB.Layers[i].Neurons[j].Dendrites[k].Weight = auxDendriteWeightA;
             }
         }
     }
 }
Ejemplo n.º 3
0
 private void DieOfAge(int maxAge)
 {
     if (PopulationList.Exists(x => x.Age > maxAge))
     {
         PopulationList = PopulationList.OrderBy(x => x.Age).ToList();
         NeuronNet firstOld = PopulationList.First(x => x.Age > maxAge);
         int       index    = PopulationList.IndexOf(firstOld);
         PopulationList.RemoveRange(index, PopulationList.Count - index);
         PopulationList = PopulationList.OrderBy(x => x.Error).ToList();
     }
 }
Ejemplo n.º 4
0
 public void Init(GenomeFloatString genome)
 {
     neuronNet = new NeuronNet(new int[]{5, 8, 3}, genome.GetArray());
     sensors = new float[5+1];
     for (int i = 0; i < directions.Length; i++) {
         directions[i].Normalize();
     }
     sensors[5] = 0;
     totalDistance = 0;
     Duration = 0;
     isDone = false;
     initialized = true;
 }
Ejemplo n.º 5
0
        private void learnNN(NeuronNet pNN, List <double> inputs, List <double> expected)
        {
            pNN.Update(inputs);
            var outputs = pNN.Outputs;

            Debug.Assert(outputs.Count == expected.Count);
            double tempFitness = pNN.Fitness;

            for (int ipOutput = 0; ipOutput < outputs.Count; ipOutput++)
            {
                tempFitness += calculateFitness(outputs[ipOutput], expected[ipOutput]);
            }
            pNN.Fitness = tempFitness;
        }
Ejemplo n.º 6
0
 public void Init(GenomeFloatString genome)
 {
     neuronNet = new NeuronNet(new int[] { 5, 8, 3 }, genome.GetArray());
     sensors   = new float[5 + 1];
     for (int i = 0; i < directions.Length; i++)
     {
         directions[i].Normalize();
     }
     sensors[5]    = 0;
     totalDistance = 0;
     Duration      = 0;
     isDone        = false;
     initialized   = true;
 }
Ejemplo n.º 7
0
        private void NearGenesCrossNoOffspring(NeuronNet individualA, NeuronNet individualB)
        {
            if (individualA.Layers.Count != individualB.Layers.Count)
            {
                throw new Exception("Different layer size. Can not cross");
            }
            for (int i = 0; i < individualA.Layers.Count; i++)
            {
                if (individualA.Layers[i].Neurons.Count != individualB.Layers[i].Neurons.Count)
                {
                    throw new Exception("Different neuron size. Can not cross");
                }
                for (int j = 0; j < individualA.Layers[i].Neurons.Count; j++)
                {
                    if (individualA.Layers[i].Neurons[j].Dendrites.Count != individualB.Layers[i].Neurons[j].Dendrites.Count)
                    {
                        throw new Exception("Different dendrite count. Can not cross");
                    }
                    for (int k = 0; k < individualA.Layers[i].Neurons[j].Dendrites.Count; k++)
                    {
                        double auxDendriteWeightA = individualA.Layers[i].Neurons[j].Dendrites[k].Weight;
                        double auxDendriteWeightB = individualB.Layers[i].Neurons[j].Dendrites[k].Weight;
                        double maximum;
                        double minimum;

                        if (auxDendriteWeightA > auxDendriteWeightB)
                        {
                            maximum = auxDendriteWeightA;
                            minimum = auxDendriteWeightB;
                        }
                        else
                        {
                            maximum = auxDendriteWeightB;
                            minimum = auxDendriteWeightA;
                        }
                        individualA.Layers[i].Neurons[j].Dendrites[k].Weight = Rnd.NextDouble() * (maximum - minimum) + minimum;
                        individualB.Layers[i].Neurons[j].Dendrites[k].Weight = Rnd.NextDouble() * (maximum - minimum) + minimum;
                    }
                }
            }
        }
Ejemplo n.º 8
0
        static void Main(string[] args)
        {
            _network = new NeuronNet(2, 3, 1);
            var learning = new BackPropLearning(_network);
            var param    = new BackPropParams()
            {
                CallBack       = cb,
                Eta            = 0.9,
                Alpha          = 0.05,
                ErrorStopValue = 0.05
            };

            learning.TrainNetworkBySample(XorSamples, XorSamples, param);
            //learning.TrainNetworkByBatch(XorSamples, XorSamples, param);

            //var param2 = new RPropParams();
            //var learning2 = new RPropLearning(_network);
            //learning2.Train(XorSamples, XorSamples, param2);

            Console.WriteLine("press enter...");
            Console.ReadLine();
        }
Ejemplo n.º 9
0
 public NaturalDescent(NeuronNet network)
 {
     _network = network;
 }
Ejemplo n.º 10
0
 public void TrainGenetic(int iterationsNumber, int populationSize, int[] shape)
 {
     _geneticAlgorithm = new GeneticAlgorithm(shape, populationSize, Rnd, -1, 1, _inputTrainSet.First());
     _geneticAlgorithm.RunGenerations(iterationsNumber, _inputTrainSet, _outputTrainSet, 4);
     _network = _geneticAlgorithm.PopulationList.First();
 }
Ejemplo n.º 11
0
 public void TrainGenetic(List <double[]> inputTrainSet, List <double[]> outputTarget, int iterationsNumber, int populationSize, int[] shape)
 {
     _geneticAlgorithm = new GeneticAlgorithm(shape, populationSize, Rnd, -1, 1, inputTrainSet[0]);
     _geneticAlgorithm.RunGenerations(iterationsNumber, inputTrainSet, outputTarget, 4);
     _network = _geneticAlgorithm.PopulationList.First();
 }
Ejemplo n.º 12
0
 public void CreateNetwork(int[] shape)
 {
     _network        = new NeuronNet(shape, Rnd);
     _naturalDescent = new NaturalDescent(_network);
 }
Ejemplo n.º 13
0
        private void NearGenesCrossWithOffspring(NeuronNet individualA, NeuronNet individualB)
        {
            NeuronNet offspring  = new NeuronNet(Shape, Rnd);
            double    extraRange = 0.1;

            offspring.SetInputLayer(InputExample);
            if (individualA.Layers.Count != individualB.Layers.Count)
            {
                throw new Exception("Different layer size. Can not cross");
            }
            for (int i = 0; i < individualA.Layers.Count; i++)
            {
                if (individualA.Layers[i].Neurons.Count != individualB.Layers[i].Neurons.Count)
                {
                    throw new Exception("Different neuron size. Can not cross");
                }
                for (int j = 0; j < individualA.Layers[i].Neurons.Count; j++)
                {
                    double auxBiasA = individualA.Layers[i].Neurons[j].Bias;
                    double auxBiasB = individualB.Layers[i].Neurons[j].Bias;
                    double maximumBias;
                    double minimumBias;

                    if (auxBiasA > auxBiasB)
                    {
                        maximumBias = auxBiasA + (auxBiasA * extraRange);
                        minimumBias = auxBiasB - (auxBiasA * extraRange);
                    }
                    else
                    {
                        maximumBias = auxBiasB + (auxBiasA * extraRange);
                        minimumBias = auxBiasA - (auxBiasA * extraRange);
                    }

                    offspring.Layers[i].Neurons[j].Bias = Rnd.NextDouble() * (maximumBias - minimumBias) + minimumBias;

                    if (individualA.Layers[i].Neurons[j].Dendrites.Count != individualB.Layers[i].Neurons[j].Dendrites.Count)
                    {
                        throw new Exception("Different dendrite count. Can not cross");
                    }
                    for (int k = 0; k < individualA.Layers[i].Neurons[j].Dendrites.Count; k++)
                    {
                        double auxDendriteWeightA = individualA.Layers[i].Neurons[j].Dendrites[k].Weight;
                        double auxDendriteWeightB = individualB.Layers[i].Neurons[j].Dendrites[k].Weight;
                        double maximum;
                        double minimum;

                        if (auxDendriteWeightA > auxDendriteWeightB)
                        {
                            maximum = auxDendriteWeightA + (auxDendriteWeightA * extraRange);
                            minimum = auxDendriteWeightB - (auxDendriteWeightA * extraRange);
                        }
                        else
                        {
                            maximum = auxDendriteWeightB + (auxDendriteWeightA * extraRange);
                            minimum = auxDendriteWeightA - (auxDendriteWeightA * extraRange);
                        }
                        offspring.Layers[i].Neurons[j].Dendrites[k].Weight = Rnd.NextDouble() * (maximum - minimum) + minimum;
                    }
                }
            }
            PopulationList.Add(offspring);
        }
Ejemplo n.º 14
0
 public void PaintOutput(NeuronNet network)
 {
     throw new NotImplementedException();
 }