Ejemplo n.º 1
0
        /// <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]);
            }
        }