Ejemplo n.º 1
0
        protected void CreateNeurons(int inputSize, int[] hiddenSizes, int outputSize)
        {
            for (var i = 0; i < inputSize; i++)
            {
                InputLayer.Add(new Neuron());
            }

            var firstHiddenLayer = new List <Neuron>();

            for (var i = 0; i < hiddenSizes[0]; i++)
            {
                firstHiddenLayer.Add(new Neuron(InputLayer, HiddenActivationType));
            }

            HiddenLayers.Add(firstHiddenLayer);

            for (var i = 1; i < hiddenSizes.Length; i++)
            {
                var hiddenLayer = new List <Neuron>();
                for (var j = 0; j < hiddenSizes[i]; j++)
                {
                    hiddenLayer.Add(new Neuron(HiddenLayers[i - 1], HiddenActivationType));
                }
                HiddenLayers.Add(hiddenLayer);
            }

            for (var i = 0; i < outputSize; i++)
            {
                OutputLayer.Add(new Neuron(HiddenLayers.Last(), OutputActivationType));
            }
        }
Ejemplo n.º 2
0
        public Network BuildNetwork()
        {
            for (int i = 0; i < _inputNodeInitialCount; i++)
            {
                var inputNode = new InputNode(i);
                _inputNodes.Add(inputNode);
            }

            for (int i = 0; i < _outPutNodeInitialCount; i++)
            {
                var outputNode = new OutputNode(i, _activationFunction, _weightAdjustFunction);
                _outputNodes.Add(outputNode);
            }

            for (int i = 0; i < _hiddenLayerInitialCount; i++)
            {
                _hiddenNodes[i] = new List <HiddenNode>();

                for (int j = 0; j < _hiddenNodePerLayerInitialCount; j++)
                {
                    _hiddenNodes[i].Add(new HiddenNode(j, _activationFunction, _weightAdjustFunction, _getRandom));
                }

                if (i == 0)
                {
                    _hiddenNodes[i].ForEach((o) =>
                    {
                        o.AddInputNodes(_inputNodes);
                    });
                }
                else
                {
                    _hiddenNodes[i].ForEach((o) =>
                    {
                        o.AddInputNodes(_hiddenNodes[i - 1]);
                    });
                }
            }

            _outputNodes.ForEach((o) =>
            {
                if (_hiddenLayerInitialCount == 0 || _hiddenNodePerLayerInitialCount == 0)
                {
                    o.AddInputNodes(_inputNodes);
                }
                else
                {
                    o.AddInputNodes(_hiddenNodes[_hiddenLayerInitialCount - 1]);
                }
            });

            return(this);
        }
Ejemplo n.º 3
0
    public NeuralGeneNode AddInputNode(NeuralActivationFunction _neuralActivationFunctions)
    {
        if (InputLayer == null)
        {
            InputLayer = new List <NeuralGeneNode>();
        }
        if (nodes == null)
        {
            nodes = new List <NeuralGeneNode>();
        }
        NeuralGeneNode tmpNode = new NeuralGeneNode(_neuralActivationFunctions, nodes.Count + 1, NeuralNodeType.Input);

        InputLayer.Add(tmpNode);
        nodes.Add(tmpNode);
        return(tmpNode);
    }
 public void CreateLayers(int inputSize, int hiddenSize, int outputSize)
 {
     for (var i = 0; i < inputSize; i++)
     {
         InputLayer.Add(new InputNeuron());
     }
     for (var i = 0; i < hiddenSize; i++)
     {
         HiddenLayer.Add(new WorkingNeuron());
     }
     for (var i = 0; i < outputSize; i++)
     {
         OutputLayer.Add(new WorkingNeuron());
     }
     GenerateFullMesh(new Random());
 }
Ejemplo n.º 5
0
 public void AddInputsNode(int _inputSize, NeuralActivationFunction _neuralActivationFunctions)
 {
     if (InputLayer == null)
     {
         InputLayer = new List <NeuralGeneNode>();
     }
     if (nodes == null)
     {
         nodes = new List <NeuralGeneNode>();
     }
     for (int i = 0; i < _inputSize; i++)
     {
         NeuralGeneNode tmpNode = new NeuralGeneNode(_neuralActivationFunctions, i + 1, NeuralNodeType.Input);
         InputLayer.Add(tmpNode);
         nodes.Add(tmpNode);
     }
 }
Ejemplo n.º 6
0
    public NeuralNet(int inputNumbers, int outputNumbers, int hiddenNumbers, int hiddenLayerNumbers = 1, float learnRate = 0.1f, float momentum = 0.9f)
    {
        for (int i = 0; i < inputNumbers; i++)
        {
            InputLayer.Add(new Neuron());
        }

        for (int i = 0; i < hiddenLayerNumbers; i++)
        {
            HiddenLayer.Add(new List <Neuron>());
            for (int j = 0; j < hiddenNumbers; j++)
            {
                HiddenLayer[i].Add(new Neuron(i == 0 ? InputLayer : HiddenLayer[i - 1]));
            }
        }

        for (int i = 0; i < outputNumbers; i++)
        {
            InputLayer.Add(new Neuron(HiddenLayer[hiddenLayerNumbers - 1]));
        }
    }
Ejemplo n.º 7
0
        public Network(int inputSize, int[] hiddenSizes, int outputSize, double learnRate = 0.4, double momentum = 0.9)
        {
            this.LearnRate    = learnRate;
            this.Momentum     = momentum;
            this.InputLayer   = new List <Neuron>();
            this.HiddenLayers = new List <List <Neuron> >();
            this.OutputLayer  = new List <Neuron>();

            for (var i = 0; i < inputSize; i++)
            {
                InputLayer.Add(new Neuron());
            }

            var firstHiddenLayer = new List <Neuron>();

            for (var i = 0; i < hiddenSizes[0]; i++)
            {
                firstHiddenLayer.Add(new Neuron(InputLayer));
            }

            HiddenLayers.Add(firstHiddenLayer);

            for (var i = 1; i < hiddenSizes.Length; i++)
            {
                var hiddenLayer = new List <Neuron>();
                for (var j = 0; j < hiddenSizes[i]; j++)
                {
                    hiddenLayer.Add(new Neuron(HiddenLayers[i - 1]));
                }
                HiddenLayers.Add(hiddenLayer);
            }

            for (var i = 0; i < outputSize; i++)
            {
                OutputLayer.Add(new Neuron(HiddenLayers.Last()));
            }
        }
 public void AddInputNeuron(InputNeuron neuron) => InputLayer.Add(neuron);
Ejemplo n.º 9
0
        public void CalculateOutputSigmoidMultiLayerTest()
        {
            // 0 0 1 => 0
            // 1 1 1 => 1
            // 1 0 1 => 1
            // 0 1 1 => 0
            // test
            // 1 0 0 => ?
            Random        r         = new Random();
            Func <double> getRandom = (() => { return(r.NextDouble()); });


            var weightAdjust = new Func <TrainingCalcModel, double>((m) =>
            {
                return(m.Error * m.Input * m.ActualOutput * (1 - m.ActualOutput));
            });
            var sigFunction = FunctionFactory.GetActivationFunction(eActivationFunc.Sigmoid);
            var step        = new Func <double, double>((z) =>
            {
                return(z > 0.0 ? 1 : 0);
            });

            var inputNodes1 = new InputLayer();

            inputNodes1.Add(new InputNode(0)); // { InValue = 0 });
            inputNodes1.Add(new InputNode(1)); // { InValue = 0 });
            inputNodes1.Add(new InputNode(2)); // { InValue = 1 });

            var bias        = -2.0;
            var hiddenNodes = new List <HiddenNode>()
            {
                new HiddenNode(0, sigFunction, weightAdjust, getRandom)
                {
                    Bias = bias
                },
                new HiddenNode(1, sigFunction, weightAdjust, getRandom)
                {
                    Bias = bias
                },
                new HiddenNode(2, sigFunction, weightAdjust, getRandom)
                {
                    Bias = bias
                }
            };

            foreach (var hidden in hiddenNodes)
            {
                hidden.AddInputNodes(inputNodes1);
            }

            var outnode = new OutputNode(0, step, weightAdjust, getRandom);

            outnode.AddInputNodes(hiddenNodes);
            //outnode.Bias = -2.0;

            Debug.WriteLine("Node {0} weight:{1}", 0, inputNodes1[0].Weights[0]);
            Debug.WriteLine("Node {0} weight:{1}", 1, inputNodes1[0].Weights[1]);

            Debug.WriteLine("Node {0} weight:{1}", 0, hiddenNodes[0].Weights[0]);
            Debug.WriteLine("Node {0} weight:{1}", 0, hiddenNodes[1].Weights[0]);


            for (int x = 0; x < 100000; x++)
            {
                hiddenNodes.ForEach((h) =>
                {
                    h.CalculateOutput();
                });
                outnode.SetInput(new double[] { 0.0, 0.0, 1.0 });
                outnode.CalculateOutput();
                outnode.AdjustWeights(0);
                outnode.SetInput(new double[] { 1.0, 1.0, 1.0 });
                outnode.CalculateOutput();
                outnode.AdjustWeights(1);
                outnode.SetInput(new double[] { 1.0, 0.0, 1.0 });
                outnode.CalculateOutput();
                outnode.AdjustWeights(1);
                outnode.SetInput(new double[] { 0.0, 1.0, 1.0 });
                outnode.CalculateOutput();
                outnode.AdjustWeights(0);
            }

            Debug.WriteLine("Node {0} weight:{1}", 0, inputNodes1[0].Weights[0]);
            Debug.WriteLine("Node {0} weight:{1}", 1, inputNodes1[0].Weights[1]);


            Debug.WriteLine("Node {0} weight:{1}", 0, hiddenNodes[0].Weights[0]);
            Debug.WriteLine("Node {0} weight:{1}", 0, hiddenNodes[1].Weights[0]);

            outnode.SetInput(new double[] { 1.0, 0.0, 0.0 });
            outnode.CalculateOutput();

            var outp = outnode.Output;

            Assert.IsTrue(outp == 1);
            outnode.SetInput(new double[] { 0.0, 0.0, 0.0 });
            outnode.CalculateOutput();

            outp = outnode.Output;

            Assert.IsTrue(outp == 0);
        }