Network trainNetWithParsedTrainData(vector<int> hiddenLayers, int epochs,
		int miniBatchSize, double learningRate, double regularizationFactor) {

	inputData_t data = generateInputData();

	int input_dim = data.x_train.cols();
	int output_dim = OUTPUT_SIZE;

	vector<int> layers;
	layers.push_back(input_dim);
	layers.insert(layers.end(), hiddenLayers.begin(), hiddenLayers.end()); //inserta todos los elementos de hiddenLayers
	layers.push_back(output_dim);

	Network net(layers);
	if (LOAD_NET){
		CsvReader reader;
		vector<MatrixXd> weights = reader.readWheights(WEIGHTS_BASE_LOAD_PATH,2);
		vector<VectorXd> biases = reader.readBiases(BIASES_LOAD_PATH);
		net = Network(layers,biases,weights);
	}
	if (TRAIN_NET){
		cout << "Arranca train" << endl;
		net.SGD(data.x_train, data.y_train, data.x_test, data.y_test, epochs, miniBatchSize,
				learningRate, regularizationFactor);
	}

	int validationResult = net.accuracy(data.x_validation, data.y_validation);
	double cost = net.totalCost(data.x_validation, data.y_validation);
	cout << "---------------------------" << endl;
	cout << "Validation results: " << validationResult << " / "
			<< data.y_validation.rows() << endl;
	cout << "---------------------------" << endl;
	cout << "Validation cost: " << cost << endl;
	cout << "---------------------------" << endl;
	return net;
}