Example #1
0
        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);
                        }
                    }
                }
            }
        }
Example #2
0
        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);
        }