// test sizes to make test algorithms stay in index bounds public static void TestSizes() { var nn = new SimpleNeuralNet(); nn.Create(2, 3, 5, 1, 4, 3); var output = nn.FeedForward(new Vector(1, 2)); nn.Backpropagate(0.1f, output); }
// test example from https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/ public static void Test1() { var nn = new SimpleNeuralNet(); nn.Create(2, 2, 2); nn.W[0][0, 0] = 0.15f; nn.W[0][0, 1] = 0.20f; nn.W[0][1, 0] = 0.25f; nn.W[0][1, 1] = 0.30f; nn.b[0][0] = 0.35f; nn.b[0][1] = 0.35f; nn.W[1][0, 0] = 0.40f; nn.W[1][0, 1] = 0.45f; nn.W[1][1, 0] = 0.50f; nn.W[1][1, 1] = 0.55f; nn.b[1][0] = 0.60f; nn.b[1][1] = 0.60f; nn.f[1] = Vectorize(Logistic); nn.df[1] = Vectorize(dLogistic); nn.f[2] = Vectorize(Logistic); nn.df[2] = Vectorize(dLogistic); var input = new Vector(0.05f, 0.10f); // should output ~ 0.75136507, 0.772928465 var output = nn.FeedForward(input); // desired output var t1 = new Vector(0.01f, 0.99f); // error vec var evec = output - t1; // should be 0.29837110+ var error = 0.5 * evec.LengthSquared(); var learning = 0.50f; nn.Backpropagate(learning, evec); output = nn.FeedForward(input); // error vec evec = output - t1; // should be 0.291027924 - TODO - example did not update bias vecs! error = 0.5 * evec.LengthSquared(); }