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()); } }