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
00056
00057
00058 Network.CalcOutput(input,output);
00059 if (iterations < maxit/2)
00060 Network.AdaptFilter(input,desired);
00061
00062
00063 filedes.push_back(desired(0));
00064 fileout.push_back(output(0));
00065
00066
00067
00068
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 }