public BPLearningWindow(Network network) { InitializeComponent(); this.network = network; this.bpLearning = new BackPropagationLearning((ActivationNetwork)network); }
static void Main(string[] args) { // var network = new ActivationNetwork( // new SigmoidFunction(), // threshold activation function // 2, // 2 inputs // 2, // 1); // 1 layer with 1 neuron. // //var net = new ActivationNetwork(new SigmoidFunction(2), 2, new int[1] {1}); // network[0][0].Threshold = 3.9; // network[0][0].Bias = 0; // // network[0][1].Threshold = 6.86; // network[0][1].Bias = 0; // // network[1][0].Threshold = 4.33; // network[1][0].Bias = 0; // // network[0][0][0] = 6.54; // network[0][0][1] = 6.51; // // network[0][1][0] = 4.47; // network[0][1][1] = 4.46; // // network[1][0][0] = 9.45; // network[1][0][1] = -10.22; // // NeuronalNetworkSerializer.SerializeToXml(network, @"network.xml"); // var network2 = NeuronalNetworkSerializer.DeserializeFromXmlFile(@"E:\Users\radoslaw.piekarz\Documents\GitHub\Neuronal-Networks\src\NeuronalNetworks\NeuronalNetworks.Tests\Resources\and.xml"); // // // // // // //var network2 = NeuronalNetworkSerializer.DeserializeFromXmlFile(@"network.xml"); // // // Console.WriteLine(network2.Compute(new double[] {0.5, 0.5})[0]); // Console.WriteLine(network2.Compute(new double[] { 1, 1 })[0]); // Console.WriteLine(network2.Compute(new double[] { 0, 0 })[0]); // Console.WriteLine(network2.Compute(new double[] { 0, 1 })[0]); // Console.WriteLine(network2.Compute(new double[] { 1, 0 })[0]); // Console.Read(); // KohonenNetwork network = new KohonenNetwork(9, 2 * 2); // // create learning algorithm // SOMLearning trainer = new SOMLearning(network); // // double[][] inputs = new double[4][]; // // for (int i = 0; i < inputs.Length; i++) // { // inputs[i] = new double[9]; // } // // // inputs[0][0] = 0; // inputs[0][1] = 0; // inputs[0][2] = 1; // inputs[0][3] = 0; // inputs[0][4] = 0; // inputs[0][5] = 1; // inputs[0][6] = 0; // inputs[0][7] = 0; // inputs[0][8] = 1; // // // inputs[1][0] = 0; // inputs[1][1] = 1; // inputs[1][2] = 0; // inputs[1][3] = 1; // inputs[1][4] = 1; // inputs[1][5] = 1; // inputs[1][6] = 0; // inputs[1][7] = 1; // inputs[1][8] = 0; // // inputs[2][0] = 1; // inputs[2][1] = 1; // inputs[2][2] = 1; // inputs[2][3] = 1; // inputs[2][4] = 0; // inputs[2][5] = 1; // inputs[2][6] = 1; // inputs[2][7] = 1; // inputs[2][8] = 1; // // inputs[3][0] = 1; // inputs[3][1] = 0; // inputs[3][2] = 0; // inputs[3][3] = 0; // inputs[3][4] = 1; // inputs[3][5] = 0; // inputs[3][6] = 0; // inputs[3][7] = 0; // inputs[3][8] = 1; // // // network.Randomize(); // network.Randomize(); // //trainer.ConscienceValue = 0.3; // for (int i = 0; i < 32000; i++ ) // { // if (i == 0) // trainer.LearningRadius = 1.0; // // if (i == 8000) // trainer.LearningRadius = 0.5; // // if (i == 16000) // trainer.LearningRadius = 0.25; // // if (i == 24000) // trainer.LearningRadius = 0.0; // // foreach (var input in inputs) // { // // trainer.Run(input); // // } // } // // // // trainer.LearningRate = 0.1; // // trainer.LearningRadius = 2; // // // // var c = new Conscience(4, 1); // // // // var n = new TwoDimensionalNeighborhood(6, 3); // // for (int i = 0; i < 8000; i++) // // { // // foreach (var input in inputs) // // { // // trainer.Run2(input, i, 32000, c); // // } // // } // // // // trainer.LearningRate = 0.2; // // trainer.LearningRadius = 1; // // for (int i = 8000; i < 16000; i++) // // { // // foreach (var input in inputs) // // { // // trainer.Run2(input, i, 32000, c); // // } // // } // // // // trainer.LearningRate = 0.1; // // trainer.LearningRadius = 0.1; // // for (int i = 16000; i < 32000; i++) // // { // // foreach (var input in inputs) // // { // // trainer.Run2(input, i, 32000, c); // // } // // } // // // // // // // // // // network.Layers[0].Neurons[0].Weights = new double[] { 0.0, 0.0, 0.5773, 0.0, 0.0, 0.5773, 0.0, 0.0, 0.5773}; // // network.Layers[0].Neurons[1].Weights = new double[] { 0.0, 0.4472, 0.0, 0.4472, 0.4472, 0.4472, 0.0, 0.4472, 0.0 }; // // network.Layers[0].Neurons[2].Weights = new double[] { 0.5773, 0.0, 0.0, 0.0, 0.5773, 0.0, 0.0, 0.0, 0.5773 }; // // network.Layers[0].Neurons[3].Weights = new double[] { 0.3535, 0.3535, 0.3535, 0.3535, 0.0, 0.3535, 0.3535, 0.3535, 0.3535 }; // // // foreach (var input in inputs) // { // network.Compute(input); // Console.WriteLine("Winner " + network.GetWinner()); // foreach (var d in network.Output) // { // Console.WriteLine(d); // } // Console.WriteLine("--------"); // } // // Console.WriteLine("--------"); // // foreach (var neuron in network.Layers[0].Neurons) // { // foreach (var input in neuron.Weights) // { // Console.WriteLine("W " + input); // } // // Console.WriteLine(" - "); // } /* double[][] inputs = new double[8][] { new double[] {0, 0, 0}, new double[] {0, 0, 1}, new double[] {0, 1, 0}, new double[] {0, 1, 1}, new double[] {1, 0, 0}, new double[] {1, 0, 1}, new double[] {1, 1, 0}, new double[] {1, 1, 1}, }; double[][] outputs = new double[8][] { new double[]{0}, new double[]{1}, new double[]{1}, new double[]{0}, new double[]{1}, new double[]{0}, new double[]{0}, new double[]{1} }; double[][] tests = new double[3][] { new double[] {0, 0, 0}, new double[] {0, 0, 1}, new double[] {1, 1, 1}, }; double[][] testsResults = new double[3][] { new double[] {0, 0, 0}, new double[] {1, 0, 1}, new double[] {1, 1, 1}, }; */ double[][] inputs = new double[4][] { new double[] {0, 0}, new double[] {0, 1}, new double[] {1, 0}, new double[] {1, 1}, }; double[][] outputs = new double[4][] { new double[]{0}, new double[]{1}, new double[]{1}, new double[]{0}, }; // double[][] testsResults = new double[3][] // { // new double[] {0, 0, 0}, // new double[] {1, 0, 1}, // new double[] {1, 1, 0}, // }; ActivationNetwork network = (ActivationNetwork)NeuronalNetworkSerializer.DeserializeFromXmlFile( @"D:\Projects\neuronalnetworks\src\NeuronalNetworks\NeuronalNetworks.Tests\Resources\bp_xor_network.xml"); network.Randomize(new DoubleRange(0.0, 1.0)); //NeuronalNetworkSerializer.SerializeToXml(network, "aaa.xml"); var cpLearning = new BackPropagationLearning(network); cpLearning.LearningRate = 0.2; cpLearning.Momentum = 0.4; // cpLearning.RunEpoch(inputs, outputs, 20); // cpLearning.LearningRate = 0.3; for (int i = 0; i < 15000; i++) { for (int j = 0; j < inputs.Length; j++) { var input = inputs[j]; var output = outputs[j]; cpLearning.Run(input, output); } } // var ii = 0; // foreach (var input in inputs) // { // network.Compute(input); // Console.WriteLine(string.Format("{0} - {1}", network.Output[0], outputs[ii][0])); // ii++; // } Console.WriteLine("-------------"); // var ii = 0; // foreach (var input in tests) // { // network.Compute(input); // Console.WriteLine(string.Format("{0} - {1}", testsResults[ii][0], network.GrossbergLayer.Output[0])); // ii++; // } // // double[][] input = new double[4][] { // new double[] {0, 0}, // new double[] {0, 1}, // new double[] {1, 0}, // new double[] {1, 1} // }; //double[][] output = // new double[4][] { // new double[] {0}, // new double[] {1}, // new double[] {1}, // new double[] {0} // }; // // ActivationNetwork network = new ActivationNetwork( // new SigmoidFunction( 2 ), // 2, // two inputs in the network // 2, // two neurons in the first layer // 2, // 1 ); // one neuron in the second layer // network.Randomize(new DoubleRange(0.0,1.0)); // BackPropagationLearning teacher = new BackPropagationLearning( network ); // //teacher.Momentum = 0.5; // teacher.LearningRate = 0.3; // // // // // // // for (int i = 0; i < 50000; i++) // { // // var error = teacher.RunEpoch(input, output); // // Console.WriteLine(string.Format("Step {0} - {1} error", i, error)); // } foreach (var d in inputs) { network.Compute(d); Console.WriteLine(network.Output[0]); } Console.Read(); }