您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > BP网络和RBF网络的实验报告
一、作业要求利用BP神经网络与RBF(径向基函数)网络对行人、自行车、卡车三类目标进行分类,比较两种网络的分类性能,写出实验报告。二、实验内容1、三类目标数据的分析根据所给的三类信号的样本,每一个样本中均包含1040个数据,由于每一个样本的数据量较大,若全部作为神经元的输入,计算量太大,所以必须首先对信号进行分析,提取有价值的特征信息。由于三类信号数据量大,考虑用平均值代替,提取数据特征作为神经网络的输入。2、设计BP神经网络和RBF网络我们所采用的BP网络的输入节点数为lO个,输出节点为3,隐层节点数可调。输入信号为雷达信号10个频域特征向量,在本文中需要识别的信号有:自行车,卡车和行人三种信号,则定义神经网络的期望输出矢量为{1,0,0}、{0,1,0}和{0,0,1}。识别时的判定标准是:输出节点中各分量大于0.8认为是1,小于0.2认为是0。如实际输出为(0.9,0.1,0.1),则认为其识别结果为自行车。RBF网络根据数据值的大小不同分成不同的类型,分类标准:数值小于800的设置为类型1对应于行人;800-1600的设置为类型2对应于自行车;1600-2400的设置为类型3对应于卡车;大于2400的则不计。3、试验流程(1)批量输入学习样本并且对输入进行FFT处理,并和输出量进行归一化处理。(2)取FFT后序列的特征向量作为训练序列。(3)权系数初始化:初始化:最大训练次数,学习精度,隐节点数,初始权值、阈值,初始学习速率等。(4)开始训练。(5)修正权系数。(6)判断设定的最大误差和最大循环次数。(7)结束。三、实验结果分析1.BP网络实验结果在程序调试的过程当中,权值的初始值和设定的阈值与程序运行的结果有直接的关系,误差函数E的大小也直接关系到识别率的高低程度。如果E值出现振荡,那么就要调整学习速率的值,将学习速率的值调小,直到观察E的值是连续的单调递减为止。在识别的过程当中,卡车和行人的识别率一直都比较高,自行车的识别率较低,分析原因是因为自行车的速度有的和行人接近,有的又和卡车接近,介于卡车和自行车之间,容易出现交叠现象。这就导致了自行车的数据有一部分被识别为行人,有一部分被识别为卡车,所以自行车的识别率相对于行人和卡车来说低一些。所以我们要想进一步提高识别率的话,必须对三类数据进行深入的分析,针对自行车信号频谱的特点来更多地寻找一些区别于行人和卡车的有效的特征值,这样才能将识别率提高到一个较高的水平。2.RBF网络实验结果由于数据量太大,只选取了每类信号的第一个样本,选取前800个数据用来测试。根据这种分类方法对每类信号第一个样本的测试结果如下图所示。从图中可以看出差不多三类的分类准确度大约都在60%,分类效果不是很理想。理想的分析结果应该是行人和卡车的分类更精确些,自行车的分类相对来说精确度小些,出现这种分类误差与分类标准的制定有关,还与RBF网络的设置有关。由于编写的程序还不完善,处理的数据相对来说较少,浪费了很多数据资源,得到的结果相对来说不是很准确,还需要进一步的改善。四、程序代码1.BP网络(1)FFT处理程序#includeconio.h#includestring#includefstream#includestdafx.h#includeiostream#includecomplex#includebitset#includevectorusingnamespacestd;boolinputData(unsignedlong&,vectorcomplexdouble&);voidFFT(unsignedlong&,vectorcomplexdouble&);voiddisplay(unsignedlong&,vectorcomplexdouble&);boolreadDataFromFile(unsignedlong&,vectorcomplexdouble&);boolsaveResultToFile(unsignedlong&,vectorcomplexdouble&);constdoublePI=3.1415926;int_tmain(intargc,_TCHAR*argv[]){vectorcomplexdoublevecList;unsignedlongulN=0;charchChoose='';while(chChoose!='Q'&&chChoose!='q'){cout\nPleasechoseafunctionendl;cout\t1.Inputdatamanually,press'M':endl;cout\t2.Readdatafromfile,press'F':endl;cout\t3.Quit,press'Q'endl;coutPleasechose:;chChoose=getchar();switch(chChoose){case'm':case'M':if(inputData(ulN,vecList)){FFT(ulN,vecList);display(ulN,vecList);saveResultToFile(ulN,vecList);}break;case'f':case'F':if(readDataFromFile(ulN,vecList)){FFT(ulN,vecList);display(ulN,vecList);saveResultToFile(ulN,vecList);}break;}}return0;}boolIs2Power(unsignedlongul){if(ul2)returnfalse;while(ul1){if(ul%2)returnfalse;ul/=2;}returntrue;}boolinputData(unsignedlong&ulN,vectorcomplexdouble&vecList){cout\n\n\n==============================InputData===============================endl;cout\nInputN:;cinulN;if(!Is2Power(ulN)){coutNisinvalid(Nmustlike2,4,8,.....),pleaseretry.endl;returnfalse;}vecList.clear();complexdoublec;for(unsignedlongi=0;iulN;i++){coutInputx(i):;cinc;vecList.push_back(c);}returntrue;}boolreadDataFromFile(unsignedlong&ulN,vectorcomplexdouble&vecList){cout\n\n\n===============ReadDataFromFile==============endl;stringstrfilename;coutInputfilename:;cinstrfilename;coutopenfilestrfilename.......endl;ifstreamloadfile;loadfile.open(strfilename.c_str());if(!loadfile){cout\tfailedendl;returnfalse;}else{cout\tsucceedendl;}vecList.clear();loadfileulN;if(!loadfile){coutcan'tgetNendl;returnfalse;}else{coutN=ulNendl;}ulN=1024;complexdoublec;for(unsignedlongi=0;i1024;i++)//ulN;i++){loadfilec;coutx(i)=cendl;vecList.push_back(c);}loadfile.close();returntrue;}boolsaveResultToFile(unsignedlong&ulN,vectorcomplexdouble&vecList){charchChoose='';coutDoyouwanttosavetheresulttofile?(y/n):;chChoose=_getch();if(chChoose!='y'&&chChoose!='Y'){returntrue;}stringstrfilename;cout\nInputfilename:;cinstrfilename;coutSaveresulttofilestrfilename......endl;ofstreamsavefile(strfilename.c_str());if(!savefile){coutcan'topenfileendl;returnfalse;}savefileulNendl;for(vectorcomplexdouble::iteratori=vecList.begin();ivecList.end();i++){savefile*iendl;}coutsavesucceed.endl;savefile.close();returntrue;}voidFFT(unsignedlong&ulN,vectorcomplexdouble&vecList){unsignedlongulPower=0;unsignedlongulN1=ulN-1;while(ulN10){ulPower++;ulN1/=2;}bitsetsizeof(unsignedlong)*8bsIndex;unsignedlongulIndex;unsignedlongulK;for(unsignedlongp=0;pulN;p++){ulIndex=0;ulK=1;bsIndex=bitsetsizeof(unsignedlong)*8(p);for(unsignedlongj=0;julPower;j++){ulIndex+=bsIndex.test(ulPower-j-1)?ulK:0;ulK*=2;}if(ulIndexp){complexdoublec=vecList[p];vecList[p]=vecList[ulIndex];vecList[ulIndex]=c;}}vectorcomplexdoublevecW;for(unsignedlongi=0;iulN/2;i++){vecW.push_back(complexdouble(cos(2*i*PI/ulN),-1*sin(2*i*PI/ulN)));}for(unsignedlongm=0;mulN/2;m++){cout\nvW[m]=vecW[m];}unsignedlongulGroupLength=1;unsignedlongulHalfLength=0;unsignedlongulGroupCount=0;complexdoublecw;complexdoublec1;complexdoublec2;for(unsignedlongb=0;bulPower;b++){ulHalfLength=ulGroupLength;ulGroupLength*=2;for(unsignedlongj=0;julN;j+=ulGroupLength){for(unsignedlongk=0;kulHalfLength;k++){cw=vecW[k*ulN/ul
本文标题:BP网络和RBF网络的实验报告
链接地址:https://www.777doc.com/doc-2901012 .html