public void ProcessError(IFunctionApproximator network,
                                 Vector error)
        {
            // TODO calculate total error somewhere
            // create Sensitivity Matrices
            outputSensitivity.SensitivityMatrixFromErrorMatrix(error);

            hiddenSensitivities[hiddenSensitivities.Length - 1].SensitivityMatrixFromSucceedingLayer(outputSensitivity);
            for (int i = hiddenSensitivities.Length - 2; i >= 0; --i)
            {
                hiddenSensitivities[i].SensitivityMatrixFromSucceedingLayer(hiddenSensitivities[i + 1]);
            }

            // calculate weight Updates
            CalculateWeightUpdates(outputSensitivity, hiddenLayers[hiddenLayers.Length - 1].GetLastActivationValues(),
                                   learningRate, momentum);
            for (int i = hiddenLayers.Length - 1; i > 0; --i)
            {
                CalculateWeightUpdates(hiddenSensitivities[i], hiddenLayers[i - 1].GetLastActivationValues(),
                                       learningRate, momentum);
            }

            CalculateWeightUpdates(hiddenSensitivities[0], hiddenLayers[0].GetLastInputValues(), learningRate, momentum);

            // calculate Bias Updates
            CalculateBiasUpdates(outputSensitivity, learningRate, momentum);
            for (int i = hiddenLayers.Length - 1; i >= 0; --i)
            {
                CalculateBiasUpdates(hiddenSensitivities[i], learningRate, momentum);
            }

            // update weightsAndBiases
            outputLayer.UpdateWeights();
            outputLayer.UpdateBiases();

            for (int i = hiddenLayers.Length - 1; i >= 0; --i)
            {
                hiddenLayers[i].UpdateWeights();
                hiddenLayers[i].UpdateBiases();
            }
        }
Example #2
0
        public void ProcessError(IFunctionApproximator network,
                                 Vector error)
        {
            // TODO calculate total error somewhere
            // create Sensitivity Matrices
            outputSensitivity.SensitivityMatrixFromErrorMatrix(error);

            hiddenSensitivity.SensitivityMatrixFromSucceedingLayer(outputSensitivity);

            // calculate weight Updates
            CalculateWeightUpdates(outputSensitivity, hiddenLayer.GetLastActivationValues(), learningRate, momentum);
            CalculateWeightUpdates(hiddenSensitivity, hiddenLayer.GetLastInputValues(), learningRate, momentum);

            // calculate Bias Updates
            CalculateBiasUpdates(outputSensitivity, learningRate, momentum);
            CalculateBiasUpdates(hiddenSensitivity, learningRate, momentum);

            // update weightsAndBiases
            outputLayer.UpdateWeights();
            outputLayer.UpdateBiases();

            hiddenLayer.UpdateWeights();
            hiddenLayer.UpdateBiases();
        }