Exemple #1
0
        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");
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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) });
        }