public void ActivateProducesCorrectResultNegativeValue(double activationValue, double expectedResult)
        {
            var activationFunction = TanHActivationFunction.Create();
            var activationResult   = activationFunction.Activate(activationValue);

            DoubleAssertionHelpers.AssertWithPrecision(expectedResult, activationResult, 10);
        }
        public void DerviativeProducesCorrectResultNegativeValue(double inputValue, double expectedResult)
        {
            var activationFunction = TanHActivationFunction.Create();
            var derivativeResult   = activationFunction.Derivative(inputValue);

            DoubleAssertionHelpers.AssertWithPrecision(expectedResult, derivativeResult, 10);
        }
Beispiel #3
0
        public void RunXORNeuralNetwork()
        {
            var activationFunctionSigmoid = new TanHActivationFunction( );
            var learningRate = .05;

            XORNetwork = new NeuralNetwork.NeuralNetwork(new int[] { 2, 3, 1 }, activationFunctionSigmoid, learningRate);

            var random = new Random(( int )DateTime.Now.Ticks);

            var pass = 0;
            var fail = 0;

            for (double i = 1; i < 100000; i++)
            {
                var j = ( int )(random.NextDouble( ) * 2);
                var k = ( int )(random.NextDouble( ) * 2);

                var inputs          = new double[] { j, k };
                var expectedOutputs = new double[] { j ^ k };

                var actualOutputs = XORNetwork.RunNetwork(inputs);
                XORNetwork.Train(inputs, expectedOutputs);

                if (((j ^ k) == 1 && actualOutputs[0] > .55) || ((j ^ k) == 0 && actualOutputs[0] < .45))
                {
                    pass++;
                }
                else
                {
                    fail++;
                };

                //Console.WriteLine( $"{j} | {k} = {j | k}, {actualOutputs[ 0 ]}" );

                if (i % 100 == 0)
                {
                    Console.WriteLine($"Pass: {pass}, Fail: {fail}, {( double )pass*100 / ( pass + fail )}% ; ");
                    Console.WriteLine($"{j} ^ {k} = {j ^ k}, {actualOutputs[ 0 ]}");

                    if (fail == 0)
                    {
                        Console.WriteLine($"Learning complete, learned in {i}");
                        return;
                    }

                    pass = 0;
                    fail = 0;
                }
            }
        }