//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); }
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"); } }