[Test] public void MultinomialRegression() { CleanMem_(); const long batchSize = 1000L; const long epochs = 3; var model = MultinomialRegressionModel(); var ctx = Context.GpuContext(0); var opt = new GradientDescentOptimizer(ctx, model.Loss.Loss, 0.0005); opt.Initalize(); var mnist = new MNIST(); var batcher = new Batcher(ctx, mnist.TrainImages, mnist.TrainLabels); for (var e = 1; e <= epochs; ++e) { var i = 0; while (batcher.Next(batchSize, opt, model.Images, model.Labels)) { i++; opt.Forward(); opt.Backward(); opt.Optimize(); if ((i % 10 == 0) || ((i == 1) && (e == 1))) { PrintStatus(e, i, opt, model, mnist.ValidationImages, mnist.ValidationLabels); } } } PrintResult(opt, model, mnist.TestImages, mnist.TestLabels); CleanMem_(); }
[Test] public void MultiLayerPerceptron() { CleanMem_(); const double clipNorm = 3.0; const long batchSize = 1000L; const long epochs = 3; var model = MultiLayerPerceptronModel(); var ctx = Context.GpuContext(0); var opt = new RMSpropOptimizer(ctx, model.Loss.Loss, 0.005, 0.9, float.Epsilon, new GlobalNormGradientClipper(clipNorm)); opt.Initalize(); var mnist = new MNIST(); var batcher = new Batcher(ctx, mnist.TrainImages, mnist.TrainLabels); for (var e = 1; e <= epochs; ++e) { var i = 0; while (batcher.Next(batchSize, opt, model.Images, model.Labels)) { i++; opt.Forward(); opt.Backward(); opt.Optimize(); if ((i % 10 == 0) || ((i == 1) && (e == 1))) { PrintStatus(e, i, opt, model, mnist.ValidationImages, mnist.ValidationLabels); } } } PrintResult(opt, model, mnist.TestImages, mnist.TestLabels); }
[Test] public void ConvolutionalNeuralNetwork() { CleanMem_(); const long batchSize = 500L; const long epochs = 2; var model = ConvolutionalNeuralNetworkModel(); var ctx = Context.GpuContext(0); var opt = new RMSpropOptimizer(ctx, model.Loss.Loss, 0.005, 0.9, 1e-9); opt.Initalize(); var mnist = new MNIST(); var batcher = new Batcher(ctx, mnist.TrainImages, mnist.TrainLabels); for (var e = 1; e <= epochs; ++e) { var i = 0; while (batcher.Next(batchSize, opt, model.Images, model.Labels)) { i++; opt.Forward(); opt.Backward(); opt.Optimize(); if ((i % 20 == 0) || ((i == 1) && (e == 1))) { PrintStatus(e, i, opt, model, mnist.ValidationImages, mnist.ValidationLabels); } } } PrintResult(opt, model, mnist.TestImages, mnist.TestLabels); CleanMem_(); }
[Test] public void CompareMultiLayerPerceptron() { var model = MultiLayerPerceptronModel(); var ctx = Context.GpuContext(0); var memMb = ctx.ToGpuContext().Gpu.Device.TotalMemory / 1024.0 / 1024.0; if (memMb < 4096.0) { Assert.Inconclusive("Need more Gpu memory."); } var opt = new GradientDescentOptimizer(ctx, model.Loss.Loss, 0.00008); // now we need to initalize the parameters for the optimizer opt.Initalize(); // load mnist data var mnist = new MNIST(); var batcher = new Batcher(ctx, mnist.TrainImages, mnist.TrainLabels); var timer = Stopwatch.StartNew(); for (var i = 0; i < 1; ++i) { batcher.Next(5000, opt, model.Images, model.Labels); opt.Forward(); opt.Backward(); opt.Optimize(); } timer.Stop(); Console.WriteLine(timer.Elapsed); timer.Restart(); for (var i = 0; i < 5; ++i) { batcher.Next(10000, opt, model.Images, model.Labels); opt.Forward(); opt.Backward(); opt.Optimize(); } ctx.ToGpuContext().Stream.Synchronize(); timer.Stop(); Console.WriteLine(timer.Elapsed); timer.Restart(); PrintResult(opt, model, mnist.TestImages, mnist.TestLabels); timer.Stop(); Console.WriteLine(timer.Elapsed); CleanMem_(); }
[Test] public void CompareConvolutionalNeuralNetwork() { var model = ConvolutionalNeuralNetworkModel(); var ctx = Context.GpuContext(0); var memMb = ctx.ToGpuContext().Gpu.Device.TotalMemory / 1024.0 / 1024.0; if (memMb < 4096.0) { Assert.Inconclusive("Need more Gpu memory."); } var opt = new GradientDescentOptimizer(ctx, model.Loss.Loss, 0.000008); opt.Initalize(); var mnist = new MNIST(); var batcher = new Batcher(ctx, mnist.TrainImages, mnist.TrainLabels); var timer = Stopwatch.StartNew(); for (var i = 0; i < 2; ++i) { batcher.Next(2500, opt, model.Images, model.Labels); opt.Forward(); opt.Backward(); opt.Optimize(); } timer.Stop(); Console.WriteLine(timer.Elapsed); timer.Restart(); for (var i = 0; i < 20; ++i) { batcher.Next(2500, opt, model.Images, model.Labels); opt.Forward(); opt.Backward(); opt.Optimize(); } ctx.ToGpuContext().Stream.Synchronize(); timer.Stop(); Console.WriteLine(timer.Elapsed); timer.Restart(); PrintResult(opt, model, mnist.TestImages, mnist.TestLabels); timer.Stop(); Console.WriteLine(timer.Elapsed); CleanMem_(); }