Example #1
0
        // ReSharper disable once InconsistentNaming
        public static void TrainConvolutionalNN()
        {
            Support.pointParamsList.Clear();
            Support.pointAssesList.Clear();
            instance.currentTask++;
            instance.Invoke(new Action((() =>
            {
                instance.curTaskLabel.Text = instance.currentTask.ToString();
                instance.AssesGenZedGraph.Invalidate();
                instance.ParamsZedGraph.Invalidate();
                instance.accZG.Invalidate();

                instance.currentTaskPB.Minimum = 0;
                instance.currentTaskPB.Maximum = (int)instance.geneticEpochsNUD.Value + 1;
                instance.currentTaskPB.Value = 0;
                instance.currentTaskPB.Step = 1;
            })));



            string dateDirectory = Support.CreateDateTimeDirectory(@"C:\keras\Directory\reports", 0);
            string timeDirectory = Support.CreateDateTimeDirectory(dateDirectory, 1);

            File.Create(timeDirectory + @"\report.txt").Close();

            int             maxParams = 0;
            GeneticProgramm gp        = instance.geneticProgramms.Dequeue();

            if (!instance.genDontClearChB.Checked)
            {
                instance.Invoke(new Action(instance.textBox9.Clear));
            }
            instance.population = new List <ConvolutionalChromosome>(gp._populationSize);

            while (instance.population.Count != instance.population.Capacity)
            {
                instance.population.Add(new ConvolutionalChromosome(gp, random));
                instance.population[instance.population.Count - 1].name        = "Chromosome " + instance.population.Count.ToString();
                instance.population[instance.population.Count - 1].indexNumber = instance.population.Count;
            }

            for (int i = 0; i < instance.population.Count; i++)
            {
                instance.tempAccuracy = instance.tempParameters = 0;
                instance.WriteAdds(0, i);
                instance.UpdateAssessmentParams(instance.population[i], gp, 0);
                File.AppendAllText(@"C:\keras\Directory\Assessment_Statistic.txt",
                                   instance.population[i].accuracy.ToString() + "_" + instance.population[i].paramsCount + Environment.NewLine);
                if (instance.population[i].paramsCount > maxParams)
                {
                    maxParams = instance.population[i].paramsCount;
                }
                Support.DrawParamsGraph(instance.ParamsZedGraph, instance.population[i].accuracy, instance.population[i].paramsCount, maxParams);
                Support.DrawAccGraph(instance.accZG, 0, instance.population[0]._gp._genEpochs, instance.population[i].accuracy);
            }

            Support.UpdateAssesment(instance.population);
            for (int z = 0; z < instance.population.Count; z++)
            {
                Support.DrawAssesGraph(instance.AssesGenZedGraph, 0, instance.population[z]._gp._genEpochs, instance.population[z].assessment, z);
            }

            instance.SortChromosome(instance.population, gp._assessmentIndex, gp._percent);
            //instance.population = SortChromosome(instance.population, gp._assessmentIndex, gp._percent);
            //instance.population.Sort(new ChromosomeComparer4((int)instance.percentNUD.Value));
            //instance.population.Sort(new ChromosomeComparer2());
            //instance.eliteChromosomes.Add(new ConvolutionalNetwork(instance.population[0]));
            instance.WriteConvGeneticOutput(0);
            File.WriteAllLines(timeDirectory + @"\report.txt", instance.textBox9.Lines);
            instance.Invoke(new Action(instance.currentTaskPB.PerformStep));
            // Evolve

            for (int i = 1; i <= gp._genEpochs; i++)
            {
                for (int m = 1; m < instance.population.Count; m++)
                {
                    // ReSharper disable once CompareOfFloatsByEqualityOperator
                    if (instance.population[m].assessment == 0)
                    {
                        string buff = instance.population[m].name;
                        instance.population[m] = new ConvolutionalChromosome(gp, random)
                        {
                            name = buff
                        };
                    }
                    else
                    {
                        if (new Random().Next() < 5)
                        {
                            string buff = instance.population[m].name;
                            instance.population[m] = new ConvolutionalChromosome(gp, random)
                            {
                                name = buff
                            };
                        }
                        else
                        {
                            instance.population[m].MutateConvolutional(gp._crp, gp._mutateRate);
                            instance.population[m].MutateDense(gp._drp, gp._mutateRate);
                        }
                    }
                }


                for (int n = 1; n < instance.population.Count; n++)
                {
                    instance.population[n].assessment = instance.population[n].accuracy = instance.population[n].paramsCount = 0;
                    instance.tempAccuracy             = instance.tempParameters = 0;
                    instance.WriteAdds(i, n);
                    instance.UpdateAssessmentParams(instance.population[n], gp, i);
                    File.AppendAllText(@"C:\keras\Directory\Assessment_Statistic.txt",
                                       instance.population[n].accuracy.ToString() + "_" + instance.population[n].paramsCount + Environment.NewLine);
                    if (instance.population[n].paramsCount > maxParams)
                    {
                        maxParams = instance.population[n].paramsCount;
                    }
                    Support.DrawParamsGraph(instance.ParamsZedGraph, instance.population[n].accuracy, instance.population[n].paramsCount, maxParams);
                }

                Support.UpdateAssesment(instance.population);
                for (int z = 0; z < instance.population.Count; z++)
                {
                    Support.DrawAssesGraph(instance.AssesGenZedGraph, i, instance.population[z]._gp._genEpochs, instance.population[z].assessment, z);
                }

                instance.SortChromosome(instance.population, gp._assessmentIndex, gp._percent);
                //instance.population.Sort(new ChromosomeComparer4((int)instance.percentNUD.Value));
                //population.Sort(new ChromosomeComparer((float)memPriorityNUD.Value, (float)accPriorityNUD.Value));
                //instance.population.Sort(new ChromosomeComparer2());
                //instance.eliteChromosomes.Add(new ConvolutionalNetwork(instance.population[0]));
                instance.WriteConvGeneticOutput(i);
                File.WriteAllLines(timeDirectory + @"\report.txt", instance.textBox9.Lines);
                instance.Invoke(new Action(instance.currentTaskPB.PerformStep));
            }

            Image image = new Bitmap(instance.AssesGenZedGraph.GetImage());

            image.Save(timeDirectory + @"\asses.png");
            image = new Bitmap(instance.ParamsZedGraph.GetImage());
            image.Save(timeDirectory + @"\params.png");
            image = new Bitmap(instance.accZG.GetImage());
            image.Save(timeDirectory + @"\acc.png");
        }