public bool Training_Loop(Regression training_data, int step_size = 1, int batch_size = 128) { if (step_size <= 0 || batch_size <= 0) { return(false); } if (batch_size > training_data.Length) { batch_size = training_data.Length; } for (int s = 0; s < step_size; s++) { if (!infinite_loop) { if (circle >= max_circle) { return(false); } } if (!ignore_error) { if (total_error <= error_limit) { return(false); } } total_error = 0f; var batch_counter = 0; var batch_limit = batch_size; while (batch_counter < training_data.Length) { var batch_regression = new Regression(); for (var i = batch_counter; i < batch_limit && i < training_data.Length; i++) { batch_regression.Add(training_data.inputs[i], training_data.outputs[i]); } var len = batch_regression.Length; for (var i = 0; i < len; i++) { Training(batch_regression.inputs[i], batch_regression.outputs[i]); total_error += GetError(); } batch_counter += batch_size; batch_limit += batch_size; } circle++; } return(true); }
private void LoadFittedCurve() { if (Points.Count > 0 && _fittedCurve != null) { Regression.Clear(); var result = _fittedCurve.CalcFit(Points.ToList()); result.Points.ForEach(x => Regression.Add(x)); Title = result.Title; SubTitle = $"A : {result.A} , B : {result.B} , R : {result.R}"; } }
public void Training(Regression training_data, int batch_size = 128) { if (batch_size <= 0) { return; } if (batch_size > training_data.Length) { batch_size = training_data.Length; } circle = 0; do { total_error = 0f; var batch_counter = 0; var batch_limit = batch_size; while (batch_counter < training_data.Length) { var batch_regression = new Regression(); for (var i = batch_counter; i < batch_limit && i < training_data.Length; i++) { batch_regression.Add(training_data.inputs[i], training_data.outputs[i]); } var len = batch_regression.Length; for (var i = 0; i < len; i++) { Training(batch_regression.inputs[i], batch_regression.outputs[i]); total_error += GetError(); } batch_counter += batch_size; batch_limit += batch_size; batch_regression.Dispose(); } if (!infinite_loop) { if (circle >= max_circle) { break; } } circle++; } while (!ignore_error && (total_error >= error_limit)); }
public void Training(Classification trainingData) { Regression regressionTrainingData = new Regression(); for (int i = 0; i < trainingData.Length; i++) { float[] outputs = new float[output_layer.Length]; for (int j = 0; j < outputs.Length; j++) { if (trainingData.tags[i].Equals(output_layer[j].tag)) { outputs[j] = 1f; } else { outputs[j] = 0f; } } regressionTrainingData.Add(trainingData.inputs[i], outputs); } Training(regressionTrainingData); }
private void PictureBoxPoster_MouseUp(object sender, MouseEventArgs e) { toggleMove = false; PictureBox pictureBox = (PictureBox)sender; bool train = false; float value = 0f; if (pictureBox.Location.X >= (this.Width - (this.Width * padding))) { value = 1f; train = true; existRight = true; } else if (pictureBox.Location.X <= (this.Width * padding - size.Width)) { value = 0f; train = true; existLeft = true; } else if (trainingData.Length > 0 && (existLeft && existRight)) { pictureBox.Location = new Point(lastPoint.X, pictureBox.Location.Y); pictureBox.BringToFront(); } if (train) { string[] split = linesList[int.Parse(pictureBox.Tag.ToString())].Split(' '); int day = int.Parse(split[1]) - 1; int month = months.IndexOf(split[2]); float year = Map.Float(0f, float.Parse(split[3]), 9999f, 0f, 1f); List <float> inputs = new List <float>(); for (int i = 0; i < 31; i++) { if (i == day) { inputs.Add(1f); } else { inputs.Add(0f); } } for (int i = 0; i < 12; i++) { if (i == month) { inputs.Add(1f); } else { inputs.Add(0f); } } inputs.Add(year); string[] categoriesArr = split[4].Split(','); for (int i = 0; i < categories.Count; i++) { bool exist = false; for (int j = 0; j < categoriesArr.Length; j++) { if (categories[i] == categoriesArr[j]) { exist = true; break; } } if (exist) { inputs.Add(1f); } else { inputs.Add(0f); } } string[] directorsArr = split[5].Split(','); for (int i = 0; i < directors.Count; i++) { bool exist = false; for (int j = 0; j < directorsArr.Length; j++) { if (directors[i] == directorsArr[j]) { exist = true; break; } } if (exist) { inputs.Add(1f); } else { inputs.Add(0f); } } string[] starsArr = split[6].Split(','); for (int i = 0; i < stars.Count; i++) { bool exist = false; for (int j = 0; j < starsArr.Length; j++) { if (stars[i] == starsArr[j]) { exist = true; break; } } if (exist) { inputs.Add(1f); } else { inputs.Add(0f); } } trainingData.Add(inputs.ToArray(), new[] { value }); stopwatch.Start(); neuralNetwork.Training(trainingData); stopwatch.Stop(); Console.WriteLine("Training : " + stopwatch.ElapsedMilliseconds); stopwatch.Reset(); pictureBox.MouseDown -= PictureBoxPoster_MouseDown; pictureBox.MouseUp -= PictureBoxPoster_MouseUp; pictureBox.MouseMove -= PictureBoxPoster_MouseMove; pictureBoxes.Remove(pictureBox); if (existLeft && existRight) { for (int i = 0; i < pictureBoxes.Count; i++) { split = linesList[int.Parse(pictureBoxes[i].Tag.ToString())].Split(' '); day = int.Parse(split[1]) - 1; month = months.IndexOf(split[2]); year = Map.Float(1f, float.Parse(split[3]), 9999f, 0f, 1f); inputs = new List <float>(); for (int j = 0; j < 31; j++) { if (j == day) { inputs.Add(1f); } else { inputs.Add(0f); } } for (int j = 0; j < 12; j++) { if (j == month) { inputs.Add(1f); } else { inputs.Add(0f); } } inputs.Add(year); categoriesArr = split[4].Split(','); for (int j = 0; j < categories.Count; j++) { bool exist = false; for (int z = 0; z < categoriesArr.Length; z++) { if (categories[j] == categoriesArr[z]) { exist = true; break; } } if (exist) { inputs.Add(1f); } else { inputs.Add(0f); } } directorsArr = split[5].Split(','); for (int j = 0; j < directors.Count; j++) { bool exist = false; for (int z = 0; z < directorsArr.Length; z++) { if (directors[j] == directorsArr[z]) { exist = true; break; } } if (exist) { inputs.Add(1f); } else { inputs.Add(0f); } } starsArr = split[6].Split(','); for (int j = 0; j < stars.Count; j++) { bool exist = false; for (int z = 0; z < starsArr.Length; z++) { if (stars[j] == starsArr[z]) { exist = true; break; } } if (exist) { inputs.Add(1f); } else { inputs.Add(0f); } } stopwatch.Start(); Result[] guesses = neuralNetwork.Predict(inputs.ToArray()); stopwatch.Stop(); Console.WriteLine("Predict:" + stopwatch.ElapsedMilliseconds); stopwatch.Reset(); pictureBoxes[i].Location = new Point((int)Map.Float(0f, guesses[0].value, 1f, this.Width * padding, this.Width - (this.Width * padding) - size.Width), (int)RandomF.NextFloat(this.Height - size.Height)); } } } }