// створення мережі DeltaBarDelta private void CreateDeltaBarDelta_Click(object sender, EventArgs e) { if (PARAMETERS == 0) { MessageBox.Show("Initial error occured"); return; } int hidden; bool resultHidden = Int32.TryParse(this.Hidden_Neurons.Text, out hidden); bool resultLearning_Rate1 = Double.TryParse(this.Learning_rate1.Text, out LEARNING_RATE1); bool resultMomentum = Double.TryParse(this.Momentum.Text, out MOMENTUM); bool resultMin_error = Double.TryParse(this.MinError1.Text, out MIN_ERROR); bool resultKCoef = Double.TryParse(this.kCoefficient.Text, out kCoef); bool resultBetaCoef = Double.TryParse(this.bCoefficient.Text, out betaCoef); bool resultECoef = Double.TryParse(this.eCoefficient.Text, out eCoef); if (resultHidden == false || resultLearning_Rate1 == false || resultMomentum == false || resultMin_error == false || resultKCoef == false || resultBetaCoef == false || resultECoef == false) { MessageBox.Show("Not all fields are entered for creation of Delta-Bar-Delta"); return; } layerSizes = new int[3] { PARAMETERS, hidden, 1 }; // кількість шарів та нейронів у шарах dbd = new DeltaBarDelta(layerSizes, TFuncs, LEARNING_RATE1); MessageBox.Show("Delta-Bar-Delta has been created"); }
static void Main(string[] args) { /* DataSet ds = new DataSet(); * DataSet ds2 = new DataSet(); * DataTable dt = new DataTable(); * DataTable dt2 = new DataTable(); * Stopwatch sWatch = new Stopwatch(); * TimeSpan tSpan; * * * try * { * // під'єднання до бд * string connstring = "Server=127.0.0.1;Port=5432;User Id=postgres;Password=1postgres;Database=Labs;"; * NpgsqlConnection conn = new NpgsqlConnection(connstring); * conn.Open(); * string sql = "SELECT * FROM Task1 ORDER BY id"; * //string sql1 = "SELECT DISTINCT Type FROM train ORDER BY Type"; * NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn); * ds.Reset(); * da.Fill(ds); * dt = ds.Tables[0]; * * /* da = new NpgsqlDataAdapter(sql1, conn); * da.Fill(ds2); * dt2 = ds2.Tables[0];*/ /* conn.Close(); * } * catch (Exception msg) * { * Console.WriteLine(msg.ToString()); * throw; * } * * foreach (DataColumn dt3 in dt.Columns) * { * Console.WriteLine(dt3.ColumnName); * } * * int TRAINING_PATTERNS = dt.Columns.Count - 1; * int PARAMETERS = dt.Rows.Count; * //int NUM_OF_CLUSTERS = dt2.Rows.Count; * //Console.WriteLine("Number of clusters = {0}", NUM_OF_CLUSTERS); * double MIN_ERROR = 0.001; * int TestAmount = 6; * * // Параметри для BackPropagation мережі * int[] layerSizes = new int[3] { 2, 7, 1 }; // кількість шарів та нейронів у шарах * * // активаційні функції для кожного шару * TransferFunction[] TFuncs = new TransferFunction[3] {TransferFunction.None, * TransferFunction.Sigmoid, * TransferFunction.Sigmoid}; * double LEARNING_RATE1 = 0.15; // швидкість навчання * double MOMENTUM = 0.1; // крефіцієнт для навчання * * // Параметри для LVQ мережі * double LEARNING_RATE2 = 1.0; // швидкість навчання * double DECAY_RATE = 0.7; // швидкість зміни швидкості нвчання * * double[] h = new double[TRAINING_PATTERNS]; // критерій Ст'юдента * * * double[][] inputs = new double[TRAINING_PATTERNS][]; * double[][] answers = new double[TRAINING_PATTERNS][]; * * for (int i = 0; i < TRAINING_PATTERNS; i++) * { * inputs[i] = new double[PARAMETERS]; * answers[i] = new double[1]; * } * * * * // зчитування параметрів * for (int i = 0; i < TRAINING_PATTERNS; i++) * { * for (int k = 0; k < dt.Rows.Count; k++) * inputs[i][k] = Convert.ToDouble(dt.Rows[k][i + 1]); * * //answers[i][0] = Convert.ToDouble(dt.Rows[i][dt.Columns.Count - 1]); * } * * Console.WriteLine("Training Patterns:"); * for (int i = 0; i < TRAINING_PATTERNS; i++) * { * for (int p = 0; p < PARAMETERS; p++) * Console.Write(inputs[i][p] + " "); * Console.WriteLine(); * Console.WriteLine(); * } * * /* for (int i = 0; i < inputs.GetUpperBound(0) + 1; i++) * { * h[i] = Statistic.Interval(inputs[i]); * } * * Console.WriteLine("Student parameters:"); * foreach(double param in h) * Console.WriteLine("param = {0}", param); * * // Масив частот * Dictionary<double, int>[] pairs = new Dictionary<double, int>[TRAINING_PATTERNS]; * for (int i = 0; i < TRAINING_PATTERNS; i++) * { * pairs[i] = new Dictionary<double, int>(); * } * Console.WriteLine("Amount of pairs: {0}", pairs.Count()); * //ArrayList array = new ArrayList(); * for (int i = 0; i < TRAINING_PATTERNS; i++) { * for (double curr = inputs[i].Min(); curr <= inputs[i].Max(); curr += h[i]) * { * int count = 0; * for (int j = 0; j < inputs[i].Length; j++) * { * if (curr <= inputs[i][j] && inputs[i][j] < curr + h[i]) * count++; * } * pairs[i].Add((curr + h[i] + curr)/2.0, count); * Console.WriteLine("Key = {0}, Value = {1}", pairs[i].Last().Key, pairs[i].Last().Value); * } * * Console.WriteLine(); * }*/ /* double[][] array2 = Statistic.CreateArrayFromDictionary(inputs); * for (int i = 0; i < array2.GetUpperBound(0) + 1; i++) * { * for (int j = 0; j < array2[i].Length; j++) * Console.Write(array2[i][j] + " "); * Console.WriteLine(); * }*/ /* Normalize.NormalizeParameters(inputs); * * BackPropagationNetwork bpn = new BackPropagationNetwork(layerSizes, TFuncs); * * double[] output = new double[1]; * * sWatch.Start(); * bpn.TrainNetwork(inputs, Normalize.FormAnswersBackPropagation(answers), MIN_ERROR, LEARNING_RATE1, MOMENTUM); * sWatch.Stop(); * * tSpan = sWatch.Elapsed; * Console.WriteLine("Time for BackPropagation " + tSpan.ToString()); // Виведення часу навчання * * sWatch.Reset(); // обнуляємо час * * bpn.Save(@"d:\Навчання\test_network.xml"); */ // тестова вибірка double[][] trainPatterns = new double[][] { new double[] { 0.189, 0.1, 0.86, 0.22 }, new double[] { 0.141, 0.078, 0.123, 0.12, }, new double[] { 0.15, 0.095, 0.128, 0.08 }, new double[] { 0.126, 0.401, 0.085, 0.04 }, new double[] { 0.109, 0.156, 0.179, 0.08 }, new double[] { 0.095, 0.278, 0.124, 0.05 }, new double[] { 0.156, 0.124, 0.09, 0.17 }, new double[] { 0.178, 0.167, 0.075, 0.05 }, new double[] { 0.107, 0.222, 0.119, 0.14 }, new double[] { 0.115, 0.174, 0.182, 0.07 }, new double[] { 0.126, 0.151, 0.144, 0.1 }, new double[] { 0.088, 0.189, 0.25, 0.03 }, new double[] { 0.12, 0.335, 0.086, 0.03 }, new double[] { 0.09, 0.147, 0.197, 0.07 }, new double[] { 0.085, 0.15, 0.224, 0.04 } }; double[][] answers = new double[][] { new double[] { 1 }, new double[] { 1 }, new double[] { 1 }, new double[] { 2 }, new double[] { 2 }, new double[] { 2 }, new double[] { 1 }, new double[] { 1 }, new double[] { 1 }, new double[] { 1 }, new double[] { 1 }, new double[] { 2 }, new double[] { 2 }, new double[] { 2 }, new double[] { 2 } }; // Параметри для DeltaBarDelta мережі int[] layerSizes = new int[3] { 4, 8, 1 }; // кількість шарів та нейронів у шарах // активаційні функції для кожного шару TransferFunction[] TFuncs = new TransferFunction[3] { TransferFunction.None, TransferFunction.Sigmoid, TransferFunction.Sigmoid }; double LEARNING_RATE1 = 0.5; // швидкість навчання double MOMENTUM = 0.1; // крефіцієнт для навчання double[] output = new double[] { }; DeltaBarDelta dbd1 = new DeltaBarDelta(layerSizes, TFuncs, LEARNING_RATE1); Console.WriteLine("start"); dbd1.TrainNetwork(trainPatterns, Normalize.FormAnswersDeltaBarDelta(answers), 0.001, 0.01, 0.05, 0.05, MOMENTUM); Console.WriteLine("finish"); for (int i = 0; i < trainPatterns.GetUpperBound(0) + 1; i++) { Console.WriteLine("The result for vector {0} : Cluster {1}", i, dbd1.getCluster(trainPatterns[i], output)); } /*DeltaBarDelta bpn2 = new DeltaBarDelta(@"d:\test backpropagation network.xml", 1); * string network = bpn2.Save(); * DeltaBarDelta bpn3 = new DeltaBarDelta(network); * string network3 = bpn3.Save(); * Console.WriteLine(network3);*/ /* double[] input123 = new double[] { 0.854, 0.079, 0.05, 0.023, 0.002 }; * double[] output123 = new double[1]; * Console.WriteLine("My answer is " + bpn2.getCluster(input123, output123));*/ /*for (int k = 0; k < TRAINING_PATTERNS; k++) * { * Console.WriteLine("cluster {0:0.000}", bpn2.getCluster(inputs[k], output)); * } * * double[][] testArray = GenerateTest.GenerateOutputICG(PARAMETERS, TestAmount); * Normalize.NormalizeTest(testArray); * * for (int k = 0; k < TestAmount; k++) * { * Console.WriteLine("---- cluster {0:}", bpn2.getCluster(testArray[k], output)); * } * * sWatch.Start(); * LVQ lvq = new LVQ(inputs, Normalize.FormAnswersLVQ(answers), 0.0000000001, LEARNING_RATE2, DECAY_RATE, NUM_OF_CLUSTERS); * lvq.TrainNetwork(); * sWatch.Stop(); * * tSpan = sWatch.Elapsed; * * Console.WriteLine("Time for LVQ " + tSpan.ToString()); * * for(int i = 0; i < TRAINING_PATTERNS; i++) * { * Console.WriteLine("The result for vector {0} : Cluster {1}", i, lvq.getCluster(inputs[i])); * } * * for (int i = 0; i < TestAmount; i++) * { * Console.WriteLine("---- The result for vector2 {0} : Cluster {1}", i, lvq.getCluster(testArray[i])); * } * * lvq.Save(@"d:\Навчання\test_network2.xml"); * * LVQ lvq2 = new LVQ(@"d:\Навчання\test_network2.xml"); * * for (int i = 0; i < TestAmount; i++) * { * Console.WriteLine("---- The result for vector2 {0} : Cluster {1}", i, lvq2.getCluster(testArray[i])); * } */ Console.ReadKey(); }