Exemple #1
0
        static void Main(string[] args)
        {
            FullyConnectedNetwork net = new FullyConnectedNetwork(2,
                                                                  2, 2, 1);
            BackPropagationGradiant teacher = new BackPropagationGradiant(net);

            Sample sample1 = new Sample()
            {
                Inputs  = new double[] { 0, 0 },
                Outputs = new double[] { 1 },
            };
            Sample sample2 = new Sample()
            {
                Inputs  = new double[] { 1, 0 },
                Outputs = new double[] { -1 },
            };
            Sample sample3 = new Sample()
            {
                Inputs  = new double[] { 0, 1 },
                Outputs = new double[] { -1 },
            };
            Sample sample4 = new Sample()
            {
                Inputs  = new double[] { 1, 1 },
                Outputs = new double[] { 1 },
            };

            teacher.AddSample(sample1);
            teacher.AddSample(sample2);
            teacher.AddSample(sample3);
            teacher.AddSample(sample4);

            Console.WriteLine("*************");
            Console.WriteLine("Test XOR gate");
            Console.WriteLine("*************");

            while (true)
            {
                for (int x = 0; x < 2; x++)
                {
                    for (int i = 0; i < 20; i++)
                    {
                        teacher.LearnOneLoopBase();
                    }
                    Console.WriteLine("3 learnings, mean error: " + teacher.MeanQuadraticError);
                    Console.WriteLine("Ouputs, with {0,1}");
                    DisplayVector(net.ComputeOutputs(sample2.Inputs));
                    Console.WriteLine("Ouputs, with {1,1}");
                    DisplayVector(net.ComputeOutputs(sample4.Inputs));
                    Console.WriteLine(Environment.NewLine);
                }

                DisplayNeuronalNetwork(net);
                Console.WriteLine("done.");
                Console.ReadLine();

                Console.Clear();
            }
        }
        public void LearnSample()
        {
            try
            {
                FullyConnectedNetwork net = new FullyConnectedNetwork(2,
                                                                      2, 2, 1);
                BackPropagationGradiant teacher = new BackPropagationGradiant(net);

                double[] ZeroInput        = new double[] { 0, 0 };
                double[] OutputsZeroInput = new double[] { 0 };
                net.ComputeOutputs(ZeroInput);

                Assert.AreEqual(0, teacher.ComputeQuadraticError(OutputsZeroInput)); //should equals because 0

                Sample sample1 = new Sample()
                {
                    Inputs  = ZeroInput,
                    Outputs = OutputsZeroInput
                };
                teacher.LearnOneSample(sample1);

                double[] OnesInput        = new double[] { 1, 1 };
                double[] OutputsOnesInput = new double[] { 1 };
                net.ComputeOutputs(OnesInput);
                double errorNoLearn = teacher.ComputeQuadraticError(OutputsOnesInput);
                Assert.AreNotEqual(0, errorNoLearn);

                Sample sample2 = new Sample()
                {
                    Inputs  = OnesInput,
                    Outputs = OutputsOnesInput
                };
                teacher.LearnOneSample(sample2);
                net.ComputeOutputs(OnesInput);
                double errorLearn = teacher.ComputeQuadraticError(OutputsOnesInput);
                Assert.IsTrue(errorLearn < errorNoLearn);
            }
            catch (Exception ex)
            {
                Assert.Fail(ex.ToString());
            }
        }