Files
ia2005/backprop/main.cpp
2024-11-12 17:41:10 +01:00

128 lines
3.2 KiB
C++

#include "neurone.h"
#include "couche.h"
#include "inputCouche.h"
#include "synapse.h"
#include "synapseMatrix.h"
#include "reseau.h"
#include <iostream>
#include "inputtest.h"
//using namespace std;
void testafroche()
{
try {
Neurone NewNeu();
Couche Output(4);
Couche Input(3,&Output);
Synapse s(2.324232);
SynapseMatrix m(3,2);
InputCouche InputC(3);
cout << InputC ;
cout << "get syn:" << Input.getSynapse(2,2).getWeight() << endl;
m(1,1) = 2.5;
cout<< "Test: " << m(1,1).getWeight() << endl;
m.randomize();
cout<< m ;
//Input[4];
Input[2]=2.132;
Input.getSynapse(1,2).getWeight();
cout << "Synapse weight: " << s << endl;
}
catch(std::string str){
cout << "Exception: " <<endl;
cout << " "<< str << endl;
}
catch(const unsigned int index){
cout << "Exception: " <<endl;
cout << " Index " << index << " is out of range" << endl;
}
}
void testlau()
{
Utils u;
int inputsize = /*16; */ 64; /* */ // nombre de neurones d'input
int outputsize = /*3; */ 3; /* */ // nombre de neurones d'output
int nbtests = /*9; */ 32; /* */ // nombre de tests (xor = 4)
int intermid = /*8; */ 8; /* */ // nombre de neurones intermediaires
int nbtests2 = /*8; */ 8; /* */ // nombre de tests différents du learn
bool Input[nbtests][inputsize];
bool Output[nbtests][outputsize];
bool InputTest[nbtests2][inputsize];
for(int i=0;i<nbtests;i++)
for(int j=0;j<inputsize;j++)
Input[i][j] = /*Inp[i][j]; /**/ VoitureI[i][j];
for(int i=0;i<nbtests2;i++)
for(int j=0;j<inputsize;j++)
InputTest[i][j] = /*Inp_[i][j]; /**/ VoitureI_[i][j];
for(int i=0;i<nbtests;i++)
for(int j=0;j<outputsize;j++)
Output[i][j] = /*Rep[i][j];/**/ VoitureR[i][j];
cout << "Init Network ...." << endl;
Reseau R(inputsize,intermid,outputsize);
cout << "Done ...." << endl;
std::vector<bool *> in;
std::vector<bool *> r;
for(int i=0;i<nbtests;i++)
{
in.push_back(Input[i]);
r.push_back(Output[i]);
}
double erreur ;
int cpt=0;
while(1)
{
++cpt;
erreur = R.learnAll(in,r);
if(erreur < LEARNACCEPT)
break;
if(cpt%100 == 0)
cout << " : step " << cpt << " error:" << erreur << endl;
}
cout << "final error: " << erreur << endl;
/* et on teste */
cout << "tests sur les jeux de données : \n";
std::vector<double> V;
for(int i=0;i<nbtests;i++)
{
V=R.forward(Input[i]);
cout << "pour : ";
for(int j=0;j<inputsize;j++) cout << Input[i][j] ;
for(unsigned i=0;i<V.size();i++)
cout << " [" << u.accept(V[i]) << "]";
cout << " bool " ;
for(unsigned i=0;i<V.size();i++)
cout << " [" << V[i] << "] " ;
cout << "\n";
}
cout << "tests différents : \n";
V.clear();
for(int i=0;i<nbtests2;i++)
{
V=R.forward(InputTest[i]);
cout << "pour : ";
for(int j=0;j<inputsize;j++) cout << InputTest[i][j];
for(unsigned i=0;i<V.size();i++)
cout << " [" << u.accept(V[i]) << "]";
cout << " bool " ;
for(unsigned i=0;i<V.size();i++)
cout << " [" << V[i] << "] " ;
cout << "\n";
}
}
int main(void){
testlau();
return 0;
}