private void MnistDemo() { BuilderInstance.Volume = new VolumeBuilder(); var datasets = new DataSets(); if (!datasets.Load(100)) { return; } // Create network this._net = new Net <float>(); this._net.AddLayer(new InputLayer(28, 28, 1)); this._net.AddLayer(new ConvLayer(5, 5, 8) { Stride = 1, Pad = 2 }); this._net.AddLayer(new ReluLayer()); this._net.AddLayer(new PoolLayer(2, 2) { Stride = 2 }); this._net.AddLayer(new ConvLayer(5, 5, 16) { Stride = 1, Pad = 2 }); this._net.AddLayer(new ReluLayer()); this._net.AddLayer(new PoolLayer(3, 3) { Stride = 3 }); this._net.AddLayer(new FullyConnLayer(10)); this._net.AddLayer(new SoftmaxLayer(10)); // Fluent version // this._net = FluentNet<float>.Create(24, 24, 1) // .Conv(5, 5, 8).Stride(1).Pad(2) // .Relu() // .Pool(2, 2).Stride(2) // .Conv(5, 5, 16).Stride(1).Pad(2) // .Relu() // .Pool(3, 3).Stride(3) // .FullyConn(10) // .Softmax(10) // .Build(); this._trainer = new SgdTrainer(this._net) { LearningRate = 0.01f, BatchSize = 1024, L2Decay = 0.001f, Momentum = 0.9f }; Console.WriteLine("Convolutional neural network learning...[Press any key to stop]"); do { var trainSample = datasets.Train.NextBatch(this._trainer.BatchSize); Train(trainSample.Item1, trainSample.Item2, trainSample.Item3); var testSample = datasets.Test.NextBatch(this._trainer.BatchSize); Test(testSample.Item1, testSample.Item3, this._testAccWindow); Console.WriteLine("Loss: {0} Train accuracy: {1}% Test accuracy: {2}%", this._trainer.Loss, Math.Round(this._trainAccWindow.Items.Average() * 100.0, 2), Math.Round(this._testAccWindow.Items.Average() * 100.0, 2)); Console.WriteLine("Example seen: {0} Fwd: {1}ms Bckw: {2}ms Updt: {3}ms", this._stepCount, Math.Round(this._trainer.ForwardTimeMs, 2), Math.Round(this._trainer.BackwardTimeMs, 2), Math.Round(this._trainer.UpdateWeightsTimeMs, 2)); } while (!Console.KeyAvailable); }
private void MnistDemo() { BuilderInstance <float> .Volume = new ConvNetSharp.Volume.GPU.Single.VolumeBuilder(); var datasets = new DataSets(); if (!datasets.Load(100)) { return; } // Create network this._net = new Net <float>(); this._net.AddLayer(new InputLayer <float>()); this._net.AddLayer(new ConvLayer <float>(5, 5, 8) { Stride = 1, Pad = 2, BiasPref = 0.1f }); this._net.AddLayer(new ReluLayer <float>()); this._net.AddLayer(new PoolLayer <float>(2, 2) { Stride = 2 }); this._net.AddLayer(new ConvLayer <float>(5, 5, 16) { Stride = 1, Pad = 2, BiasPref = 0.1f }); this._net.AddLayer(new ReluLayer <float>()); this._net.AddLayer(new PoolLayer <float>(3, 3) { Stride = 3 }); this._net.AddLayer(new FullyConnLayer <float>(10)); this._net.AddLayer(new SoftmaxLayer <float>()); // Fluent version //this._net = Net<float>.Create() // .Conv(5, 5, 8).Stride(1).Pad(2) // .Relu() // .Pool(2, 2).Stride(2) // .Conv(5, 5, 16).Stride(1).Pad(2) // .Relu() // .Pool(3, 3).Stride(3) // .FullyConn(10) // .Softmax() // .Build(); this._trainer = new SgdTrainer <float>(this._net, 0.01f) { BatchSize = 1024, //L2Decay = 0.001f, //Momentum = 0.9f }; if (File.Exists("loss.csv")) { File.Delete("loss.csv"); } Console.WriteLine("Convolutional neural network learning...[Press any key to stop]"); do { var trainSample = datasets.Train.NextBatch(this._trainer.BatchSize); Train(trainSample.Item1, trainSample.Item2, trainSample.Item3); var testSample = datasets.Test.NextBatch(this._trainer.BatchSize); Test(testSample.Item1, testSample.Item3, this._testAccWindow); Console.WriteLine("Loss: {0} Train accuracy: {1}% Test accuracy: {2}%", this._trainer.Loss, Math.Round(this._trainAccWindow.Items.Average() * 100.0, 2), Math.Round(this._testAccWindow.Items.Average() * 100.0, 2)); Console.WriteLine("Example seen: {0} Fwd: {1}ms Bckw: {2}ms Updt: {3}ms", this._stepCount, Math.Round(this._trainer.ForwardTimeMs, 2), Math.Round(this._trainer.BackwardTimeMs, 2), Math.Round(this._trainer.UpdateWeightsTimeMs, 2)); File.AppendAllLines("loss.csv", new[] { $"{this._stepCount}, {this._trainer.Loss}, { Math.Round(this._trainAccWindow.Items.Average() * 100.0, 2)}, {Math.Round(this._testAccWindow.Items.Average() * 100.0, 2)}" }); } while (!Console.KeyAvailable); // Display graph //var vm = new ViewModel<float>(_net.Op); //var app = new Application(); //app.Run(new GraphControl { DataContext = vm }); this._net.Dispose(); this._trainer.Dispose(); }