@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 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());
  }