Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using MathNet.Numerics;
- using MathNet.Numerics.LinearAlgebra;
- namespace NNet
- {
- class Program
- {
- public static void Main (string[] args)
- {
- var input = new List<Vector<double>> () {
- Vector<double>.Build.DenseOfArray(new double[] {-1.0, -1.0}),
- Vector<double>.Build.DenseOfArray(new double[] {1.0, 1.0})
- };
- var output = new List<Vector<double>> () {
- Vector<double>.Build.DenseOfArray(new double[] {-1.0}),
- Vector<double>.Build.DenseOfArray(new double[] {1.0})
- };
- NeuralNetwork net = new NeuralNetwork (2, 1);
- for (int epoch = 0; epoch < 10; epoch++) {
- for (int i = 0; i < input.Count; i++) {
- var result = net.Feed (input[i]);
- net.Train (output [i].Subtract (result));
- Console.WriteLine (result);
- }
- Console.ReadLine ();
- }
- }
- }
- public class NeuralNetwork
- {
- Vector<double> input;
- Vector<double> output;
- Matrix<double> weight;
- Matrix<double> rmsprp;
- Func<double, double> Activate = Math.Tanh;
- Func<double, double> dActivate = Differentiate.DerivativeFunc (Math.Tanh, 1);
- public NeuralNetwork (int inputs, int outputs)
- {
- weight = Matrix<double>.Build.Random (rows: outputs, columns: inputs);
- rmsprp = Matrix<double>.Build.Random (rows: outputs, columns: inputs).Map(Math.Abs);
- }
- // input = -1.0 to 1.0 range
- public Vector<double> Feed (Vector<double> input)
- {
- this.input = input;
- output = weight.Multiply (input);
- return output.Map (Activate);
- }
- // error = expected - output
- public Vector<double> Train(Vector<double> error)
- {
- Vector<double> deriv = error.PointwiseMultiply (output.Map (dActivate));
- Matrix<double> delta = deriv.OuterProduct (input);
- delta.PointwiseMultiply (delta).Multiply (0.05).Add(rmsprp.Multiply(0.95),rmsprp);
- weight.Add (delta.PointwiseDivide(rmsprp.Map(Math.Sqrt)).Multiply(0.1), weight);
- return weight.LeftMultiply (deriv);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement