コード例 #1
0
        private void створитиМережуToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FormCreate f3 = new FormCreate();

            this.Hide();
            f3.ShowDialog();
            layerSizes = new int[f3.layerSizes.Length];
            for (int i = 0; i < f3.layerSizes.Length; i++)
            {
                layerSizes[i] = f3.layerSizes[i];
            }

            TFunc = new TransferFunction[f3.TFunc.Length];
            for (int i = 0; i < f3.TFunc.Length; i++)
            {
                TFunc[i] = f3.TFunc[i];
            }

            f3.Close();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                desired[i] = new double[layerSizes.Last()];
            }


            bpn = new BoltzmanMachine(layerSizes, TFunc);
            this.Show();
        }
コード例 #2
0
        private void CreateBackProp1_Click(object sender, EventArgs e)
        {
            int hidden = Convert.ToInt32(this.Hidden_Neurons.Text); // кількість нейронів у прихованому шарі

            layerSizes = new int[3] {
                PARAMETERS, hidden, 1
            };
            LEARNING_RATE1 = Convert.ToDouble(this.LearningRate.Text);
            MIN_ERROR      = Convert.ToDouble(this.MinError1.Text);

            boltzman = new BoltzmanMachine(layerSizes, TFuncs);
            MessageBox.Show("Мережу Больцмана створено");
        }
コード例 #3
0
        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();
        }