📄 tester.cpp
字号:
#include "../../include/annie.h"#include <iostream>#include <string>#include <cstdio>#include <vector>#include <cmath>using namespace std;using namespace annie;real input1[2]={0,0};real input2[2]={0,1};real input3[2]={1,0};real input4[2]={1,1};void facerotation(int samples){ int i; for (int ss = 0; ss<samples; ss++) { int deg = rand() % 360; if (ss == 0) deg = 0; cout<<deg<<"\t"<<tan(deg*3.1415/180)<<"\t"; double arr[36]; for (i=0; i<36; i++) arr[i] = cos(3.1415 * (deg - 10*i)/180); double x,y; x=y=0.0; for (i=0;i<36;i++) { x += arr[i] * cos(10*i*3.1415/180); y += arr[i] * sin(10*i*3.1415/180); } printf("%.3f\t%.3f\t%.3f\t%.3f\n",x,y,y/x,atan(y/x)*180/3.1415); }}int delta(int i,int j){ if (i==j) return 1; return 0;}void hopfieldTSP(){ HopfieldNetwork net(16,true,false); int A,B,C,D; A=B=C=500; D=200; for (int i=0;i<16;i++) net.setBias(i,4*D); int d[4][4] = { {0,6,8,5}, {6,0,10,5}, {8,10,0,5}, {5,5,5,0} }; for (int i1=0;i1<16;i1++) for (int j1=i1;j1<16;j1++) { int i,ip,j,jp,jpp,jpm; i=i1/4; if (i==1) { cout<<"i1 = "<<i1<<endl; cout<<2/4<<endl; } j=i1%4; ip=j1/4; jp=j1%4; jpp=(jp+1)%4; jpm=jp-1; if (jpm<0) jpm=3; if (i==1 && j==2 && ip==2 && jp==3) cout<<"k"; real t1 = -1*A*delta(i,ip)*(1-delta(j,jp))/2; real t2 = -1*B*delta(j,jp)*(1-delta(i,ip))/2; real t3 = -C/2; real t4 = -D*d[i][j]*(delta(j,jpp)+delta(j,jpm))/2; real wt = t1+t2+t3+t4; if (i==1 && j==2 && ip==2 && jp==3) cout<<"WT1 = "<<wt<<endl; if (i==1 && j==2 && ip==1 && jp==3) cout<<"WT2 = "<<wt<<endl; net.setWeight(i1,j1,wt); }}void printArray(vector<int> array, int size){ for (int i=0;i<size;i++) cout<<array[i]<<" "; cout<<endl;}void printHopfieldEx63(vector<int> vec){ cout<<endl<<"----------Pattern--------------"<<endl; for (int i=0;i<25;i++) { if (i%5==0) cout<<endl; if (vec[i]==1) cout<<"*"; else cout<<"."; } cout<<endl<<"-------------------------------"<<endl;}void printHopfieldEx63(int vec[]){ cout<<endl<<"----------Pattern--------------"<<endl; for (int i=0;i<25;i++) { if (i%5==0) cout<<endl; if (vec[i]==1) cout<<"*"; else cout<<"."; } cout<<endl<<"-------------------------------"<<endl;}void hopfieldEx63(){ HopfieldNetwork net(25); int pattern1[25] = {-1,-1, 1,-1,-1, -1, 1,-1, 1,-1, 1,-1, 1,-1, 1, -1, 1,-1, 1,-1, -1,-1, 1,-1,-1 }; int pattern2[25] = { 1, 1,-1, 1, 1, 1,-1,-1,-1, 1, -1,-1, 1,-1,-1, 1,-1,-1,-1, 1, 1, 1,-1, 1, 1 }; printHopfieldEx63(pattern1); printHopfieldEx63(pattern2); //cout<<net.getWeightMatrix()<<endl; net.addPattern(pattern1); //cout<<net.getWeightMatrix()<<endl; net.addPattern(pattern2); //cout<<net.getWeightMatrix()<<endl; int patternNoise1[25] = { -1,-1, 1,-1,-1, -1, 1,-1, 1,-1, 1,-1, 1,-1, 1, -1, 1,-1,-1,-1, -1,-1, 1,-1,-1 }; int patternNoise2[25] = { 1, 1,-1, 1, 1, -1,-1,-1,-1, 1, -1,-1, 1,-1,-1, -1,-1,-1,-1, 1, 1, 1,-1, 1, 1 }; printHopfieldEx63(patternNoise1); //net.getOutput(patternNoise1); //net.getNextOutput(); //net.getNextOutput(); //net.getNextOutput(); //cout<<"TOTAL TIME = "<<net.getTime()<<endl; //printHopfieldEx63(net.getNextOutput()); //cout<<"TOTAL TIME = "<<net.getTime()<<endl; //printHopfieldEx63(net.getNextOutput()); //cout<<"TOTAL TIME = "<<net.getTime()<<endl; //printHopfieldEx63(net.getNextOutput()); //cout<<"TOTAL TIME = "<<net.getTime()<<endl; //printHopfieldEx63(net.getNextOutput()); //cout<<"TOTAL TIME = "<<net.getTime()<<endl; //printHopfieldEx63(net.getNextOutput()); //cout<<"TOTAL TIME = "<<net.getTime()<<endl; //printHopfieldEx63(net.getNextOutput()); //printHopfieldEx63(net.getNextOutput()); //cout<<"TOTAL TIME = "<<net.getTime()<<endl; //cout<<net.getWeightMatrix();}void hopfieldNetworkTester(){ HopfieldNetwork net(4); int pattern[] = {1,1,1,-1}; net.addPattern(pattern); cout<<net.getSize()<<endl<<net.getPatternCount()<<endl; net.getWeightMatrix().print(); cout<<endl; pattern[3]=0; //printArray(net.getOutput(pattern),4); //printArray(net.getNextOutput(),4); //printArray(net.getNextOutput(),4); //printArray(net.getNextOutput(),4); //printArray(net.getNextOutput(),4);}void hopfieldNetworkTester2(){ HopfieldNetwork net(3); net.setWeight(0,1,-2/3.0); net.setWeight(0,2,2/3.0); net.setWeight(1,2,-2/3.0); net.getWeightMatrix().print(); int pattern[3]; pattern[0]=-1; pattern[1]=-1; pattern[2]=-1; cout<<net.getEnergy(pattern)<<endl; pattern[0]=-1; pattern[1]=-1; pattern[2]=1; cout<<net.getEnergy(pattern)<<endl; pattern[0]=-1; pattern[1]=1; pattern[2]=-1; cout<<net.getEnergy(pattern)<<endl; pattern[0]=-1; pattern[1]=1; pattern[2]=1; cout<<net.getEnergy(pattern)<<endl; pattern[0]=1; pattern[1]=-1; pattern[2]=-1; cout<<net.getEnergy(pattern)<<endl; pattern[0]=1; pattern[1]=-1; pattern[2]=1; cout<<net.getEnergy(pattern)<<endl; pattern[0]=1; pattern[1]=1; pattern[2]=-1; cout<<net.getEnergy(pattern)<<endl; pattern[0]=1; pattern[1]=1; pattern[2]=1; cout<<net.getEnergy(pattern)<<endl; cout<<"Starting from (1,1,1), this is how things evolve:"<<endl; /*printArray(net.getOutput(pattern),3); cout<<"Energy = "<<net.getEnergy()<<endl; printArray(net.getNextOutput(),3); cout<<"Energy = "<<net.getEnergy()<<endl; printArray(net.getNextOutput(),3); cout<<"Energy = "<<net.getEnergy()<<endl; pattern[0]=-1; pattern[1]=-1; pattern[2]=-1; cout<<"Starting from (-1,-1,-1), this is how things evolve:"<<endl; printArray(net.getOutput(pattern),3); cout<<"Energy = "<<net.getEnergy()<<endl; printArray(net.getNextOutput(),3); cout<<"Energy = "<<net.getEnergy()<<endl; printArray(net.getNextOutput(),3); cout<<"Energy = "<<net.getEnergy()<<endl;*/}void recurrentNeuronTester(){ InputNeuron in1(0); RecurrentNeuron r1(1); r1.connect(&in1,1.0); r1.connect(&r1,1.0); r1.reset(0); r1.setActivationFunction(identity,didentity); in1.setValue(1); cout<<r1.getOutput()<<endl; for (int i=0;i<10;i++) cout<<r1.getNextOutput()<<endl; cout<<r1.getNextOutput()<<endl; cout<<r1.getNextOutput()<<endl;}void matrixTester(){ Matrix M(3,3); M.elementAt(0,0)=1; M.elementAt(0,1)=3; M.elementAt(0,2)=3; M.elementAt(1,0)=1; M.elementAt(1,1)=4; M.elementAt(1,2)=3; M.elementAt(2,0)=2; M.elementAt(2,1)=7; M.elementAt(2,2)=7; Matrix *T = M.inverse(); Matrix *I = M.multiply(T); cout<<"\nM:\n"; M.print(); cout<<"\ninverse:\n";T->print(); cout<<"\nproduct:\n"; I->print(); delete I; delete T;}void bigMatrixTester(){ Matrix M(300,300); int i,j; for (i=0;i<300;i++) { for (j=0;j<300;j++) M.elementAt(i,j)=(i==j)?1.0:0.0; cout<<i<<endl; } M.print(); cout<<"MATRIX CREATED\n"; Matrix *inv = M.inverse(); inv->print(); cout<<endl;}real fn1(real x){ return (real)sqrt(x*x+9);}void metaDataTester(){ char netfile[255],buff[1000]; cout<<"Network file name : "; cin>>netfile; MultiLayerNetwork net(netfile); cout<<"Meta data:\n"<<net.getMetaData()<<endl; cout<<"Assign meta data : "; cin>>buff; net.setMetaData(buff); net.save(netfile);}void rbfnEE6761Quiz2(){ RadialBasisNetwork net(2,2,1); real c1[] = {-7,2}; real c2[] = {-4,-2}; net.setCenter(0,c1); net.setCenter(1,c2); net.setCenterActivationFunction(fn1,NULL); net.setWeight(0,0,-0.3532); net.setWeight(1,0,0.3532); cout<<net.getOutput(c1)[0]<<endl; cout<<net.getOutput(c2)[0]<<endl;}void rbfnXOR(){ RadialBasisNetwork net(2,2,1); real center1[2]={0,0}; real center2[2]={1,1}; net.setCenter(0,center1); net.setCenter(1,center2); net.setWeight(0,0,2.5031); net.setWeight(1,0,2.5031); net.setBias(0,-1.848); cout<<net.getOutput(input1)[0]<<endl; cout<<net.getOutput(input2)[0]<<endl; cout<<net.getOutput(input3)[0]<<endl; cout<<net.getOutput(input4)[0]<<endl;}void mlnTest(){ MultiLayerNetwork net(2); net.addLayer(3); net.addLayer(1); net.setBias(1,0,2.53702); net.setBias(1,1,0.0193572); net.setBias(1,2,7.40168); net.setBias(2,0,-4.84302); net.connect(0,0,0,-6.38146); net.connect(0,1,0,-6.35976); net.connect(0,0,1,-2.87389); net.connect(0,1,1,-2.80739); net.connect(0,0,2,-5.00947); net.connect(0,1,2,-4.99942); net.connect(1,0,0,-9.60544); net.connect(1,1,0,-2.41616); net.connect(1,2,0,10.4497); cout<<net.getOutput(input1)[0]<<endl; cout<<net.getOutput(input2)[0]<<endl; cout<<net.getOutput(input3)[0]<<endl; cout<<net.getOutput(input4)[0]<<endl;}void tlnFileTester(){ char filename[100]; char destinationFilename[100]; cout<<"Enter annie1 network filename : "; cin>>filename; cout<<"Enter annie2 network filename : "; cin>>destinationFilename; TwoLayerNetwork net(filename); net.save(destinationFilename);}void mlnXOR(){ TrainingSet T(2,1); real output1[]={0}; real output2[]={1}; real output3[]={1}; real output4[]={0}; T.addIOpair(input1,output1); T.addIOpair(input2,output2); T.addIOpair(input3,output3); T.addIOpair(input4,output4); MultiLayerNetwork net(2); net.addLayer(3); net.addLayer(1); net.connectLayer(0); net.connectLayer(1); cout<<"BEFORE TRAINING\n"; cout<<net.getOutput(input1)[0]<<endl; cout<<net.getOutput(input2)[0]<<endl; cout<<net.getOutput(input3)[0]<<endl; cout<<net.getOutput(input4)[0]<<endl; net.train(T,10000,0.8); cout<<"\nAFTER TRAINING\n"; cout<<net.getOutput(input1)[0]<<endl; cout<<net.getOutput(input2)[0]<<endl; cout<<net.getOutput(input3)[0]<<endl; cout<<net.getOutput(input4)[0]<<endl; cout<<"Saving\n"; net.save("C:\\net.txt"); cout<<"Loading in a two layer network\n"; TwoLayerNetwork twonet("C:\\net.txt"); cout<<twonet.getOutput(input1)[0]<<endl; cout<<twonet.getOutput(input2)[0]<<endl; cout<<twonet.getOutput(input3)[0]<<endl; cout<<twonet.getOutput(input4)[0]<<endl;}void trsetShuffle(){ TrainingSet T(1,1); real in[1],out[1]; for (int i=0;i<20;i++) { in[0]=out[0]=(real)i; T.addIOpair(in,out); } cout<<T<<endl; int b; cin>>b;// T.shuffle(); cout<<T<<endl;}void trsetTester(){ TrainingSet T("delme"); cout<<T; T.save("delme2");}void rbfnTrainingWeightsTester(){ TrainingSet T(2,1); real output1[]={0}; real output2[]={1}; real output3[]={1}; real output4[]={0}; T.addIOpair(input1,output1); T.addIOpair(input2,output2); T.addIOpair(input3,output3); T.addIOpair(input4,output4); RadialBasisNetwork net(2,2,1); real center1[2]={0,0}; real center2[2]={1,1}; net.setCenter(0,center1); net.setCenter(1,center2); cout<<"\nBEFORE TRAINING\n"; cout<<net.getOutput(input1)[0]<<endl; cout<<net.getOutput(input2)[0]<<endl; cout<<net.getOutput(input3)[0]<<endl; cout<<net.getOutput(input4)[0]<<endl; net.trainWeights(T); cout<<"\nAFTER TRAINING\n"; cout<<net.getOutput(input1)[0]<<endl; cout<<net.getOutput(input2)[0]<<endl; cout<<net.getOutput(input3)[0]<<endl; cout<<net.getOutput(input4)[0]<<endl; cout<<"\nWEIGHTS\n"; cout<<net.getWeight(0,0)<<endl; cout<<net.getWeight(1,0)<<endl; cout<<"SAVING TO TEXT FILE\n"; net.save("c:\\net.txt"); RadialBasisNetwork net2("c:\\net.txt"); cout<<"\nAFTER LOADING FROM FILE\n"; cout<<net2.getOutput(input1)[0]<<endl; cout<<net2.getOutput(input2)[0]<<endl; cout<<net2.getOutput(input3)[0]<<endl; cout<<net2.getOutput(input4)[0]<<endl; cout<<"\nCENTERS\n"; cout<<net2.getCenter(0)[0]<<", "<<net2.getCenter(0)[1]<<endl; cout<<net2.getCenter(1)[0]<<", "<<net2.getCenter(1)[1]<<endl; cout<<"\nWEIGHTS\n"; cout<<net2.getWeight(0,0)<<endl; cout<<net2.getWeight(1,0)<<endl; net2.save("c:\\net2.txt");}void rbfnGradientDescentTester(){ RadialBasisNetwork net(2,2,1); TrainingSet T(2,1); real output1[]={0}; real output2[]={1}; real output3[]={1}; real output4[]={0}; T.addIOpair(input3,output3); T.addIOpair(input1,output1); T.addIOpair(input2,output2); T.addIOpair(input4,output4); real center1[2]={0,0}; real center2[2]={1,1}; net.setCenter(0,center1); net.setCenter(1,center2); cout<<"\nBEFORE TRAINING\n"; cout<<net.getOutput(input1)[0]<<endl; cout<<net.getOutput(input2)[0]<<endl; cout<<net.getOutput(input3)[0]<<endl; cout<<net.getOutput(input4)[0]<<endl; //net.trainCentersAndWeights(T,20000,0.8); net.trainWeights(T); cout<<"\nAFTER TRAINING\n"; cout<<net.getOutput(input1)[0]<<endl; cout<<net.getOutput(input2)[0]<<endl; cout<<net.getOutput(input3)[0]<<endl; cout<<net.getOutput(input4)[0]<<endl; cout<<"\nWEIGHTS\n"; cout<<net.getWeight(0,0)<<endl; cout<<net.getWeight(1,0)<<endl;}void createXORTrainingSet(){ TrainingSet T(2,1); real inputs[2],outputs[1]; inputs[0]=0; inputs[1]=0; outputs[0]=0; T.addIOpair(inputs,outputs); inputs[0]=0; inputs[1]=1; outputs[0]=1; T.addIOpair(inputs,outputs); inputs[0]=1; inputs[1]=0; outputs[0]=1; T.addIOpair(inputs,outputs); inputs[0]=1; inputs[1]=1; outputs[0]=0; T.addIOpair(inputs,outputs); T.save("xor.dat",annie::BINARY_FILE);}void matlab2annieTester(){ char netFile[255]; cout<<"Enter Network Filename : "; cin>>netFile; TwoLayerNetwork net(netFile); net.setActivationFunction(1,tansig,dtansig); net.setActivationFunction(2,tansig,dtansig); TrainingSet T("xor.dat",annie::BINARY_FILE); Vector in,des,out; T.initialize(); while (!T.epochOver()) { T.getNextPair(in,des); out = net.getOutput(in); printf("(%f,%f) : Wanted %f, got %f\n",in[0],in[1],des[0],out[0]); }}int main(int argc, char **argv){ srand(1234); try { //mlnTest(); //trsetTester(); //mlnXOR(); //TwoLayerNetwork net(argv[1]); //net.save(argv[2]); //trsetShuffle(); //metaDataTester(); //rbfnEE6761Quiz2(); //rbfnXOR(); //rbfnTrainingWeightsTester(); //rbfnGradientDescentTester(); //matrixTester(); //bigMatrixTester(); //recurrentNeuronTester(); //hopfieldNetworkTester(); //hopfieldNetworkTester2(); //hopfieldEx63(); //hopfieldTSP(); //facerotation(10); createXORTrainingSet(); matlab2annieTester(); } catch (Exception e) { cout<<e.what()<<endl; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -