// 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"); }