public override void CalcGrads(ILoss loss, Array <double> targets) { Neurons.ForEach((N, i) => { N.Gradient = Activation.Derivative(N.InVal, N.OutVal) * loss.Derivative(targets[i], N.OutVal); N.InSynapses.ForEach(S => S.Gradient = N.Gradient * S.InNeuron.OutVal); }); }
public override void CalcGrads(ILoss loss, Array <double> targets) { double gSum = 0.0; Neurons.ForEach((N, i) => { N.Gradient = loss.Derivative(targets[i], N.OutVal); gSum += N.Gradient * N.OutVal; }); Neurons.ForEach(N => { N.Gradient = N.OutVal * (N.Gradient - gSum); N.InSynapses.ForEach(S => S.Gradient = N.Gradient * S.InNeuron.OutVal); }); }
public sealed override void CalcGrads(ILoss loss, Array <double> targets) { Neurons.ForEach((N, i) => N.Gradient = loss.Derivative(targets[i], N.OutVal)); }