#include #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Weffc++" #include #pragma GCC diagnostic pop TEST(FeedForward, XOR) { NeuralNetwork::FeedForward::Network n(2); NeuralNetwork::ActivationFunction::Sigmoid a(-1); NeuralNetwork::FeedForward::Layer &hidden=n.appendLayer(2,a); NeuralNetwork::FeedForward::Layer &out = n.appendLayer(1,a); hidden[1].weight(n[0][0])=7; hidden[1].weight(n[0][1])=-4.7; hidden[1].weight(n[0][2])=-4.7; hidden[2].weight(n[0][0])=2.6; hidden[2].weight(n[0][1])=-6.4; hidden[2].weight(n[0][2])=-6.4; out[1].weight(hidden[0])=-4.5; out[1].weight(hidden[1])=9.6; out[1].weight(hidden[2])=-6.8; { std::vector ret =n.computeOutput({1,1}); ASSERT_LT(ret[0], 0.5); } { std::vector ret =n.computeOutput({0,1}); ASSERT_GT(ret[0], 0.5); } { std::vector ret =n.computeOutput({1,0}); ASSERT_GT(ret[0], 0.5); } { std::vector ret =n.computeOutput({0,0}); ASSERT_LT(ret[0], 0.5); } } TEST(FeedForward, Serialization) { NeuralNetwork::FeedForward::Network n(2); NeuralNetwork::ActivationFunction::Sigmoid a(-1); NeuralNetwork::FeedForward::Layer &hidden=n.appendLayer(2,a); NeuralNetwork::FeedForward::Layer &out = n.appendLayer(1,a); hidden[1].weight(n[0][0])=7; hidden[1].weight(n[0][1])=-4.7; hidden[1].weight(n[0][2])=-4.7; hidden[2].weight(n[0][0])=2.6; hidden[2].weight(n[0][1])=-6.4; hidden[2].weight(n[0][2])=-6.4; out[1].weight(hidden[0])=-4.5; out[1].weight(hidden[1])=9.6; out[1].weight(hidden[2])=-6.8; std::string serialized = n.serialize().serialize(); NeuralNetwork::FeedForward::Network *deserialized=NeuralNetwork::FeedForward::Network::Factory::deserialize(serialized).release(); { std::vector ret =deserialized->computeOutput({1,1}); ASSERT_LT(ret[0], 0.5); } { std::vector ret =deserialized->computeOutput({0,1}); ASSERT_GT(ret[0], 0.5); } { std::vector ret =deserialized->computeOutput({1,0}); ASSERT_GT(ret[0], 0.5); } { std::vector ret =deserialized->computeOutput({0,0}); ASSERT_LT(ret[0], 0.5); } delete deserialized; }