public void Calculate_SameResultTwice() { var net = new Core.Network(new int[] { 1, 5, 1 }); var input = new double[] { 1 }; var result = net.Calculate(input); var result2 = net.Calculate(input); Assert.AreEqual<double>(result.First(), result2.First()); }
public void Train_ChangesWeight() { var net = new Core.Network(new int[] { 1, 1, 1 }); var input = new double[] { 1 }; var result = net.Calculate(input).ToArray(); var increased = result.Select(r => r + 1).ToArray(); net.Train(result, increased); var result2 = net.Calculate(input).ToList(); Assert.AreNotEqual<double>(result.First(), result2.First()); }
public void Train_FindApproximateValue() { var net = new Core.Network(new int[] { 1, 1 }); var input = new double[] { 1 }; double expected = 0.72; double tolerance = 0.01; double delta = 0; double watchdog = 1000; do { var result = net.Calculate(input); net.Train(result, new double[] { expected }); delta = Math.Abs(result[0] - expected); if (watchdog-- <= 0) Assert.Fail(); } while (delta >= tolerance); }
public void Train_SimpleProblem() { var net = new Core.Network(new int[] { 3, 2, 2 }); double tolerance = 0.001; double delta = 0; double watchdog = 5000; Random rand = new Random(); do { double result1 = (double)rand.Next(0, 2); double result2 = (double)rand.Next(0, 2); double[] input = new double[] { result2, rand.NextDouble(), result1 }; var data = net.Calculate(input); net.Train(input, new double[] { result1, result2 }); delta = Math.Abs(data[0] - result1) + Math.Abs(data[1] - result2); if (watchdog-- <= 0) Assert.Fail(); } while (delta >= tolerance); }