public override Vector <double> CalculateOutput(Vector <double> signal) { LastSignal = signal; LastOutput = IncomingWeights.Multiply(signal); // weighted input if (HasBias) { LastOutput = LastOutput.Add(BiasWeights); // weighted input with bias } LastOutput.MapInplace(Activation.Calc); // neuron activations (neuron outputs) return(LastOutput.Clone()); }
public void ImproveWeights(double learningFactor, double momentum) { var output = LastOutput.Clone(); output.MapInplace(Activation.CalcDerivative); var learningErrorOutput = learningFactor * Vector.op_DotMultiply(output, Error); var modification = learningErrorOutput.OuterProduct(LastSignal); IncomingWeights += modification + (LastWeightsModification * momentum); if (HasBias) { BiasWeights += learningErrorOutput + (LastBiasWeightsModification * momentum); } LastWeightsModification = modification; LastBiasWeightsModification = learningErrorOutput; }
public override Vector <double> CalculateOutput(Vector <double> signal) { LastOutput = signal.Map(Activation.Calc); return(LastOutput.Clone()); }