static private void Train(double[][] Data, int input, int output) { //set parameters in layers int numHidden = 10; //create layers and construct them List <NNlayers> Nlist = new List <NNlayers>(); NNlayers N1 = new NNlayers(NNlayers.Layers_family.Affine, input, numHidden); NNlayers N2 = new NNlayers(NNlayers.Layers_family.BN, numHidden, numHidden); NNlayers N3 = new NNlayers(NNlayers.Layers_family.Tanh, numHidden, numHidden); NNlayers N4 = new NNlayers(NNlayers.Layers_family.Affine, numHidden, output); Nlist.Add(N1); Nlist.Add(N2); Nlist.Add(N3); Nlist.Add(N4); //create a NN class Ann = new ArtificialNeuralNetwork(Nlist.ToArray(), input, output); Ann.PositiveLimit = 0.5;//default = 0.7 int maxEpochs = 100; double learnRate = 0.05; //create a error monitor backgroundworker BackgroundWorker BGW = new BackgroundWorker(); BGW.DoWork += new DoWorkEventHandler(backgroundWorker_NN_DoWork); BGW.RunWorkerAsync(maxEpochs); //train Ann.TrainModel(Data, maxEpochs, learnRate, 0); double trainAcc = Ann.Accu_train; Console.Write("\nFinal accuracy on train data = " + trainAcc.ToString("F4")); double testAcc = Ann.Accu_test; Console.Write("\nFinal accuracy on test data = " + testAcc.ToString("F4")); Console.Write("\nTrain finish"); string site = System.DateTime.Now.ToString("yyMMddHHmm") + "_learnproj"; Directory.CreateDirectory(site); Ann.Save_network(site, learnRate); Ann.Save_H5files(site); Console.Write("\nVariables have been save in " + site); }
static private void Train(double[][] Data, int input, int output) { //set parameters in layers int numHidden = 100; int numHidden2 = 100; int maps = 16; int Deep1 = 20; int Deep2 = 40; int windows = 2; //create layers and construct them List <NNlayers> Nlist = new List <NNlayers>(); NNlayers C1 = new NNlayers(NNlayers.Layers_family.Convolution, input, Deep1, 3, false); NNlayers C2 = new NNlayers(NNlayers.Layers_family.Maxpool, (input - 3 + 1), Deep1, 2); int numCov = (int)Math.Ceiling((double)(input - 3 + 1) / 2); NNlayers N1 = new NNlayers(NNlayers.Layers_family.BN, numCov * Deep1, numCov * Deep1); NNlayers H2 = new NNlayers(NNlayers.Layers_family.ReLU, numCov * Deep1, numCov * Deep1); NNlayers C3 = new NNlayers(NNlayers.Layers_family.Convolution, numCov, Deep2, 3, Deep1, false); NNlayers C4 = new NNlayers(NNlayers.Layers_family.Meanpool, (numCov - 3 + 1), Deep2, 2); int numCov2 = (int)Math.Ceiling((double)(numCov - 3 + 1) / 2) * Deep2; //NNlayers N1 = new NNlayers(NNlayers.Layers_family.Affine, (int)Math.Ceiling((double)(input - mapsize + 1)/windows)* maps, numHidden); NNlayers N2 = new NNlayers(NNlayers.Layers_family.BN, numCov2, numCov2); //NNlayers N3 = new NNlayers(NNlayers.Layers_family.ReLU, numHidden, numHidden); NNlayers H3 = new NNlayers(NNlayers.Layers_family.ReLU, numCov2, numCov2); NNlayers N10 = new NNlayers(NNlayers.Layers_family.Affine, numCov2, output); //NNlayers N11 = new NNlayers(NNlayers.Layers_family.Sigmoid, output, output); Nlist.Add(C1); Nlist.Add(C2); Nlist.Add(N1); Nlist.Add(H2); Nlist.Add(C3); Nlist.Add(C4); //Nlist.Add(N1); Nlist.Add(N2); Nlist.Add(H3); Nlist.Add(N10); //Nlist.Add(N11); //create a NN class Ann = new ArtificialNeuralNetwork(Nlist.ToArray(), input, output); Ann.PositiveLimit = 0.7;//default = 0.7 Ann.Batchsize = 100; int maxEpochs = 4000; double learnRate = 0.005; //create a error monitor backgroundworker BackgroundWorker BGW = new BackgroundWorker(); BGW.DoWork += new DoWorkEventHandler(backgroundWorker_NN_DoWork); BGW.RunWorkerAsync(maxEpochs); //train Ann.TrainModel(Data, maxEpochs, learnRate, 0); double trainAcc = Ann.Accu_train; Console.Write("\nFinal accuracy on train data = " + trainAcc.ToString("F4")); double testAcc = Ann.Accu_test; Console.Write("\nFinal accuracy on test data = " + testAcc.ToString("F4")); Console.Write("\nTrain finish"); string site = System.DateTime.Now.ToString("yyMMddHHmm") + "_learnproj"; Directory.CreateDirectory(site); Ann.Save_network(site, learnRate); Ann.Save_H5files(site); Console.Write("\nVariables have been save in " + site); }