public void Init(int[] layers) { var neurons = new INeuron[layers.Length][]; _inputValues = new double[layers[0]]; for (var i = 0; i < layers.Length; i++) { var layerSize = layers[i]; neurons[i] = new INeuron[layerSize]; for (var j = 0; j < layerSize; j++) { INeuron neuron; if (i == 0) { neuron = new InputNeuron(); _inputNeurons.Add(neuron); } else if (i < layers.Length - 1) { neuron = new FunctionNeuronProcess(_layerFunc); } else { neuron = new OutputNeuron(_outputFunc); _outputNeurons.Add(neuron); } neurons[i][j] = neuron; _network.AddNeuron(neuron); if (i > 0) { for (var k = 0; k < layers[i - 1]; k++) { var synapse = new Synapse(neurons[i - 1][k], neuron); synapse.Weight = 1; _synapses.Add(synapse); _network.AddSynapse(synapse); } } } } }
static void BasicTest() { var inputNeuron = new InputNeuron(); var calcNeuron1 = new FunctionNeuronProcess(ds => ds * 2); var calcNeuron2 = new FunctionNeuronProcess(ds => ds * 2); var outputNeuron = new OutputNeuron(ds => ds * 2); var network = new NeuronalNetwork(); network.AddNeuron(inputNeuron); network.AddNeuron(calcNeuron1); network.AddNeuron(calcNeuron2); network.AddNeuron(outputNeuron); var synapse11 = network.CreateSynapse(inputNeuron, calcNeuron1); var synapse12 = network.CreateSynapse(inputNeuron, calcNeuron2); var synapse21 = network.CreateSynapse(calcNeuron1, outputNeuron); var synapse22 = network.CreateSynapse(calcNeuron2, outputNeuron); synapse11.Weight = 2; synapse12.Weight = 2; synapse21.Weight = 2; synapse22.Weight = 2; Console.WriteLine("Write any Value"); var input = string.Empty; do { network.Reset(); Console.Write("> "); input = Console.ReadLine(); if (double.TryParse(input, out double value)) { inputNeuron.Value = value; Console.Write("Calculating.."); network.FeedForward(); Console.WriteLine("Finished. Result: " + outputNeuron.Value); } } while (input != string.Empty); }