Beispiel #1
0
        public void testFeedForwardAndBAckLoopWorksWithMomentum()
        {
            // example 11.14 of Neural Network Design by Hagan, Demuth and Beale
            Matrix hiddenLayerWeightMatrix = new Matrix(2, 1);

            hiddenLayerWeightMatrix.set(0, 0, -0.27);
            hiddenLayerWeightMatrix.set(1, 0, -0.41);

            Vector hiddenLayerBiasVector = new Vector(2);

            hiddenLayerBiasVector.setValue(0, -0.48);
            hiddenLayerBiasVector.setValue(1, -0.13);

            Vector input = new Vector(1);

            input.setValue(0, 1);

            Matrix outputLayerWeightMatrix = new Matrix(1, 2);

            outputLayerWeightMatrix.set(0, 0, 0.09);
            outputLayerWeightMatrix.set(0, 1, -0.17);

            Vector outputLayerBiasVector = new Vector(1);

            outputLayerBiasVector.setValue(0, 0.48);

            Vector error = new Vector(1);

            error.setValue(0, 1.261);

            double learningRate           = 0.1;
            double momentumFactor         = 0.5;
            FeedForwardNeuralNetwork ffnn = new FeedForwardNeuralNetwork(
                hiddenLayerWeightMatrix, hiddenLayerBiasVector,
                outputLayerWeightMatrix, outputLayerBiasVector);

            ffnn.setTrainingScheme(new BackPropLearning(learningRate,
                                                        momentumFactor));
            ffnn.processInput(input);
            ffnn.processError(error);

            Matrix finalHiddenLayerWeights = ffnn.getHiddenLayerWeights();

            Assert.AreEqual(-0.2675, finalHiddenLayerWeights.get(0, 0), 0.001);
            Assert.AreEqual(-0.4149, finalHiddenLayerWeights.get(1, 0), 0.001);

            Vector hiddenLayerBias = ffnn.getHiddenLayerBias();

            Assert.AreEqual(-0.4775, hiddenLayerBias.getValue(0), 0.001);
            Assert.AreEqual(-0.1349, hiddenLayerBias.getValue(1), 0.001);

            Matrix finalOutputLayerWeights = ffnn.getOutputLayerWeights();

            Assert.AreEqual(0.1304, finalOutputLayerWeights.get(0, 0), 0.001);
            Assert.AreEqual(-0.1235, finalOutputLayerWeights.get(0, 1), 0.001);

            Vector outputLayerBias = ffnn.getOutputLayerBias();

            Assert.AreEqual(0.6061, outputLayerBias.getValue(0), 0.001);
        }