public void entrenar(String[][] entradas){
		
		boolean finalizado = false;
		int y = 0;
		double  error = 0, errorCuadraticoMedio = 0, valorActivacion = 0;
		this.numeroEpocasFinal = 0;
		this.errores.clear();
		
			while(!finalizado){ 
				
				
				for(int n = 0; n < entradas.length; n++){
					
					System.out.println("ENTRADA " + (n+1) + " ------------------------------------------");
					
					//Calcular todos los n (a) (salidas de cada neurona de cada capa) dada una entrada
					this.feedForward(Arrays.copyOfRange(entradas[n], 0, entradas[n].length-1));
					
					//Ejecutar el Adaline con la salida del feed y los pesos asignados
					valorActivacion = this.obtenidaAdaline(this.salidasPorCapa[this.getNumeroCapasOcultas() - 1]);
					y = Integer.valueOf(entradas[n][entradas[n].length-1]); //Clase esperada
					System.out.println("Clase esperada " + y);
					
					//Calculo del error de neurona final
					error = y - valorActivacion;
					System.out.println("Error: " + error);
					
					//Calcular sensibilidad (backward), repartir el error
					this.calcularSensibilidad(valorActivacion, error, entradas[n].length-1);
					
					//Ajuste de pesos, mando el numero de elementos por entrada y la entrada inicial
					this.ajustarPesos(entradas[n].length-1, Arrays.copyOfRange(entradas[n], 0, entradas[n].length-1));
					
					errorCuadraticoMedio = Math.pow(error, 2); //Error cuadratico
					this.errorDeseadoFinal +=errorCuadraticoMedio; //Error acumulado

				}
				
				this.numeroEpocasFinal++;
				this.errorDeseadoFinal /= entradas.length;
				
				//Guardar el error para la grafica
				this.errores.add(this.errorDeseadoFinal);
				
				System.out.println("["+ this.numeroEpocasFinal +"] Error Esperado: " + this.errorDeseadoFinal);
				
				if(this.numeroEpocasFinal >= this.limiteEpocas || this.errorDeseadoFinal <= this.errorDeseado)
					finalizado = true;
				else
					this.errorDeseadoFinal = 0;
			}
		
	}