TEST(TestNeuralNetwork, zeroInputAndWeights) { NeuralNetwork nn {2, 2}; vector<float> input {1.0f, 1.0f}; vector<float> expected = {0.0f, 0.0f}; vector<float> output; nn.setWeights([]() { return 0.0f; }); nn.calc(); nn.getOutput(output); ASSERT_EQ(expected.size(), output.size()); for (int i = 0; i < expected.size(); ++i) { EXPECT_EQ(expected[i], output[i]); } EXPECT_EQ(0, nn.calcCost(expected)); }
TEST(TestNeuralNetwork, feedFordward) { NeuralNetwork nn {4, 3, 2}; float curWeight = 1.0f; vector<float> input {0.1f, 0.2f, 0.3f, 0.4f}; vector<float> expected {957.0f, 1177.0f}; vector<float> output; nn.setWeights([&curWeight] {return curWeight++;}); ASSERT_EQ(24, curWeight); nn.setInput(input); nn.calc(); nn.getOutput(output); ASSERT_EQ(expected.size(), output.size()); for (int i = 0; i < expected.size(); ++i) EXPECT_FLOAT_EQ(expected[i], output[i]); }
TEST(TestNeuralNetwork, activationFunction) { int timesActivCalled = 0; ActivationFunction af([×ActivCalled](float) { timesActivCalled++; return 1.0f; }, [](float) { return 0.0f; }); NeuralNetwork nn {2, 3, 3, 2}; vector<float> expected = {1.0f, 1.0f}; vector<float> output; nn.setActivationFunction(af); nn.calc(); nn.getOutput(output); ASSERT_EQ(expected.size(), output.size()); for (int i = 0; i < expected.size(); ++i) EXPECT_FLOAT_EQ(expected[i], output[i]); EXPECT_EQ(8, timesActivCalled); }