nettest2.cpp

Go to the documentation of this file.
00001 #include "NeuralNetwork.h"
00002 #include <iostream>
00003 #include <vector>
00004 #include <string>
00005 #include <algorithm>
00006 #include <iterator>
00007 #include <cmath>
00008 #include <fstream>
00009 #include "UniformRNG.h"
00010 using namespace std;
00011 
00012 int main()
00013 {
00014         UniformRNG Random;
00015         NeuralNetwork::ttypeVector typeVector;
00016         NeuralNetwork::ttypeArray typeArray;
00017                 
00018         const int seglength = 5;
00019         const double maxinit = 0.1;
00020         const int maxit = 5000;
00021         const int hlayers = 1;
00022         const int deslength = 1;
00023         const double mu = 0.1;
00024         const double alpha = 0.1;
00025         const double period = 35.2;
00026         const double PI = acos(-1.0);
00027         const double noiselevel = 0.2;
00028         gplib::rvec input(seglength), desired(deslength), output(deslength);
00029         vector<double> filedes, fileout;;
00030         
00031         typeVector.assign(seglength,SigmoidalNeuron::bipolar);
00032         for (int i = 0; i < hlayers; ++i)
00033         {
00034                 typeArray.push_back(typeVector);
00035         }
00036         typeVector.assign(1,SigmoidalNeuron::identity);
00037         typeArray.push_back(typeVector);
00038         
00039         NeuralNetwork Network(seglength,deslength);
00040         Network.SetLayers(typeArray);
00041         Network.InitWeights(maxinit,maxinit);
00042         Network.SetMu(mu);
00043         Network.SetAlpha(alpha);
00044         std::cout << std::endl;
00045         std::cout << "Weights: " << std::endl;
00046         Network.PrintWeights(std::cout);
00047         std::cout << std::endl;
00048         for (int iterations = 0; iterations < maxit; ++iterations)
00049         {
00050                 for (int i = 0; i < seglength; ++i)
00051                         input(i) =sin( 2.0 * PI * (i+iterations)/period);
00052         
00053                 for (int i = 0; i < deslength; ++i)
00054                         desired(i) = 2.0*cos( 2.0 * PI * (iterations+i)/period)+Random.GetNumber(-noiselevel,noiselevel);
00055                 //std::cout << "Input: ";
00056                 //std::copy(input.begin(),input.end(),ostream_iterator<double>(cout," "));
00057                 //std::cout << std::endl;
00058                 Network.CalcOutput(input,output);
00059                 if (iterations < maxit/2)
00060                         Network.AdaptFilter(input,desired);
00061                 //std::copy(output.begin(),output.end(),ostream_iterator<double>(cout," "));
00062                 //cout << desired.at(0) << " " << output.at(0) << endl;
00063                 filedes.push_back(desired(0));
00064                 fileout.push_back(output(0));
00065                 /*std::cout << std::endl;
00066                 std::cout << "Weights: " << std::endl;
00067                 Network.WriteWeights(std::cout);
00068                 std::cout << std::endl;*/
00069         }
00070         std::cout << std::endl;
00071         std::cout << "Weights: " << std::endl;
00072         Network.PrintWeights(std::cout);
00073         std::cout << std::endl;
00074         ofstream outdes("des.out");
00075         copy(filedes.begin(),filedes.end(),ostream_iterator<double>(outdes,"\n"));
00076         ofstream outout("out.out");
00077         copy(fileout.begin(),fileout.end(),ostream_iterator<double>(outout,"\n"));
00078 }

Generated on Mon Sep 15 12:54:34 2008 for GPLIB++ by  doxygen 1.5.5