private void ComputeTotalGradient(Gradients totalGradients, Gradients partialGradients, SetOfIOPairs trainingSet) { totalGradients.ResetGradients(); foreach (SetOfIOPairs.IOPair pair in trainingSet.Pairs) { ComputeGradient(partialGradients, pair.Inputs, pair.Outputs); for (int i = NumberOfLayers() - 1; i >= 1; i--) { NeuralLayer currentLayer = GetLayer(i); for (int j = 0; j < currentLayer.NumberOfNeurons(); j++) { totalGradients.IncrementThreshold(i, j, partialGradients.GetThreshold(i, j)); for (int k = 0; k < currentLayer.LowerLayer().NumberOfNeurons(); k++) { totalGradients.IncrementWeight(i, j, k, partialGradients.GetWeight(i, j, k)); } } } } }