예제 #1
0
        private static void Main(string[] args)
        {
            MNISTDataConverter conmnist = new MNISTDataConverter();

            conmnist.ConvertMNIST();
            AxialRotateDataConverter con = new AxialRotateDataConverter();

            con.ConvertAxialRotatation();
        } // Main
예제 #2
0
        private void button2_Click(object sender, EventArgs e)
        {
            //以下为数据准备部分
            string trainDataPath  = System.IO.Path.Combine(Application.StartupPath, "MNIST", "train-images.idx3-ubyte");
            string trainLabelPath = System.IO.Path.Combine(Application.StartupPath, "MNIST", "train-labels.idx1-ubyte");
            string testDataPath   = System.IO.Path.Combine(Application.StartupPath, "MNIST", "t10k-images.idx3-ubyte");
            string testLabelPath  = System.IO.Path.Combine(Application.StartupPath, "MNIST", "t10k-labels.idx1-ubyte");
            MNISTDataProcessing dataProcessing = new MNISTDataProcessing(new MNISTDataConverter(new MNISTClassifier()));
            MNISTEvaluater      evaluater      = new MNISTEvaluater(new MNISTDataConverter(new MNISTClassifier()));
            var inputDataSet   = dataProcessing.GetData(trainDataPath, trainLabelPath, 60000);
            var processDataSet = dataProcessing.GetProcessDataCollection(60000, inputDataSet);

            ProcessData[]      trainDataSet;
            List <ProcessData> testDataSet1;
            List <ProcessData> testDataSet2;

            trainDataSet = processDataSet.ToArray();//训练集
            ILookup <double, ProcessData> dataDistribution = trainDataSet.ToLookup(r => MNISTDataConverter.GetFromOnehot(r.Label[0, 0].ToRowMajorArray()));

            testDataSet1 = dataProcessing.GetProcessDataCollection(5000, dataProcessing.GetData(testDataPath, testLabelPath, 5000));   //测试集1
            testDataSet2 = dataProcessing.GetProcessDataCollection(10000, dataProcessing.GetData(testDataPath, testLabelPath, 10000)); //测试集2
            listBox1.Items.Add(DateTime.Now + " : DataPreparation Completed.");

            Model avilaFNN = new Model(null, "1").LoadModel <Model>(@"C:\Users\liu_y\source\repos\CSahrp\NeuralNetwork-v0.3\NeuralNetwork-v0.1\bin\Debug\Models\MNIST_CNN_v2-0.867.model");

            listBox1.Items.Add(DateTime.Now + " : ModelLoad Completed.");

            ////模型建立部分
            //Model avilaFNN = new Model(new CrossEntropyLoss(), "MNIST_CNN_v1",
            //    new ConvolutionalLayer(new Direct(), false, new Tuple<int, int>(28, 28), 5, 1, 3, ConvolutionMode.Narrow, new Normal(0, 2)),
            //    new PoolingLayer(2, false, 3, new Tuple<int, int>(24, 24), PoolingMode.Max),
            //    new ConvolutionalLayer(new Direct(), false, new Tuple<int, int>(12, 12), 5, 3, 5, ConvolutionMode.Narrow, new Normal(0, 2)),
            //    new PoolingLayer(2, true, 5, new Tuple<int, int>(8, 8), PoolingMode.Max),
            //    new FullConnectLayer(new Direct(), 80, 80, true, new Normal(0, 1)),
            //    new FullConnectLayer(new Sigmoid(), 80, 32, false, new Normal(0, 2)),
            //    new SoftMaxLayer(32, 10, new Normal(0.5, 1))
            //    );

            //Trainer trainer1 = new Trainer(400, false, 0, new ExponentialDelayOptimizer(2, 0.9, 0.08));
            //avilaFNN = (Model)trainer1.Train(avilaFNN, trainDataSet);
            //trainDataSet = trainDataSet.SelectPermutation().ToArray();
            ////Console.WriteLine(evaluater.Evaluate(testDataSet1, avilaFNN, new AvilaClassifier()));
            //listBox1.Items.Add(DateTime.Now + $" : 1st Training Completed, Accuracy is:{evaluater.Evaluate(testDataSet1, avilaFNN, new AvilaClassifier())}");
            //Trainer trainer3 = new Trainer(300, false, 0, new ExponentialDelayOptimizer(1.5, 0.9, 0.05));
            //avilaFNN = (Model)trainer3.Train(avilaFNN, trainDataSet);
            ////Console.WriteLine(evaluater.Evaluate(testDataSet1, avilaFNN, new AvilaClassifier()));
            //listBox1.Items.Add(DateTime.Now + $" : 2nd Training Completed, Accuracy is:{evaluater.Evaluate(testDataSet1, avilaFNN, new AvilaClassifier())}");


            //for (int i = 0; i <= 4; i++)
            //{
            //    trainDataSet = trainDataSet.SelectPermutation().ToArray();
            //    //Trainer trainer2 = new Trainer(300, false, 0, new TriangularCyclicOptimizer(1000,1,0.05,0.95));
            //    Trainer trainer2 = new Trainer(200, false, 0, new TriangularCyclicOptimizer(1000,1,0.1,0.95));
            //    avilaFNN = (Model)trainer2.Train(avilaFNN, trainDataSet);
            //    //Console.WriteLine(avilaFNN.layers[2].Weight[0, 0]);
            //    //Console.WriteLine($"第1轮第{i}次循环:" + evaluater.Evaluate(testDataSet1, avilaFNN, new AvilaClassifier()));
            //    listBox1.Items.Add(DateTime.Now + $" : {i + 1}th Training Completed , Accuracy is:{evaluater.Evaluate(testDataSet1, avilaFNN, new AvilaClassifier())}");
            //    var acc = evaluater.EvaluateInDetails(testDataSet2, avilaFNN);
            //    avilaFNN.SaveModel(accuracy: acc);
            //}
            for (int i = 0; i <= 14; i++)
            {
                trainDataSet = trainDataSet.SelectPermutation().ToArray();
                //Trainer trainer2 = new Trainer(300, false, 0, new TriangularCyclicOptimizer(1000,1,0.05,0.95));
                Trainer trainer2 = new Trainer(200, false, 0, new ExponentialDelayOptimizer(0.035, 0.9, 0.1));
                avilaFNN = (Model)trainer2.Train(avilaFNN, trainDataSet);
                //Console.WriteLine(avilaFNN.layers[2].Weight[0, 0]);
                //Console.WriteLine($"第1轮第{i}次循环:" + evaluater.Evaluate(testDataSet1, avilaFNN, new AvilaClassifier()));
                listBox1.Items.Add(DateTime.Now + $" : {i + 1}th Training Completed , Accuracy is:{evaluater.Evaluate(testDataSet1, avilaFNN, new AvilaClassifier())}");
                var acc = evaluater.EvaluateInDetails(testDataSet2, avilaFNN);
                avilaFNN.SaveModel(accuracy: acc);
            }
            trainDataSet = trainDataSet.SelectPermutation().ToArray();
            Trainer trainer4 = new Trainer(100, false, 0, new ExponentialDelayOptimizer(0.02, 0.9, 0.1));

            avilaFNN = (Model)trainer4.Train(avilaFNN, trainDataSet);
            listBox1.Items.Add(DateTime.Now + $" : 22th Training Completed, Accuracy is:{evaluater.Evaluate(testDataSet1, avilaFNN, new AvilaClassifier())}");

            var accuracy = evaluater.EvaluateInDetails(testDataSet2, avilaFNN);

            avilaFNN.SaveModel(accuracy: accuracy);
        }