예제 #1
0
        private void treinar_rede()
        {
            progressBar1.Value = 0;

            int n1  = int.Parse(textBox1.Text);
            int n2  = int.Parse(textBox2.Text);
            int n3  = int.Parse(textBox3.Text);
            int max = int.Parse(textBox4.Text);

            N.e = float.Parse(textBox5.Text);

            RN rede = new RN(1, n1, n2, n3);

            List <float[]> entradas = new List <float[]>();
            List <float[]> saidas   = new List <float[]>();

            gp.Clear(pictureBox1.BackColor);
            foreach (ponto pt in pontos)
            {
                entradas.Add(new float[] { pt.x / W });
                saidas.Add(new float[] { pt.y / H });
                gp.FillEllipse(Brushes.Black, pt.x - 3, pt.y - 3, 6, 6);
            }

            float step  = max / 100f;
            float value = step;

            //treinamento da rede
            for (int iteracao = 0; iteracao < max; iteracao++)
            {
                if (iteracao > value)
                {
                    value += step;
                    progressBar1.Value += 1;
                }

                rede.treinar(entradas, saidas);
            }

            //desenha curva apartir da rede treinada
            float py = 0f;

            for (int px = 0; px < W; px += 2)
            {
                py = H * rede.update(new float[] { px / W })[0];
                gp.FillEllipse(Brushes.Red, px - 2, py - 2, 4, 4);
            }

            pictureBox1.Image  = bmp;
            progressBar1.Value = 100;
            update_buttons(true);
            thr.Abort();
        }
예제 #2
0
        private void button8_Click(object sender, EventArgs e)
        {
            OpenFileDialog abrir = new OpenFileDialog();

            abrir.Title  = "Abrir RedeNeural";
            abrir.Filter = "Formato RN (.rn)|*.rn|All files (*.*)|*.*";

            if (abrir.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            rede = RN.Carregar(abrir.FileName);
        }
예제 #3
0
 public static RN Carregar(string path)
 {
     try
     {
         XmlSerializer reader = new XmlSerializer(typeof(RN));
         StreamReader  file   = new StreamReader(path);
         RN            nc     = (RN)reader.Deserialize(file);
         file.Close();
         return(nc);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.Message);
         return(null);
     }
 }
예제 #4
0
        private void treinar_rede()
        {
            progressBar1.Value = 0;

            int n1 = int.Parse(textBox5.Text);
            int n2 = int.Parse(textBox2.Text);
            int n3 = int.Parse(textBox3.Text);
            int n4 = int.Parse(textBox4.Text);

            N.e = float.Parse(textBox6.Text);

            rede = new RN(120, n1, n2, n3);

            List <float[]> entradas = new List <float[]>();
            List <float[]> saidas   = new List <float[]>();

            //for (int c = 0; c < casos.Count; c++)
            for (int c = 0; c < numeros.Count; c++)
            {
                //bool[][] caso = casos.lista_caso[c];
                bool[][] caso = numeros.lista_caso[c];

                float[] ent = new float[12 * 10];
                for (int i = 0; i < 12; i++)
                {
                    for (int j = 0; j < 10; j++)
                    {
                        int idx = 10 * i + j; //tabindex
                        if (caso[i][j])
                        {
                            ent[idx] = 1.0f;
                        }
                    }
                }

                entradas.Add(ent);

                //saidas.Add(new float[] { (float)casos.lista_numero[c] / 10f });

                float[] vetor = new float[n3];
                vetor[numeros.lista_numero[c]] = 1.0f;
                saidas.Add(vetor);
            }

            float step  = n4 / 100f;
            float value = step;

            for (int i = 0; i < n4; i++)
            {
                if (i > value)
                {
                    value += step;
                    progressBar1.Value += 1;
                }

                rede.treinar(entradas, saidas);
            }

            progressBar1.Value = 100;
            update_buttons(true);
            thr.Abort();
        }