public Vector ProcessInput(IFunctionApproximator network, Vector input) { hiddenLayer.FeedForward(input); outputLayer.FeedForward(hiddenLayer.GetLastActivationValues()); return(outputLayer.GetLastActivationValues()); }
public void SetNeuralNetwork(IFunctionApproximator fapp) { FeedForwardDeepNeuralNetwork ffnn = fapp as FeedForwardDeepNeuralNetwork; if (null == ffnn) { throw new Exception("Only supporting FeedForwardDeepNeuralNetwork at this stage."); } this.hiddenLayers = new Layer[ffnn.GetNumberOfHiddenLayers()]; for (int i = 0; i < hiddenLayers.Length; ++i) { this.hiddenLayers[i] = ffnn.GetHiddenLayer(i); } this.outputLayer = ffnn.GetOutputLayer(); this.hiddenSensitivities = new LayerSensitivity[ffnn.GetNumberOfHiddenLayers()]; for (int i = 0; i < hiddenLayers.Length; ++i) { this.hiddenSensitivities[i] = new LayerSensitivity(ffnn.GetHiddenLayer(i)); } this.outputSensitivity = new LayerSensitivity(outputLayer); }
public void SetNeuralNetwork(IFunctionApproximator fapp) { FeedForwardNeuralNetwork ffnn = (FeedForwardNeuralNetwork)fapp; this.hiddenLayer = ffnn.GetHiddenLayer(); this.outputLayer = ffnn.GetOutputLayer(); this.hiddenSensitivity = new LayerSensitivity(hiddenLayer); this.outputSensitivity = new LayerSensitivity(outputLayer); }
public Vector ProcessInput(IFunctionApproximator network, Vector input) { hiddenLayers[0].FeedForward(input); for (int i = 1; i < hiddenLayers.Length; ++i) { hiddenLayers[i].FeedForward(hiddenLayers[i - 1].GetLastActivationValues()); } outputLayer.FeedForward(hiddenLayers[hiddenLayers.Length - 1].GetLastActivationValues()); return(outputLayer.GetLastActivationValues()); }
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(); }