Пример #1
0
        /// <summary>
        ///   Finds the value which maximizes
        ///   the activation of this neuron.
        /// </summary>
        ///
        public double[] Maximize()
        {
            // Initialize
            double[] value = new double[neuron.InputsCount];
            for (int i = 0; i < value.Length; i++)
            {
                value[i] = Accord.Math.Tools.Random.NextDouble();
            }

            double[] gradient = new double[neuron.InputsCount];

            for (int iter = 0; iter < 50; iter++)
            {
                // Compute the activation gradient
                double activation = neuron.Compute(value);
                for (int i = 0; i < gradient.Length; i++)
                {
                    gradient[i] = neuron.Weights[i] * neuron.ActivationFunction.Derivative2(activation);
                }

                // Walk against the gradient
                for (int i = 0; i < value.Length; i++)
                {
                    value[i] -= gradient[i];
                }

                value = value.Divide(value.Sum());
            }

            return(value);
        }
Пример #2
0
        public void NeuronUpdateWeights()
        {
            double learningRate = 0.3;
            double delta        = -0.3;

            int    InputCount        = 3;
            double outputValue       = 0;
            double outputAfterUpdate = 0;
            IActivationFunction ActivationSigmoid = new SigmoidFunction();
            Neuron ActNeuron = new ActivationNeuron(InputCount, ActivationSigmoid);

            ActNeuron.FeedForward(InputValues);
            outputValue = ActNeuron.Compute();
            Assert.True(outputValue != 0);

            ActNeuron.UpdateWeight(learningRate, delta);
            outputAfterUpdate = ActNeuron.Compute();
            Assert.NotEqual(outputValue, outputAfterUpdate);
        }
Пример #3
0
        public void NeuronInitalizeActivationSigmoid()
        {
            int    InputCount  = 3;
            double outputValue = 0;
            IActivationFunction ActivationSigmoid = new SigmoidFunction();
            Neuron ActNeuron = new ActivationNeuron(InputCount, ActivationSigmoid);

            ActNeuron.FeedForward(InputValues);
            outputValue = ActNeuron.Compute();

            Assert.True(outputValue != 0);
        }