private static void LastTrain(DataSet testDS, INeuralTrainerParams passedParams, IOptimizer trainer, string prefix, int seed) { string path = prefix + passedParams.NumberOfHiddenUnits + "_lr" + passedParams.learningRate + "_reg" + passedParams.regularizationRate; //building the architecture Network n = new Network(new List <Layer>() { new Layer(new ActivationIdentity(), true, 10), new Layer(new ActivationTanh(), true, passedParams.NumberOfHiddenUnits), // new Layer(new ActivationLeakyRelu(),true,40), new Layer(new ActivationIdentity(), false, 2), }, false, AA1_MLP.Enums.WeightsInitialization.Xavier, seed); passedParams.network = n; var watch = System.Diagnostics.Stopwatch.StartNew(); List <double[]> learningCurve = trainer.Train(passedParams); watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Console.WriteLine("elapsed Time:{0} ms", elapsedMs); double MEE = 0; double MSE = 0; var log = ModelManager.TesterCUPRegression(testDS, n, out MEE, out MSE); File.WriteAllText(path + ".txt", string.Join("\n", learningCurve.Select(s => string.Join(",", s)))); File.AppendAllText(path + ".txt", "\nMEE:" + MEE + "MSE:" + MSE); File.WriteAllText(path + "predVsActual.txt", string.Join("\n", log.Select(s => string.Join(",", s)))); ModelManager.SaveNetowrk(n, path + ".n"); }
public List <double[]> RunExperiment(IOptimizer optimizer, INeuralTrainerParams passedParams, out double MEE, out double MSE) { //building the architecture Network n = new Network(new List <Layer>() { new Layer(new ActivationIdentity(), true, 10), new Layer(new ActivationTanh(), true, passedParams.NumberOfHiddenUnits), // new Layer(new ActivationLeakyRelu(),true,40), new Layer(new ActivationIdentity(), false, 2), }, false, AA1_MLP.Enums.WeightsInitialization.Xavier); passedParams.network = n; List <double[]> learningCurve = optimizer.Train(passedParams); MEE = 0; MSE = 0; var log = ModelManager.TesterCUPRegression(passedParams.validationSet, n, out MEE, out MSE); return(learningCurve); }
private void RunKFoldWithSetOfParams(AA1_MLP.Entities.DataSet wholeSet, int k, INeuralTrainerParams passedParams, IOptimizer trainer, string reportsPath) { string kRunFolderName = string.Format("hdn{0}_k{1}_lr{2}_reg{3}", passedParams.NumberOfHiddenUnits, k, passedParams.learningRate, passedParams.regularizationRate); string KRunfolderPath = Path.Combine(reportsPath, kRunFolderName); if (passedParams is GradientDescentParams) { KRunfolderPath = string.Format("{0}_mo{1}", KRunfolderPath, ((GradientDescentParams)passedParams).momentum); } if (Directory.Exists(KRunfolderPath)) { Directory.Delete(KRunfolderPath); } Directory.CreateDirectory(KRunfolderPath); double avgMSE = 0; double MEE = 0, MSE = 0; int sizeOfDataFold = wholeSet.Labels.RowCount / k; //the training set split TrainDataset = new DataSet( inputs: wholeSet.Inputs.SubMatrix(sizeOfDataFold, wholeSet.Inputs.RowCount - sizeOfDataFold, 0, wholeSet.Inputs.ColumnCount), labels: wholeSet.Labels.SubMatrix(sizeOfDataFold, wholeSet.Labels.RowCount - sizeOfDataFold, 0, wholeSet.Labels.ColumnCount)); //the validation set ValidationSplit = new DataSet( inputs: wholeSet.Inputs.SubMatrix(0, sizeOfDataFold, 0, wholeSet.Inputs.ColumnCount), labels: wholeSet.Labels.SubMatrix(0, sizeOfDataFold, 0, wholeSet.Labels.ColumnCount)); Console.WriteLine("Run number:{0}", 0); passedParams.trainingSet = TrainDataset; passedParams.validationSet = ValidationSplit; var lc = RunExperiment(trainer, passedParams, out MEE, out MSE); File.WriteAllText(Path.Combine(KRunfolderPath, "0_learningCurve.txt"), string.Join("\n", lc.Select(s => string.Join(",", s)))); avgMSE += MSE; for (int idxdataFold = 1; idxdataFold < k - 1; idxdataFold++) { Console.WriteLine("Run number:{0}", idxdataFold); //the training set split TrainDataset = new DataSet( inputs: wholeSet.Inputs.SubMatrix(0, idxdataFold * sizeOfDataFold, 0, wholeSet.Inputs.ColumnCount ).Stack(wholeSet.Inputs.SubMatrix(idxdataFold * sizeOfDataFold + sizeOfDataFold, wholeSet.Inputs.RowCount - idxdataFold * sizeOfDataFold - sizeOfDataFold, 0, wholeSet.Inputs.ColumnCount)), labels: wholeSet.Labels.SubMatrix(0, idxdataFold * sizeOfDataFold, 0, wholeSet.Labels.ColumnCount ).Stack(wholeSet.Labels.SubMatrix(idxdataFold * sizeOfDataFold + sizeOfDataFold, wholeSet.Labels.RowCount - idxdataFold * sizeOfDataFold - sizeOfDataFold, 0, wholeSet.Labels.ColumnCount))); //the validation set ValidationSplit = new DataSet( inputs: wholeSet.Inputs.SubMatrix(idxdataFold * sizeOfDataFold, sizeOfDataFold, 0, wholeSet.Inputs.ColumnCount), labels: wholeSet.Labels.SubMatrix(idxdataFold * sizeOfDataFold, sizeOfDataFold, 0, wholeSet.Labels.ColumnCount)); passedParams.trainingSet = TrainDataset; passedParams.validationSet = ValidationSplit; lc = RunExperiment(trainer, passedParams, out MEE, out MSE); File.WriteAllText(Path.Combine(KRunfolderPath, idxdataFold + "_learningCurve.txt"), string.Join("\n", lc.Select(s => string.Join(",", s)))); avgMSE += MSE; } //the training set split TrainDataset = new DataSet( inputs: wholeSet.Inputs.SubMatrix(0, (k - 1) * sizeOfDataFold, 0, wholeSet.Inputs.ColumnCount ).Stack(wholeSet.Inputs.SubMatrix((k - 1) * sizeOfDataFold + sizeOfDataFold, wholeSet.Inputs.RowCount - (k - 1) * sizeOfDataFold - sizeOfDataFold, 0, wholeSet.Inputs.ColumnCount)), labels: wholeSet.Labels.SubMatrix(0, (k - 1) * sizeOfDataFold, 0, wholeSet.Labels.ColumnCount ).Stack(wholeSet.Labels.SubMatrix((k - 1) * sizeOfDataFold + sizeOfDataFold, wholeSet.Labels.RowCount - (k - 1) * sizeOfDataFold - sizeOfDataFold, 0, wholeSet.Labels.ColumnCount))); //the validation set ValidationSplit = new DataSet( inputs: wholeSet.Inputs.SubMatrix((k - 1) * sizeOfDataFold, sizeOfDataFold, 0, wholeSet.Inputs.ColumnCount), labels: wholeSet.Labels.SubMatrix((k - 1) * sizeOfDataFold, sizeOfDataFold, 0, wholeSet.Labels.ColumnCount)); Console.WriteLine("Run number:{0}", k - 1); passedParams.trainingSet = TrainDataset; passedParams.validationSet = ValidationSplit; lc = RunExperiment(trainer, passedParams, out MEE, out MSE); File.WriteAllText(Path.Combine(KRunfolderPath, (k - 1) + "_learningCurve.txt"), string.Join("\n", lc.Select(s => string.Join(",", s)))); avgMSE += MSE; avgMSE /= k; Console.WriteLine("Average MSE:{0}", avgMSE); File.AppendAllLines(Path.Combine(reportsPath, "avgMSEs"), new string[] { string.Format("{0},{1}", kRunFolderName, avgMSE) }); }