Beispiel #1
0
        private static void TrainNetwork(FeedForwardNeuralNet net)
        {
            List <double[]> trainingInput    = new List <double[]>();
            List <double[]> trainingOutput   = new List <double[]>();
            List <double[]> validationInput  = new List <double[]>();
            List <double[]> validationOutput = new List <double[]>();

            int i = 0;

            foreach (var image in MnistReader.ReadTrainingData())
            {
                double[] input  = Encode(image.Data);
                double[] output = Encode(image.Label);

                if (i < 50000)
                {
                    trainingInput.Add(input);
                    trainingOutput.Add(output);
                }
                else
                {
                    validationInput.Add(input);
                    validationOutput.Add(output);
                }

                i++;
            }

            Console.WriteLine("Started Training:");
            net.Train(trainingInput, trainingOutput, 30, 10, 5.0, validationInput, validationOutput);
            Console.WriteLine("Finished training.");
        }
Beispiel #2
0
        public static void Main(string[] args)
        {
            const double high = .99;
            const double low  = .1;

            var doubleTrainingSet = new DoubleTrainingSet
            {
                InputSet = new[]
                {
                    new[] { high, high },
                    new[] { low, high },
                    new[] { high, low },
                    new[] { low, low }
                },
                OutputSet = new[]
                {
                    new[] { low },
                    new[] { high },
                    new[] { high },
                    new[] { low }
                },
                Tollerance       = 0.0000000000001,
                IterationsPerRun = 5
            };

            var configuration = new NeuralNetConfiguration
            {
                HiddenLayerNodes = new Dictionary <int, int>
                {
                    { 1, 6 },
                    { 2, 6 }
                },
                LearningSpeed         = 3,
                NrOfInputNeurons      = doubleTrainingSet.InputSet.Max(d => d.Length),
                NumberOfOutputNeurons = doubleTrainingSet.OutputSet.Max(d => d.Length)
            };

            var net = new FeedForwardNeuralNet(configuration);

            net.Initialize(1);

            var count = 0;

            while (!doubleTrainingSet.Finished)
            {
                count++;

                net.Train(doubleTrainingSet);

                Console.SetCursorPosition(0, 1);
                foreach (var output in doubleTrainingSet.CalculatedOutputSet)
                {
                    var sb = new StringBuilder();
                    foreach (var d in output)
                    {
                        sb.Append(Math.Round(d, 14) + " ");
                    }
                    Console.WriteLine(sb.ToString());
                }
            }

            Console.WriteLine($"{count * doubleTrainingSet.IterationsPerRun} iterations required for training");

            Console.ReadKey();
        }