예제 #1
0
        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());
        }
예제 #2
0
        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;
        }
예제 #3
0
 public override Vector <double> CalculateOutput(Vector <double> signal)
 {
     LastOutput = signal.Map(Activation.Calc);
     return(LastOutput.Clone());
 }