private void навчитиToolStripMenuItem_Click(object sender, EventArgs e) { dataGridView1.DataSource = errors; dataGridView2.DataSource = function; dataGridView3.DataSource = weightsHidden; dataGridView4.DataSource = weightsOutput; switch (comboBox1.Text) { case "ln|cosx1| + tgx2 + ctgx3": { errors.Columns.Add("iteration"); errors.Columns.Add("function"); errors.Columns.Add("error"); errors.Columns.Add("output[d1]"); errors.Columns.Add("output[d2]"); double sum = 0.0; for (int i = 0; i < dt.Rows.Count; i++) { desired[i][0] = Math.Sin(input[i][0]) + Math.Sin(input[i][1]) - Math.Sin(input[i][2]); /* Math.Log(Math.Abs(Math.Cos(input[i][0]))) + Math.Tan(input[i][1]) + 1/Math.Tan(input[i][2]);/*Math.Cos(input[i][0]) + Math.Tan(input[i][1]) + 1 / Math.Tan(input[i][2]);*/ sum += desired[i][0]; } function.Columns.Add("i"); function.Columns.Add("x1"); function.Columns.Add("x2"); function.Columns.Add("x3"); function.Columns.Add("d1"); function.Columns.Add("d2"); function.Columns.Add("average"); for (int i = 0; i < desired.GetUpperBound(0) + 1; i++) { DataRow row = function.NewRow(); row["i"] = i; row["x1"] = input[i][0]; row["x2"] = input[i][1]; row["x3"] = input[i][2]; row["d1"] = desired[i][0]; function.Rows.Add(row); } double[] output = new double[2]; // Навчання int example = 1; int h = 0; double[] value = new double[3] { 4, 5, 4 }; Random rdn = new Random(); do { error = 0.0; input.Reverse(); for (int j = 0; j < dt.Rows.Count; j++) { error += bpn.Train(ref input[j], ref desired[j], TrainingRate, Momentum); } if (h % 100 == 0) { bpn.Run(ref value, out output); DataRow row = errors.NewRow(); row["iteration"] = h; row["function"] = example; row["error"] = error / 20; row["output[d1]"] = output[0]; //row["output[d2]"] = output[1]; errors.Rows.Add(row); } h++; if (h == 200000) { break; } } while ((error / 20) > 0.00127); // Виведення скоригованих ваг прихованого шару hidden = bpn.GetWeights(0); weightsHidden.Columns.Add("Початковий/Прихований"); for (int i = 0; i < hidden[0].Count(); i++) { weightsHidden.Columns.Add(Convert.ToString(i)); } for (int i = 0; i < hidden.GetUpperBound(0) + 1; i++) { DataRow row = weightsHidden.NewRow(); row["Початковий/Прихований"] = i; for (int j = 1; j < weightsHidden.Columns.Count; j++) { row[j] = hidden[i][j - 1]; } weightsHidden.Rows.Add(row); } // Виведення скоригованих ваг вихідного шару outputWeights = bpn.GetWeights(1); weightsOutput.Columns.Add("Прихований/Вихідний"); for (int i = 0; i < outputWeights[0].Count(); i++) { weightsOutput.Columns.Add(Convert.ToString(i)); } for (int i = 0; i < outputWeights.GetUpperBound(0) + 1; i++) { DataRow row = weightsOutput.NewRow(); row["Прихований/Вихідний"] = i; for (int j = 1; j < weightsOutput.Columns.Count; j++) { row[j] = outputWeights[i][j - 1]; } weightsOutput.Rows.Add(row); } break; } } }