/// <summary> /// This method calculates the error at the output layer /// </summary> /// <param name="output">output layer result</param> /// <param name="hiddenlayerneurons">number of hidden layer neurons</param> /// <param name="outputSum">array of weighted inputs</param> /// <param name="inputVector">training data containing features (input) and labels (output).</param> public void CalcOutputError(double[] output, int[] hiddenlayerneurons, double[] outputSum, double[] inputVector, IContext ctx) { Errors[hiddenlayerneurons.Length] = new double[output.Length]; double[] grad = new double[output.Length]; //int lastIndexOfActualOp = ctx.DataDescriptor.Features.Length;// featureValues.Length - 1; int lastIndexOfActualOp = inputVector.Length - 1; // Calculating error as difference between input and calculated output. for (int i = (output.Length - 1); i >= 0; i--) { grad[i] = output[i] - inputVector[lastIndexOfActualOp--]; // TODO: Support for multiple output neurons required. //grad[i] = calculatedop[i] - featureValues[lastIndexOfActualOp--]; } for (int i = 0; i < output.Length; i++) { Errors[hiddenlayerneurons.Length][i] = grad[i] * ActivationFunctions.DerivativeSigmoid(outputSum[i]); MiniBatchError[hiddenlayerneurons.Length][i] += Math.Abs(Errors[hiddenlayerneurons.Length][i]); } }