/// <summary> /// /// </summary> /// <param name="delta"></param> /// <returns></returns> public Matrix <float> Backward(Matrix <float> delta) { // Calculate gradient ActivationDerivative.Clear(); m_activation.Derivative(OutputActivations.Data(), ActivationDerivative.Data()); // Calculate delta for next layer delta.PointwiseMultiply(ActivationDerivative, m_delta); return(m_delta); }
public double Evaluate(double[] actual, double[] actualNonActivated, double[] expected, double[] errors, IActivation activation) { double[] activationDerivative = activation.Derivative(actualNonActivated); this.Derivative(actual, expected, errors); double res = 0; for (int i = 0; i < actual.Length; i++) { var err = activationDerivative[i] * errors[i]; errors[i] = err; res += err * err; } return(res); }