Exemple #1
0
        public static NeuralNetwork GetBrain()
        {
            if (_brain == null)
            {
                NeuralNetworkConfig nnConfig = new NeuralNetworkConfig();
                nnConfig.AddLayer(LayerType.Input, 5); //Vision inouts
                nnConfig.AddLayer(LayerType.Intermediate, 12, ActivationType.LeakyRelu);
                nnConfig.AddLayer(LayerType.Output, 5, ActivationType.LeakyRelu); //Movement decisions.
                _brain = new NeuralNetwork(nnConfig, 0.02f);

                for (int i = 0; i < 10000; i++)
                {
                    //Left side detection, go right.
                    _brain.BackPropagate(TrainingScenerio(1, 0, 0, 0, 0), TrainingDecision(1, 1, 1, 1, 0));
                    _brain.BackPropagate(TrainingScenerio(0, 1, 0, 0, 0), TrainingDecision(1, 1, 1, 1, 0));
                    _brain.BackPropagate(TrainingScenerio(1, 1, 0, 0, 0), TrainingDecision(1, 1, 1, 1, 0));

                    //Right side detection, go left.
                    _brain.BackPropagate(TrainingScenerio(0, 0, 0, 0, 1), TrainingDecision(1, 0, 1, 1, 0));
                    _brain.BackPropagate(TrainingScenerio(0, 0, 0, 1, 0), TrainingDecision(1, 0, 1, 1, 0));
                    _brain.BackPropagate(TrainingScenerio(0, 0, 0, 1, 1), TrainingDecision(1, 0, 1, 1, 0));

                    //Front side detection, so left or right.
                    _brain.BackPropagate(TrainingScenerio(0, 0, 1, 0, 0), TrainingDecision(1, 0, 1, 1, 0));
                    _brain.BackPropagate(TrainingScenerio(0, 1, 1, 1, 0), TrainingDecision(1, 1, 1, 1, 0));
                    _brain.BackPropagate(TrainingScenerio(1, 1, 1, 1, 1), TrainingDecision(1, 1, 1, 1, 0));

                    //No objects dection, speed up and cruise.
                    _brain.BackPropagate(TrainingScenerio(0, 0, 0, 0, 0), TrainingDecision(0.4f, 0.4f, 0.4f, 0.9f, 0.9f));
                }
            }

            return _brain.Clone();
        }
Exemple #2
0
        private static void Start()
        {
            NeuralNetworkConfig nnConfig = new NeuralNetworkConfig();

            nnConfig.AddLayer(LayerType.Input, 3);
            nnConfig.AddLayer(LayerType.Intermediate, 5, ActivationType.LeakyRelu);
            nnConfig.AddLayer(LayerType.Output, 1, ActivationType.LeakyRelu);

            nn = new NeuralNetwork(nnConfig, 0.01f);

            nn.Load("C:\\network.txt");

            //Train the network
            for (int i = 0; i < 20000; i++)
            {
                nn.BackPropagate(new float[] { 0, 0, 0 }, new float[] { 0 });
                nn.BackPropagate(new float[] { 1, 0, 0 }, new float[] { 1 });
                nn.BackPropagate(new float[] { 0, 1, 0 }, new float[] { 1 });


                nn.BackPropagate(new float[] { 0, 0, 1 }, new float[] { 1 });
                nn.BackPropagate(new float[] { 0, 0, 1 }, new float[] { 0 });
                nn.BackPropagate(new float[] { 0, 0, 1 }, new float[] { 1 });
                nn.BackPropagate(new float[] { 0, 0, 1 }, new float[] { 1 });
                nn.BackPropagate(new float[] { 0, 0, 1 }, new float[] { 0 });


                nn.BackPropagate(new float[] { 1, 1, 0 }, new float[] { 1 });
                nn.BackPropagate(new float[] { 0, 1, 1 }, new float[] { 1 });
                nn.BackPropagate(new float[] { 1, 0, 1 }, new float[] { 1 });
                nn.BackPropagate(new float[] { 1, 1, 1 }, new float[] { 1 });
            }
            Console.WriteLine($"Cost: {nn.cost:0.########}");

            nn.Save("C:\\network.txt");


            VerboseFeedForward(nn, new float[] { 0, 0, 0 });
            VerboseFeedForward(nn, new float[] { 1, 0, 0 });
            VerboseFeedForward(nn, new float[] { 0, 1, 0 });
            VerboseFeedForward(nn, new float[] { 0, 0, 1 });
            VerboseFeedForward(nn, new float[] { 1, 1, 0 });
            VerboseFeedForward(nn, new float[] { 0, 1, 1 });
            VerboseFeedForward(nn, new float[] { 1, 0, 1 });
            VerboseFeedForward(nn, new float[] { 1, 1, 1 });

            //We want the gate to simulate 3 input or gate (A or B or C)
            // 0 0 0    => 0
            // 1 0 0    => 1
            // 0 1 0    => 1
            // 0 0 1    => 1
            // 1 1 0    => 1
            // 0 1 1    => 1
            // 1 0 1    => 1
            // 1 1 1    => 1
        }