Esempio n. 1
0
 public void Mutate(Func <double, double> f)
 {
     WeightsXH.Map(f);
     WeightsHY.Map(f);
     BiasH.Map(f);
     BiasY.Map(f);
 }
Esempio n. 2
0
        public void Train(double[] x_arr, double[] y_arr)
        {
            Matrix x = Matrix.FromArray(x_arr);
            Matrix h = Matrix.Multiply(WeightsXH, x);

            h.Add(this.BiasH);

            h.Map(NeuralNetwork.Sigmoid);

            Matrix y = Matrix.Multiply(WeightsHY, h);

            y.Add(BiasY);
            y.Map(NeuralNetwork.Sigmoid);

            Matrix Targets = Matrix.FromArray(y_arr);

            Matrix y_err = Matrix.Subtract(Targets, y);

            Matrix Gradients = Matrix.Map(y, NeuralNetwork.DerivSigmoid);

            Gradients.Multiply(y_err);
            Gradients.Multiply(LearningRate);

            Matrix ht             = Matrix.Transpose(h);
            Matrix WeightHYDeltas = Matrix.Multiply(Gradients, ht);

            WeightsHY.Add(WeightHYDeltas);
            BiasY.Add(Gradients);

            Matrix whyt  = Matrix.Transpose(WeightsHY);
            Matrix h_err = Matrix.Multiply(whyt, y_err);

            Matrix HiddenGradient = Matrix.Map(h, NeuralNetwork.DerivSigmoid);

            HiddenGradient.Multiply(h_err);
            HiddenGradient.Multiply(LearningRate);

            Matrix xt             = Matrix.Transpose(x);
            Matrix WeightXHDeltas = Matrix.Multiply(HiddenGradient, xt);

            WeightsXH.Add(WeightXHDeltas);
            BiasH.Add(HiddenGradient);
        }