⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tester.cpp

📁 几种神经网络的源程序
💻 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 + -