public void Mutate(Func <double, double> f) { WeightsXH.Map(f); WeightsHY.Map(f); BiasH.Map(f); BiasY.Map(f); }
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); }