@SuppressWarnings("unused") public void treinamento( Double[][] amostras, Double[][] esperado, double taxaDeAprendizado, double precisao) { double erroAnterior, erroTemp; if (!pesosSetados) { inicializarPesos(amostras[0].length); } this.erroMedio = 0.0; this.quantEpocas = 0; strResult.append("\n--------------------- Treinamento -------------------\n"); strResult.append("Pesos Iniciais \n"); for (int i = 0; i < camadasIntermediarias.size(); i++) { strResult.append("Camada " + i + "\n"); pesosCamada(camadasIntermediarias.get(i)); } strResult.append("Camada de Saida\n"); pesosCamada(camadaDeSaida); do { erroTemp = 0.0; erroAnterior = this.erroMedio; /* Irá percorrer todas as amostras e calcular o erro médio */ for (int i = 0; i < amostras.length; i++) { camadasIntermediarias.get(0).combinarEntradas(amostras[i]); camadasIntermediarias.get(0).gerarSaidas(); for (int j = 1; j < camadasIntermediarias.size(); j++) { camadasIntermediarias .get(j) .combinarEntradas(camadasIntermediarias.get(j - 1).getVetorSaida()); camadasIntermediarias.get(j).gerarSaidas(); } camadaDeSaida.combinarEntradas( camadasIntermediarias.get(camadasIntermediarias.size() - 1).getVetorSaida()); camadaDeSaida.gerarSaidas(); camadaDeSaida.calcularGradiente(esperado[i]); camadaDeSaida.ajustarPesos( taxaDeAprendizado, camadasIntermediarias.get(camadasIntermediarias.size() - 1).getVetorSaida()); ajustarCamadasIntermediarias(amostras, taxaDeAprendizado, i); erroTemp += Math.abs(calcularErro(esperado[i])); } erroMedio = erroTemp / amostras.length; quantEpocas++; } while (this.erroMedio > precisao); strResult.append("\nTreinado por " + quantEpocas + " épocas.\n"); strResult.append("\nPesos Finais \n"); for (int i = 0; i < camadasIntermediarias.size(); i++) { strResult.append("Camada " + i + "\n"); pesosCamada(camadasIntermediarias.get(i)); } strResult.append("Camada de Saida\n"); pesosCamada(camadaDeSaida); imprimirCamadaDeSaida(); }
public double calcularErro(Double[] esperado) { double soma = 0.0; for (int i = 0; i < camadaDeSaida.getVetorSaida().length; i++) { soma += esperado[i] - camadaDeSaida.getVetorSaida()[i]; } return soma; }
private void imprimirCamadaDeSaida() { for (int i = 0; i < camadaDeSaida.getQuantNeuronios(); i++) { for (int j = 0; j < camadaDeSaida.getNeuronios().get(i).getPesos().length; j++) { System.out.print(camadaDeSaida.getNeuronios().get(i).getPesos()[j] + " "); } System.out.println("\n"); } System.out.println("Treinado por " + quantEpocas + " epocas"); }
public void inicializarPesos(int tam) { if (camadasIntermediarias.size() > 0) { camadasIntermediarias.get(0).gerarPesos(tam); for (int i = 1; i < camadasIntermediarias.size(); i++) { camadasIntermediarias .get(i) .gerarPesos(camadasIntermediarias.get(i - 1).getQuantNeuronios()); } camadaDeSaida.gerarPesos( camadasIntermediarias.get(camadasIntermediarias.size() - 1).getQuantNeuronios()); } else { camadaDeSaida.gerarPesos(tam); } }
public void executar(Double[] amostras) { if (camadasIntermediarias.size() > 0) { camadasIntermediarias.get(0).combinarEntradas(amostras); camadasIntermediarias.get(0).gerarSaidas(); for (int i = 1; i < camadasIntermediarias.size(); i++) { camadasIntermediarias .get(i) .combinarEntradas(camadasIntermediarias.get(i - 1).getVetorSaida()); camadasIntermediarias.get(i).gerarSaidas(); } camadaDeSaida.combinarEntradas( camadasIntermediarias.get(camadasIntermediarias.size() - 1).getVetorSaida()); camadaDeSaida.gerarSaidas(); strResult.append("\nSaida " + Arrays.toString(camadaDeSaida.getVetorSaida())); } else { camadaDeSaida.combinarEntradas(amostras); camadaDeSaida.gerarSaidas(); } imprimeVetor(camadaDeSaida.getVetorSaida()); }
public void setarPesos(Double[] pesos1, Double[] pesos2, Double[] pesos3) { inicializarPesos(2); camadasIntermediarias.get(0).getNeuronios().get(0).setPesos(pesos1); camadasIntermediarias.get(0).getNeuronios().get(1).setPesos(pesos2); camadaDeSaida.getNeuronios().get(0).setPesos(pesos3); }