private void TrainOnOurData() { List <double[]> input = new List <double[]>(); List <double[]> output = new List <double[]>(); foreach (var d in Directory.GetDirectories(path_to_sampe_dir)) { int type = int.Parse(d.Last().ToString()); foreach (var file in Directory.GetFiles(d)) { var img = AForge.Imaging.UnmanagedImage.FromManagedImage(new Bitmap(file)); input.Add(imgToData(img)); output.Add(new double[digit_count].Select((p, ind) => ind == type ? 1.0 : 0.0).ToArray()); } } net.Randomize(); double error = double.PositiveInfinity; var inp = input.ToArray(); var otp = output.ToArray(); int iterations = 0; while (error > max_error && iterations < epochs) { error = backprog.RunEpoch(inp, otp) / input.Count; iterations++; } }
private void TrainOnOurData() { List <double[]> input = new List <double[]>(); List <double[]> output = new List <double[]>(); /*foreach (var d in Directory.GetDirectories(path_to_sampe_dir)) * { * int clas = 0; * string planet = d.Split('/').Last(); * switch (planet) * { * case "Меркурий": clas = 1; break; * case "Венера": clas = 2; break; * case "Земля": clas = 3; break; * case "Марс": clas = 4; break; * case "Юпитер": clas = 5; break; * case "Сатурн": clas = 6; break; * case "Уран": clas = 7; break; * case "Нептун": clas = 8; break; * case "Плутон": clas = 9; break; * }*/ foreach (var file in Directory.GetFiles("../../../heap/")) { string path = file.ToString(); int clas = path[path.Length - 5] - '0'; //System.Diagnostics.Debug.WriteLine(path[path.Length - 5]); //System.IO.File.Move(path, path.Insert(path.Length - 4, clas.ToString())); var img = AForge.Imaging.UnmanagedImage.FromManagedImage(new Bitmap(file)); input.Add(imgToData(img)); output.Add(new double[classes_count].Select((p, ind) => ind == clas ? 1.0 : 0.0).ToArray()); } // } // return; if (net == Net.Accord) { accord.Randomize(); } double error = double.PositiveInfinity; var inputArr = input.ToArray(); var outputArr = output.ToArray(); int iterations = 0; if (net == Net.Accord) { while (error > max_error && iterations < epochs) { error = backprog.RunEpoch(inputArr, outputArr) / input.Count; iterations++; } } else if (net == Net.Dimas) { while (error > max_error && iterations < epochs) { error = dimas.RunEpoch(inputArr, outputArr) / input.Count; iterations++; } } }