Ejemplo n.º 1
0
 //vai instaciar os neuronis de entrada, oculto e saida
 public BackpropagationClass()
 {
     for (int i = 0; i < NEURONIO_ENTRADA; i++)
     {
         neuronios[i] = new Neuronio(LayerType.E);
     }
     for (int i = NEURONIO_ENTRADA; i < NEURONIO_ENTRADA + NEURONIO_OCULTO; i++)
     {
         neuronios[i] = new Neuronio(LayerType.O);
     }
     neuronios[NEURONIO_ENTRADA + NEURONIO_OCULTO] = new Neuronio(LayerType.S);
 }
Ejemplo n.º 2
0
        private void btnArquivoTreina_Click(object sender, EventArgs e)
        {
            // VERIFICA SE O VALOR DE INTERAÇÕES É O MINIMO DE 100 //
            if (int.TryParse(txtIntera.Text, out numeroIteracoes) && Convert.ToInt32(txtIntera.Text) >= 100)
            {
                numeroIteracoes = Convert.ToInt32(txtIntera.Text);

                // VERIFICA SE O VALOR DA TAXA DE APRENDIZAGEM ESTÁ ENTRE 0.1 E 1.0 //
                if (double.TryParse(txtTaxaAprende.Text, out taxaAprendizagem) &&
                    Convert.ToDouble(txtTaxaAprende.Text) > 0.1 && Convert.ToDouble(txtTaxaAprende.Text) <= 1)
                {
                    taxaAprendizagem = Convert.ToDouble(txtTaxaAprende.Text);

                    // RECEBE NOME DO ARQUIVO PARA CARREGAR NA MATRIZ //
                    if (openFileAmostras.ShowDialog() == DialogResult.OK)
                    {
                        try
                        {
                            StreamReader arqStream = new StreamReader(openFileAmostras.OpenFile());

                            if (arqStream != null)
                            {
                                using (arqStream)
                                {
                                    string sLine = "";
                                    numLinhasArquivo      = 0;
                                    numColunasArquivo     = 0;
                                    txtArquivoTreina.Text = openFileAmostras.FileName;
                                    ArrayList arrText = new ArrayList();

                                    // LÊ O ARQUIVO DE DADOS //
                                    while (sLine != null)
                                    {
                                        sLine = arqStream.ReadLine();

                                        if (sLine != null)
                                        {
                                            arrText.Add(sLine);
                                            numLinhasArquivo++;
                                        }
                                    }
                                    arqStream.Close();

                                    // TRANSFORMAR O ARRAY LIST EM UMA MATRIZ //
                                    String[] linha = arrText[0].ToString().Split(',');
                                    numColunasArquivo = linha.Length;
                                    matrizTreinamento = new String[numLinhasArquivo, numColunasArquivo];

                                    for (Int32 i = 0; i < numLinhasArquivo; i++)
                                    {
                                        linha = arrText[i].ToString().Split(',');
                                        for (Int32 j = 0; j < linha.Length; j++)
                                        {
                                            matrizTreinamento[i, j] = linha[j];
                                        }
                                    }
                                    NormalizaTreinamento();

                                    // CONSTROI COLUNAS DO DATA GRID //
                                    for (Int32 i = 0; i < numColunasArquivo; i++)
                                    {
                                        dgvTreinamento.Columns.Add(matrizTreinamento[0, i], matrizTreinamento[0, i]);
                                    }

                                    // ALOCA VALORES NAS LINHAS DO DATA GRID //
                                    for (Int32 i = 1; i < numLinhasArquivo; i++)
                                    {
                                        dgvTreinamento.Rows.Add();
                                        for (Int32 j = 0; j < numColunasArquivo; j++)
                                        {
                                            dgvTreinamento[j, i - 1].Value = matrizTreinamento[i, j];
                                        }
                                        //dgvTreinamento.Rows.Add(arrText[i].ToString().Split(','));
                                    }

                                    // DEFINIR NEURONIOS ENTRADA, OCULTOS, SAIDA //
                                    String Classes = "";
                                    numNeurosEntrada = (numColunasArquivo - 1);

                                    // Conta quantas saidas existem na matriz, Ex: 1,2,3,4,5 //
                                    for (Int32 i = 1; i < numLinhasArquivo; i++)
                                    {
                                        if (!Classes.Contains(matrizTreinamento[i, (numColunasArquivo - 1)]))
                                        {
                                            Classes = Classes + matrizTreinamento[i, (numColunasArquivo - 1)] + "|";
                                        }
                                    }

                                    vetorSaidas = Classes.Split('|');

                                    numNeurosSaida  = (vetorSaidas.Length - 1);
                                    numNeurosOculta = ((numNeurosEntrada + numNeurosSaida) / 2);

                                    matrizDesejado = new String[numNeurosSaida, numNeurosSaida];
                                    for (Int32 i = 0; i < numNeurosSaida; i++)
                                    {
                                        for (Int32 j = 0; j < numNeurosSaida; j++)
                                        {
                                            matrizDesejado[i, j] = (i == j) ? "1" : "0";
                                        }
                                    }

                                    txtNeuroEntrada.Text = numNeurosEntrada.ToString();
                                    txtNeuroOculto.Text  = numNeurosOculta.ToString();
                                    txtNeuroSaida.Text   = numNeurosSaida.ToString();
                                    // FIM NEURONIOS //

                                    // DEFINE FUNÇÃO DE TREINAMENTO //
                                    if (rdbLinear.Checked)
                                    {
                                        funcaoTreinamento = "linear";
                                    }
                                    else
                                    if (rdbLogistica.Checked)
                                    {
                                        funcaoTreinamento = "logistica";
                                    }
                                    else
                                    {
                                        funcaoTreinamento = "hiperbolica";
                                    }

                                    // CRIA NEURONIOS //
                                    neurosEntrada = new Neuronio[numNeurosEntrada];
                                    neurosOcultos = new Neuronio[numNeurosOculta];
                                    neurosSaidas  = new Neuronio[numNeurosSaida];

                                    // Cria ligações dos neuronios entrada com neuronios ocultos //
                                    for (Int32 i = 0; i < numNeurosEntrada; i++)
                                    {
                                        neurosEntrada[i] = new Neuronio(numNeurosOculta);
                                    }

                                    // Cria ligações dos neuronios ocultos com neironios saida //
                                    for (Int32 i = 0; i < numNeurosOculta; i++)
                                    {
                                        neurosOcultos[i] = new Neuronio(numNeurosSaida);
                                    }

                                    for (Int32 i = 0; i < numNeurosSaida; i++)
                                    {
                                        neurosSaidas[i] = new Neuronio(1);
                                    }
                                    // FIM NEURONIOS //

                                    // GERA PESOS INICIAIS COM RANDON//
                                    Random rnd = new Random();

                                    // Gerar pesos para conexão de entrada e oculta //
                                    for (Int32 i = 0; i < numNeurosEntrada; i++)
                                    {
                                        for (Int32 j = 0; j < numNeurosOculta; j++)
                                        {
                                            Double valor = (rnd.NextDouble() * 2.0) - 1;
                                            neurosEntrada[i].setW(j, valor);
                                        }
                                    }

                                    // Gerar pesos para conexão de oculta e saida //
                                    for (Int32 i = 0; i < numNeurosOculta; i++)
                                    {
                                        for (Int32 j = 0; j < numNeurosSaida; j++)
                                        {
                                            Double valor = (rnd.NextDouble() * 2.0) - 1;
                                            neurosOcultos[i].setW(j, valor);
                                        }
                                    }
                                    // FIM GERAR PESOS//
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("Erro ao acessar arquivo de amostas. " + ex.ToString());
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Taxa de aprendizagem inválida, deve estar entre 0,1 e 1,0", "Taxa de Aprendizagem");
                }
            }
            else
            {
                MessageBox.Show("O número de iterações é inválido ou menor que 100.", "Número de Iterações");
            }
        }