public static void Train(int trainingCount, double learnRate) { Console.WriteLine("Starting MNIST training"); Console.Write("Loading samples... "); var mnistSamples = new MnistSamples(); Console.WriteLine("done"); Console.Write("Creating network... "); var net = new Network(784, new[] { 500, 100 }, 10, learnRate); Console.WriteLine("done"); var training = mnistSamples.Training.Take(trainingCount).ToArray(); var testing = mnistSamples.Testing.Take(training.Length).ToArray(); var trainer = new Trainer(net, training, CheckCorrect, testing); trainer.TrainUntilDone(true); }
public Trainer(Network net, Sample[] cases, CheckCorrect checkCorrect, Sample[] testCases = null) { this.net = net; this.cases = cases; this.caseCount = cases.Length; if (caseCount == 0) throw new Exception("Don't have any samples to train with!"); var sampleSample = cases[0]; if (net.InputSize != sampleSample.input.Length) throw new Exception(string.Format( "Net input size: {0}, doesn't match sample input size: {1}.", net.InputSize, sampleSample.input.Length)); if (net.OutputSize != sampleSample.target.Length) throw new Exception(string.Format( "Net output size: {0}, doesn't match sample target size: {1}.", net.OutputSize, sampleSample.target.Length)); this.checkCorrect = checkCorrect; this.testCases = testCases ?? new Sample[0]; }
public static void TrainNot() { var net = new Network(1, new int[0], 1, 0.5); var trainer = new Trainer(net, notCases, CheckCorrect, notCases); trainer.TrainUntilDone(); }