您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 神经网络作业(函数逼近)
智能控制理论及应用作业1资料查询BP神经网络的主要应用:人脸识别、风电功率预测、短时交通流混沌预测、高炉熔渣粘度预测、汇率预测、价格预测、函数逼近等Rbf神经网络的主要应用:函数逼近、短时交通流预测、模式识别、降水预测、民航客运量预测、遥感影像分析、声纹识别、语言识别、人脸识别、车牌识别、汇率预测Hopfield网络应用:车牌识别、图像识别、遥感影像分类、字母识别、交通标志识别、优化计算中的应用、联想记忆存储器的实现、2BP编程算法:2.1利用样本训练一个BP网络注:此程序自李国勇书中学习而来程序部分:function[output_args]=bp(input_args)%UNTITLEDSummaryofthisfunctiongoeshere%Detailedexplanationgoeshere%此设计为两层BP神经网络,3输入,3隐含层节点,两个输出%初始化部分:lr=0.05;%%需要给定学习速率error_goal=0.001;%期望的误差max_epoch=100000;%训练的最大步长a=0.9;%惯性系数Oi=0;Ok=0;%给两组输入,以及目标输出:X=[111;-1-11;1-11;];%随便给一组输入输入,训练BP网络T=[111;111];%X=-1:0.1:1;%输入范围%T=sin(pi*X);%X=[]q=3;%隐含层的节点数自己定义,在此给3个%初始化[M,N]=size(X);%输入节点个数为M,N为样本数[L,N]=size(T);%输出节点个数为Lwij=rand(q,M);%先给定加权系数一组随机值wki=rand(L,q);wij0=zeros(size(wij));%加权系数矩阵的初始值wki0=zeros(size(wki));forepoch=1:max_epoch%计算开始NETi=wij*X;%各个隐含层的净输入forj=1:Nfori=1:qOi(i,j)=2/(1+exp(-NETi(i,j)))-1;%再输入作用下,隐含层的输出endendNETk=wki*Oi;%各个输出层的净输入fori=1:Nfork=1:LOk(k,i)=2/(1+exp(-NETk(k,i)))-1;%在输入作用下,输出层的输出endendE=((T-Ok)'*(T-Ok))/2;%性能指标函数,就是误差if(Eerror_goal)break;%判断是否满足误差,满足的话就直接跳出计算%不满足的话,就要修正加权系数elsedeltak=Ok.*(1-Ok).*(T-Ok);%计算△kw=wki;wki=wki+lr*deltak*Oi'+a*(wki-wki0);wki0=w;deltai=Oi.*(1-Oi).*(deltak'*wki)';%计算△iw=wij;wij=wij+lr*deltai*X'+a*(wij-wij0);wij0=w;endepoch%当前是第多少步X1=X;%保护当前的输入NETi=wij*X1;%再一次计算隐含层的输入输出forj=1:Nfori=1:qOi(i,j)=2/(1+exp(-NETi(i,j)))-1;%endendNETk=wki*Oi;%再一次计算输出层的输出fori=1:Nfork=1:LOk(k,i)=2/(1+exp(-NETk(k,i)))-1;endend%直到误差满足要求才跳到此步,输出修正的输出值Oi%Ok%最终满足误差要求下的输出wij%输出输入层与隐含层的最终修改后的权值wki%输出隐含层与输出层之间的取值end仿真结果:epoch=8Oi=0.9690-0.48040.99950.99950.92440.99890.97340.99910.9356Ok=1.00001.00001.00000.99820.96580.9981wij=3.57962.02822.59855.3497-0.46442.57735.5337-0.4516-1.6788wki=1.54906.14305.88032.05931.32883.8144由仿真结果可以看出,网络在第八步就可以得到满足误差函数的输出,输出时OK。由于初始权值是随机给定的,因此每次运行结果可能有所差异。2.2用BP网路逼近sin函数:function[output_args]=BP1(input_args)%UNTITLEDSummaryofthisfunctiongoeshere%Detailedexplanationgoeshere%P=[012345678910];%T=[01234321234];P=-1:0.1:1;%输入范围T=sin(pi*P);%样本值net=newff([010],[5,1],{'tansig','purelin'});%建立网络%net=newff([010],[5,1],{'tansig','purelin'},'traingd','learngd','msereg');%net=newff([010],[5,1],{'tansig','purelin'},'traingdx','learngd','msereg');net.trainParam.epochs=200;%训练步长为200net=train(net,P,T);%开始训练figure;Y=sim(net,P);%输入下网络的输出plot(P,T,'+',P,Y,'o')%将样本与实际输出作图显示end逼近结果:其中+为目标值,O为实际输出值,从逼近小姑来看,效果还是比较理想的。3GUI作业:MATLAB工具箱中常用的几类函数:前向网络创建函数:newcf创建级联前向网络newff创建前向BP网络newffd创建存在输入延迟的前向网络传递函数:logsigS型的对数函数dlogsiglogsig的导函数tansigS型的正切函数dtansigtansig的导函数purelin纯线性函数dpurelinpurelin的导函数学习函数:learngd基于梯度下降法的学习函数learngdm梯度下降栋梁学习函数训练函数:trainbrBayes规范化BP训练函数-1-0.8-0.6-0.4-0.200.20.40.60.81-1.5-1-0.500.511.5trainc循环顺序渐增训练函数traincgbPowell-Beale连接梯度BP训练函数traincgfFletcher-Powell连接梯度BP训练函数traincgpPolak-Ribiere连接梯度BP训练函数traingda自适应lrBP的梯度递减训练函数traingdx动量及自适应lrBP的梯度递减训练函数trainlmLevenberg-MarquardtBP训练函数trainoss一步正切BP训练函数trainr随机顺序递增更新训练函数trainrp带反弹的BP训练函数trains顺序递增BP训练函数trainscg量化连接梯度BP训练函数性能函数:mse均方误差函数msereg均方误差规范化函数显示函数:plotperf绘制网络的性能plotes绘制一个单独神经元的误差曲面plotep绘制权值和阈值在误差曲面的位置errsurf计算单个神经元的误差曲面GUI的应用:我选择的是建立BP网络逼近sin函数首先在MATLAB主窗口输入nntool即可进入神经网络工具箱点击下方的creatnetworkordata即可进行输入、目标输出及网络的选择。1首先输入一个输入X:[-1:0.1:1];再输入期望输出T:[sin(pi*(-1:0.1:1))];2然后建立BP网络如下图所示:命名为BP1选取网络形式中选择:前馈BP网络,输入选择X,期望输出选择T,训练函数选择:TRAINLM(Levenberg-MarquardtBP训练函数)学习函数选择:LEARNGD(基于梯度下降法的学习函数)误差计算函数选择MSE(均方误差函数),神经元传输函数选择:TANSIG(S型的正切函数)单击creat即可建立网络。3建立好后进行训练进入训练界面,选择输入和期望输出,即可进行训练。训练结果如下:性能如下所示:可以看出,当系统训练6步时,系统输出即可满足性能要求,此时停止训练。再此图,我们可以清楚的看清系统的期望输出、实际输出和二者的误差。从误差可以看出,逼近的sin函数误差是很小的。同理可利用RBF网络逼近SIN函数建立网络如图所示:训练结果如下图所示:此图显示了利用RBF网路逼近sin函数,总共进行了27步逼近,最后的误差要优于BP网络。原理清晰之后,可进行多种神经网络的训练,比较不同算法以及不同训练规则及误差计算函数不同对逼近效果的影响,优于时间关系,在此不一一罗列。
本文标题:神经网络作业(函数逼近)
链接地址:https://www.777doc.com/doc-4258140 .html