// завантаження мережі LVQ private void pictureBox4_Click(object sender, EventArgs e) { string filepath = ""; // шлях до файлу, який треба відкрити openFileDialog.Multiselect = false; if (openFileDialog.ShowDialog() == DialogResult.OK) { filepath = openFileDialog.FileName; } else { return; } LVQ lvq2 = new LVQ(filepath); if (lvq2.loaded != false) { lvq = lvq2; MessageBox.Show("Мережа LVQ завантажена"); } else { MessageBox.Show("Виберіть інший файл для завантаження мережі"); } }
// завантаження мережі LVQ з файлу private void DownLoadLVQ_Click(object sender, EventArgs e) { string filepath = ""; // шлях до файлу, який треба відкрити openFileDialog.Multiselect = false; if (openFileDialog.ShowDialog() == DialogResult.OK) { filepath = openFileDialog.FileName; } lvq = new LVQ(filepath); MessageBox.Show("Мережа LVQ завантажена"); }
// Створення мережі LVQ private void TrainLVQ_Click(object sender, EventArgs e) { if (PARAMETERS == 0) { MessageBox.Show("Initial error occured"); return; } bool resultLearning_rate2 = Double.TryParse(LearningRateLVQ.Text, out LEARNING_RATE2); bool resultMin_error2 = Double.TryParse(MinErrorLVQ.Text, out MIN_ERROR2); bool resultDecay_rate = Double.TryParse(DecayRateLVQ.Text, out DECAY_RATE); if (resultLearning_rate2 == false || resultMin_error2 == false || resultDecay_rate == false) { MessageBox.Show("Not all fields are entered for creation of LVQ"); return; } lvq = new LVQ(inputs, Normalize.FormAnswersLVQ(answers), MIN_ERROR2, LEARNING_RATE2, DECAY_RATE, NUM_OF_CLUSTERS); MessageBox.Show("LVQ has been created"); }
// Створення мережі LVQ private void TrainLVQ_Click(object sender, EventArgs e) { if (PARAMETERS == 0) { MessageBox.Show("Спочатку завантажте дані"); return; } bool resultLearning_rate2 = Double.TryParse(LearningRateLVQ.Text, out LEARNING_RATE2); bool resultMin_error2 = Double.TryParse(MinErrorLVQ.Text, out MIN_ERROR2); bool resultDecay_rate = Double.TryParse(DecayRateLVQ.Text, out DECAY_RATE); if (resultLearning_rate2 == false || resultMin_error2 == false || resultDecay_rate == false) { MessageBox.Show("Не всі обов'язкові поля заповнені для створення мережі LVQ"); return; } lvq = new LVQ(inputs, Normalize.FormAnswersLVQ(answers), MIN_ERROR2, LEARNING_RATE2, DECAY_RATE, NUM_OF_CLUSTERS); MessageBox.Show("Мережу LVQ створено"); }
public void CreateNetwork() { lvq = new LVQ(inputs, clusters, minError, learningRate, decayRate, numOfClusters); }
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 train 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.Rows.Count; int PARAMETERS = dt.Columns.Count - 2; 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] { 5, 10, 1 }; // кількість шарів та нейронів у шарах // активаційні функції для кожного шару TransferFunction[] TFuncs = new TransferFunction[3] { TransferFunction.None, TransferFunction.BipolarSigmoid, TransferFunction.BipolarSigmoid }; double LEARNING_RATE1 = 0.15; // швидкість навчання double MOMENTUM = 0.1; // крефіцієнт для навчання // Параметри для LVQ мережі double LEARNING_RATE2 = 1.0; // швидкість навчання double DECAY_RATE = 0.7; // швидкість зміни швидкості нвчання 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 = 1; k < dt.Columns.Count - 1; k++) { inputs[i][k - 1] = Convert.ToDouble(dt.Rows[i][k]); } answers[i][0] = Convert.ToDouble(dt.Rows[i][dt.Columns.Count - 1]); } Normalize.NormalizeParameters(inputs); BoltzmanMachine bpn = new BoltzmanMachine(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"); BoltzmanMachine bpn2 = new BoltzmanMachine(@"d:\Навчання\test_network.xml"); 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), MIN_ERROR, LEARNING_RATE2, DECAY_RATE, NUM_OF_CLUSTERS); 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(); }
public LVQService(string xml) { this.lvq = new LVQ(xml); }