private static void Main(string[] args) { MNISTDataConverter conmnist = new MNISTDataConverter(); conmnist.ConvertMNIST(); AxialRotateDataConverter con = new AxialRotateDataConverter(); con.ConvertAxialRotatation(); } // Main
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); }