#include #include #include #include "../include/NeuralNetwork/Learning/BackPropagation.h" #include "../include/NeuralNetwork/Learning/QuickPropagation.h" #include "../include/NeuralNetwork/Learning/RProp.h" #include "../include/NeuralNetwork/Learning/CorrectionFunction/Optical.h" #include "../include/NeuralNetwork/Learning/CorrectionFunction/ArcTangent.h" #define LEARN(A,AR,B,BR,C,CR,D,DR,FUN,COEF,CLASS) \ ({\ srand(rand);\ NeuralNetwork::FeedForward::Network n(2);\ NeuralNetwork::ActivationFunction::Sigmoid a(-1);\ n.appendLayer(2,a);\ n.appendLayer(1,a);\ n.randomizeWeights();\ CLASS prop(n,FUN);\ prop.setLearningCoefficient(COEF);\ prop.setBatchSize(4); \ int error=1; int steps = 0; \ while(error > 0 && steps <99999) {\ steps++;\ error=0;\ prop.teach(A,{AR});\ prop.teach(B,{BR});\ prop.teach(C,{CR});\ prop.teach(D,{DR});\ error+=fabs(n.computeOutput(A)[0]-AR) > 0.1 ? 1:0;\ error+=fabs(n.computeOutput(B)[0]-BR) > 0.1 ? 1:0;\ error+=fabs(n.computeOutput(C)[0]-CR) > 0.1 ? 1:0;\ error+=fabs(n.computeOutput(D)[0]-DR) > 0.1 ? 1:0;\ }\ steps;\ }) int main() { long rand=(time(NULL)); const float linearCoef=0.7; const float opticalCoef=0.11; const float arcTangentCoef=0.6; const float arcTangent=1.5; { std::cout << "XOR Linear:\n"; std::cout << "\tBP: " << LEARN(std::vector({1,0}),1,std::vector({1,1}),0,std::vector({0,0}),0,std::vector({0,1}),1, std::make_shared(),linearCoef,NeuralNetwork::Learning::BackPropagation) << "\n"; std::cout << "\tQP: " << LEARN(std::vector({1,0}),1,std::vector({1,1}),0,std::vector({0,0}),0,std::vector({0,1}),1, std::make_shared(),linearCoef,NeuralNetwork::Learning::QuickPropagation) << "\n"; std::cout << "\tRProp: " << LEARN(std::vector({1,0}),1,std::vector({1,1}),0,std::vector({0,0}),0,std::vector({0,1}),1, std::make_shared(),linearCoef,NeuralNetwork::Learning::RProp) << "\n"; } { std::cout << "AND Optical:\n"; std::cout << "\tBP: " << LEARN(std::vector({1,0}),0,std::vector({1,1}),1,std::vector({0,0}),0,std::vector({0,1}),0, std::make_shared(),opticalCoef,NeuralNetwork::Learning::BackPropagation) << "\n"; std::cout << "\tQP: " << LEARN(std::vector({1,0}),0,std::vector({1,1}),1,std::vector({0,0}),0,std::vector({0,1}),0, std::make_shared(),opticalCoef,NeuralNetwork::Learning::QuickPropagation) << "\n"; std::cout << "\tRProp: " << LEARN(std::vector({1,0}),0,std::vector({1,1}),1,std::vector({0,0}),0,std::vector({0,1}),0, std::make_shared(),opticalCoef,NeuralNetwork::Learning::RProp) << "\n"; } { std::cout << "XOR Optical:\n"; std::cout << "\tBP: " << LEARN(std::vector({1,0}),1,std::vector({1,1}),0,std::vector({0,0}),1,std::vector({0,1}),1, std::make_shared(),opticalCoef,NeuralNetwork::Learning::BackPropagation) << "\n"; std::cout << "\tQP: " << LEARN(std::vector({1,0}),1,std::vector({1,1}),0,std::vector({0,0}),1,std::vector({0,1}),1, std::make_shared(),opticalCoef,NeuralNetwork::Learning::QuickPropagation) << "\n"; std::cout << "\tRProp: " << LEARN(std::vector({1,0}),1,std::vector({1,1}),0,std::vector({0,0}),1,std::vector({0,1}),1, std::make_shared(),opticalCoef,NeuralNetwork::Learning::RProp) << "\n"; } }