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(); } }
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(); }