BP神经网络matlab实例(简单而经典)
MATLAB程序代码--bp神经网络通用代码
MATLAB程序代码--bp神经网络通用代码matlab通用神经网络代码学习了一段时间的神经网络,总结了一些经验,在这愿意和大家分享一下, 希望对大家有帮助,也希望大家可以把其他神经网络的通用代码在这一起分享感应器神经网络、线性网络、BP神经网络、径向基函数网络%通用感应器神经网络。
P=[-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1 50];%输入向量T=[1 1 0 0 1];%期望输出plotpv(P,T);%描绘输入点图像net=newp([-40 1;-1 50],1);%生成网络,其中参数分别为输入向量的范围和神经元感应器数量hold onlinehandle=plotpc(net.iw{1},net.b{1});net.adaptparam.passes=3;for a=1:25%训练次数[net,Y,E]=adapt(net,P,T);linehandle=plotpc(net.iw{1},net.b{1},linehandle);drawnow;end%通用newlin程序%通用线性网络进行预测time=0:0.025:5;T=sin(time*4*pi);Q=length(T);P=zeros(5,Q);%P中存储信号T的前5(可变,根据需要而定)次值,作为网络输入。
P(1,2:Q)=T(1,1:(Q-1));P(2,3:Q)=T(1,1:(Q-2));P(3,4:Q)=T(1,1:(Q-3));P(4,5:Q)=T(1,1:(Q-4));P(5,6:Q)=T(1,1:(Q-5));plot(time,T)%绘制信号T曲线xlabel('时间');ylabel('目标信号');title('待预测信号');net=newlind(P,T);%根据输入和期望输出直接生成线性网络a=sim(net,P);%网络测试figure(2)plot(time,a,time,T,'+')xlabel('时间');ylabel('输出-目标+');title('输出信号和目标信号');e=T-a;figure(3)plot(time,e)hold onplot([min(time) max(time)],[0 0],'r:')%可用plot(x,zeros(size(x)),'r:')代替hold offxlabel('时间');ylabel('误差');title('误差信号');%通用BP神经网络P=[-1 -1 2 2;0 5 0 5];t=[-1 -1 1 1];net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingd');%输入参数依次为:'样本P范围',[各层神经元数目],{各层传递函数},'训练函数'%训练函数traingd--梯度下降法,有7个训练参数.%训练函数traingdm--有动量的梯度下降法,附加1个训练参数mc(动量因子,缺省为0.9)%训练函数traingda--有自适应lr的梯度下降法,附加3个训练参数:lr_inc(学习率增长比,缺省为1.05;% lr_dec(学习率下降比,缺省为0.7);max_perf_inc(表现函数增加最大比,缺省为1.04)%训练函数traingdx--有动量的梯度下降法中赋以自适应lr的方法,附加traingdm和traingda的4个附加参数%训练函数trainrp--弹性梯度下降法,可以消除输入数值很大或很小时的误差,附加4个训练参数: % delt_inc(权值变化增加量,缺省为1.2);delt_dec(权值变化减小量,缺省为0.5);% delta0(初始权值变化,缺省为0.07);deltamax(权值变化最大值,缺省为50.0)% 适合大型网络%训练函数traincgf--Fletcher-Reeves共轭梯度法;训练函数traincgp--Polak-Ribiere共轭梯度法;%训练函数traincgb--Powell-Beale共轭梯度法%共轭梯度法占用存储空间小,附加1训练参数searchFcn(一维线性搜索方法,缺省为srchcha);缺少1个训练参数lr%训练函数trainscg--量化共轭梯度法,与其他共轭梯度法相比,节约时间.适合大型网络% 附加2个训练参数:sigma(因为二次求导对权值调整的影响参数,缺省为5.0e-5);% lambda(Hessian阵不确定性调节参数,缺省为5.0e-7)% 缺少1个训练参数:lr%训练函数trainbfg--BFGS拟牛顿回退法,收敛速度快,但需要更多内存,与共轭梯度法训练参数相同,适合小网络%训练函数trainoss--一步正割的BP训练法,解决了BFGS消耗内存的问题,与共轭梯度法训练参数相同%训练函数trainlm--Levenberg-Marquardt训练法,用于内存充足的中小型网络net=init(net);net.trainparam.epochs=300; %最大训练次数(前缺省为10,自trainrp后,缺省为100)net.trainparam.lr=0.05; %学习率(缺省为0.01)net.trainparam.show=50; %限时训练迭代过程(NaN表示不显示,缺省为25)net.trainparam.goal=1e-5; %训练要求精度(缺省为0)%net.trainparam.max_fail 最大失败次数(缺省为5)%net.trainparam.min_grad 最小梯度要求(前缺省为1e-10,自trainrp后,缺省为1e-6) %net.trainparam.time 最大训练时间(缺省为inf)[net,tr]=train(net,P,t); %网络训练a=sim(net,P) %网络仿真%通用径向基函数网络——%其在逼近能力,分类能力,学习速度方面均优于BP神经网络%在径向基网络中,径向基层的散步常数是spread的选取是关键%spread越大,需要的神经元越少,但精度会相应下降,spread的缺省值为1%可以通过net=newrbe(P,T,spread)生成网络,且误差为0%可以通过net=newrb(P,T,goal,spread)生成网络,神经元由1开始增加,直到达到训练精度或神经元数目最多为止%GRNN网络,迅速生成广义回归神经网络(GRNN)P=[4 5 6];T=[1.5 3.6 6.7];net=newgrnn(P,T);%仿真验证p=4.5;v=sim(net,p)%PNN网络,概率神经网络P=[0 0 ;1 1;0 3;1 4;3 1;4 1;4 3]';Tc=[1 1 2 2 3 3 3];%将期望输出通过ind2vec()转换,并设计、验证网络T=ind2vec(Tc);net=newpnn(P,T);Y=sim(net,P);Yc=vec2ind(Y)%尝试用其他的输入向量验证网络P2=[1 4;0 1;5 2]';Y=sim(net,P2);Yc=vec2ind(Y)%应用newrb()函数构建径向基网络,对一系列数据点进行函数逼近P=-1:0.1:1;T=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609...0.1336 -0.2013 -0.4344 -0.500 -0.3930 -0.1647 -0.0988...0.3072 0.3960 0.3449 0.1816 -0.0312 -0.2189 -0.3201];%绘制训练用样本的数据点plot(P,T,'r*');title('训练样本');xlabel('输入向量P');ylabel('目标向量T');%设计一个径向基函数网络,网络有两层,隐层为径向基神经元,输出层为线性神经元%绘制隐层神经元径向基传递函数的曲线p=-3:.1:3;a=radbas(p);plot(p,a)title('径向基传递函数')xlabel('输入向量p')%隐层神经元的权值、阈值与径向基函数的位置和宽度有关,只要隐层神经元数目、权值、阈值正确,可逼近任意函数%例如a2=radbas(p-1.5);a3=radbas(p+2);a4=a+a2*1.5+a3*0.5;plot(p,a,'b',p,a2,'g',p,a3,'r',p,a4,'m--')title('径向基传递函数权值之和')xlabel('输入p');ylabel('输出a');%应用newrb()函数构建径向基网络的时候,可以预先设定均方差精度eg以及散布常数sc eg=0.02;sc=1; %其值的选取与最终网络的效果有很大关系,过小造成过适性,过大造成重叠性net=newrb(P,T,eg,sc);%网络测试plot(P,T,'*')xlabel('输入');X=-1:.01:1;Y=sim(net,X);hold onplot(X,Y);hold offlegend('目标','输出')%应用grnn进行函数逼近P=[1 2 3 4 5 6 7 8];T=[0 1 2 3 2 1 2 1];plot(P,T,'.','markersize',30)axis([0 9 -1 4])title('待逼近函数')xlabel('P')ylabel('T')%网络设计%对于离散数据点,散布常数spread选取比输入向量之间的距离稍小一些spread=0.7;net=newgrnn(P,T,spread);%网络测试A=sim(net,P);hold onoutputline=plot(P,A,'o','markersize',10,'color',[1 0 0]);title('检测网络')xlabel('P')ylabel('T和A')%应用pnn进行变量的分类P=[1 2;2 2;1 1]; %输入向量Tc=[1 2 3]; %P对应的三个期望输出%绘制出输入向量及其相对应的类别plot(P(1,:),P(2,:),'.','markersize',30)for i=1:3text(P(1,i)+0.1,P(2,i),sprintf('class %g',Tc(i)))endaxis([0 3 0 3]);title('三向量及其类别')xlabel('P(1,:)')ylabel('P(2,:)')%网络设计T=ind2vec(Tc);spread=1;net=newgrnn(P,T,speard);%网络测试A=sim(net,P);Ac=vec2ind(A);%绘制输入向量及其相应的网络输出plot(P(1,:),P(2,:),'.','markersize',30)for i=1:3text(P(1,i)+0.1,P(2,i),sprintf('class %g',Ac(i)))endaxis([0 3 0 3]);title('网络测试结果')xlabel('P(1,:)')ylabel('P(2,:)')P=[13, 0, 1.119, 1, 26.3;22, 0, 1.135, 1, 26.3;-15, 0, 0.9017, 1, 20.4;-30, 0, 0.9172, 1, 26.7;24, 0, 1.238,0.9704,28.2;3,24,1.119,1,26.3;0,52,1.089,1,26.3;0,-73,1.0889,1,26.3;1,28, 0.8748,1,26.3;-1,-39,1.1168,1,26.7;-2, 0, 1.495, 1, 26.3;0, -1, 1.438, 1, 26.3;4, 1,0.4964, 0.9021, 26.3;3, -1, 0.5533, 1.2357, 26.7;-5, 0, 1.7368, 1, 26.7;1, 0, 1.1045, 0.0202, 26.3;-2, 0, 1.1168, 1.3764, 26.7;-3, -1, 1.1655, 1.4418,27.5;3, 2, 1.0875, 0.748, 27.5;-3, 0, 1.1068, 2.2092, 26.3;4, 1, 0.9017, 1, 13.7;3, 2, 0.9017, 1, 14.9;-3, 1, 0.9172, 1, 13.7;-2, 0, 1.0198, 1.0809, 16.1;0, 1, 0.9172, 1, 13.7] T=[1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0 ;1, 0, 0, 0, 0; 0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 1, 0, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 1, 0, 0;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ;0, 0, 0, 1, 0 ; 0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1;0, 0, 0, 0, 1 ];%期望输出plotpv(P,T);%描绘输入点图像。
(完整版)BP神经网络matlab实例(简单而经典)
p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络net.trainParam.show=2000; % 训练网络net.trainParam.lr=0.01;net.trainParam.epochs=100000;net.trainParam.goal=1e-5;[net,tr]=train(net ,pn,tn); %调用TRAINGDM算法训练BP 网络pnew=pnew1';pnewn=tramnmx(pnew,minp,maxp);anewn=sim(net,pnewn); %对BP网络进行仿真anew=postmnmx(anewn,mint,maxt); %还原数据y=anew';1、BP网络构建(1)生成BP网络=net newff PR S S SNl TF TF TFNl BTF BLF PF(,[1 2...],{ 1 2...},,,)PR:由R维的输入样本最小最大值构成的2R⨯维矩阵。
S S SNl:各层的神经元个数。
[ 1 2...]{ 1 2...}TF TF TFNl:各层的神经元传递函数。
BTF:训练用函数的名称。
(2)网络训练[,,,,,] (,,,,,,)=net tr Y E Pf Af train net P T Pi Ai VV TV(3)网络仿真=[,,,,] (,,,,)Y Pf Af E perf sim net P Pi Ai T{'tansig','purelin'},'trainrp'2、BP网络举例举例1、%traingdclear;clc;P=[-1 -1 2 2 4;0 5 0 5 7];T=[-1 -1 1 1 -1];%利用minmax函数求输入样本范围net = newff(minmax(P),T,[5,1],{'tansig','purelin'},'trainrp');net.trainParam.show=50;%net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;[net,tr]=train(net,P,T);net.iw{1,1}%隐层权值net.b{1}%隐层阈值net.lw{2,1}%输出层权值net.b{2}%输出层阈值sim(net,P)举例2、利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。
用matlab编BP神经网络预测程序
求用matlab编BP神经网络预测程序求一用matlab编的程序P=[。
];输入T=[。
];输出% 创建一个新的前向神经网络net_1=newff(minmax(P),[10,1],{'tansig','purelin'},'traingdm')% 当前输入层权值和阈值inputWeights=net_1.IW{1,1}inputbias=net_1.b{1}% 当前网络层权值和阈值layerWeights=net_1.LW{2,1}layerbias=net_1.b{2}% 设置训练参数net_1.trainParam.show = 50;net_1.trainParam.lr = 0.05;net_1.trainParam.mc = 0.9;net_1.trainParam.epochs = 10000;net_1.trainParam.goal = 1e-3;% 调用TRAINGDM 算法训练BP 网络[net_1,tr]=train(net_1,P,T);% 对BP 网络进行仿真A = sim(net_1,P);% 计算仿真误差E = T - A;MSE=mse(E)x=[。
]';%测试sim(net_1,x) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%不可能啊我200928对初学神经网络者的小提示第二步:掌握如下算法:2.最小均方误差,这个原理是下面提到的神经网络学习算法的理论核心,入门者要先看《高等数学》(高等教育出版社,同济大学版)第8章的第十节:“最小二乘法”。
3.在第2步的基础上看Hebb学习算法、SOM和K-近邻算法,上述算法都是在最小均方误差基础上的改进算法,参考书籍是《神经网络原理》(机械工业出版社,Simon Haykin著,中英文都有)、《人工神经网络与模拟进化计算》(清华大学出版社,阎平凡,张长水著)、《模式分类》(机械工业出版社,Richard O. Duda等著,中英文都有)、《神经网络设计》(机械工业出版社,Martin T. Hargan等著,中英文都有)。
用遗传算法优化BP神经网络的Matlab编程实例
用遗传算法优化BP神经网络的M a t l a b编程实例由于BP网络的权值优化是一个无约束优化问题,而且权值要采用实数编码,所%??进行优化,再用BP算法训练网络%--------------------------------------------------------------------------%数据归一化预处理nntwarnoffXX=premnmx(XX);YY=premnmx(YY);%创建网络net=newff(minmax(XX),[19,25,1],{ 'tansig','tansig','purelin'},'trainlgen=100;%遗传代数%下面调用gaot工具箱,其中目标函数定义为gabpEval[x,endPop,bPop,trace]=ga(aa,'gab pEval',[],initPpp,[1e-611],'maxGenTe rm',gen,...??'normGeomSelect',[0.09],['arit hXover'],[2],'nonUnifMutation',[2gen 3]);%绘收敛曲线图figure(1)-');-');;;xlabel('Generation');ylabel('Fittness');%下面将初步得到的权值矩阵赋给尚未开始训练的BP网络[W1,B1,W2,B2,P,T,A1,A2,SE,val]=g adecod(x);net.LW{2,1}=W1;net.LW{3,2}=W2;net.b{2,1}=B1;net.b{3,1}=B2;XX=P;%val-thefittnessofthisindividual%sol-theindividual,returnedtoall owforLamarckianevolution%options-[current_generation]loaddata2nntwarnoffXX=premnmx(XX);YY=premnmx(YY);P=XX;T=YY;R=size(P,1);长度loaddata2nntwarnoffXX=premnmx(XX);YY=premnmx(YY);P=XX;T=YY;R=size(P,1);S2=size(T,1);S1=25;%隐含层节点数S=R*S1+S1*S2+S1+S2;%遗传算法编码长度R*S1个%接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1fori=1:S1,??B1(i,1)=x((R*S1+S1*S2)+i);end%接着的S2个编码(即第R*S1+S1*S2+S1个后的编码)为B2 fori=1:S2,??B2(i,1)=x((R*S1+S1*S2+S1)+i);end%计算S1与S2层的输出。
BP神经网络预测的matlab代码
BP神经网络预测的matlab代码附录5:BP神经网络预测的matlab代码: P=[ 00.13860.21970.27730.32190.35840.38920.41590.43940.46050.47960.49700.52780.55450.59910.60890.61820.62710.63560.64380.65160.65920.66640.67350.72220.72750.73270.73780.74270.74750.75220.75680.76130.76570.7700]T=[0.4455 0.323 0.4116 0.3255 0.4486 0.2999 0.4926 0.2249 0.48930.2357 0.4866 0.22490.4819 0.2217 0.4997 0.2269 0.5027 0.217 0.5155 0.1918 0.5058 0.2395 0.4541 0.2408 0.4054 0.2701 0.3942 0.3316 0.2197 0.2963 0.5576 0.1061 0.4956 0.267 0.5126 0.2238 0.5314 0.2083 0.5191 0.208 0.5133 0.18480.5089 0.242 0.4812 0.2129 0.4927 0.287 0.4832 0.2742 0.5969 0.24030.5056 0.2173 0.5364 0.1994 0.5278 0.2015 0.5164 0.2239 0.4489 0.2404 0.4869 0.2963 0.4898 0.1987 0.5075 0.2917 0.4943 0.2902 ]threshold=[0 1]net=newff(threshold,[11,2],{'tansig','logsig'},'trainlm');net.trainParam.epochs=6000net.trainParam.goal=0.01LP.lr=0.1;net=train(net,P',T')P_test=[ 0.77420.77840.78240.78640.79020.7941 ] out=sim(net,P_test')友情提示:以上面0.7742为例0.7742=ln(47+1)/5因为网络输入有一个元素,对应的是测试时间,所以P只有一列,Pi=log(t+1)/10,这样做的目的是使得这些数据的范围处在[0 1]区间之内,但是事实上对于logsin命令而言输入参数是正负区间的任意值,而将输出值限定于0到1之间。
标准的BP神经网络算法程序MATLAB
count=1;
while (count<=maxcount) %结束条件1迭代1000次
c=1;
while (c<=samplenum)
for k=1:outputNums
d(k)=expectlist(c,k); %获得期望输出的向量,d(1:3)表示一个期望向量内 的值
end
break;
end
count=count+1;%训练次数加1
end%第一个while结束
error(maxcount+1)=error(maxcount);
p=1:count;
pp=p/50;
plot(pp,error(p),"-"); %显示误差
deltv(i,j)=alpha*yitay(j)*x(i); %同上deltw
v(i,j)=v(i,j)+deltv(i,j)+a*dv(i,j);
dv(i,j)=deltv(i,j);
end
end
c=c+1;
end%第二个while结束;表示一次BP训练结束
double tmp;
for i=1:inputNums
x(i)=samplelist(c,i); %获得输入的向量(数据),x(1:3)表一个训练向量
字串4
end
%Forward();
for j=1:hideNums
net=0.0;
for i=1:inputNums
net=net+x(i)*v(i,j);
dw=zeros(hideNums,outputNums); %10*3
用MATLAB的神经网络工具箱实现三层BP网络
用MATLAB的神经网络工具箱实现三层BP网络用MATLAB的神经网络工具箱实现三层BP网络% 读入训练数据和测试数据Input = [];Output = [];str = {'Test','Check'};Data = textread([str{1},'.txt']);% 读训练数据Input = Data(:,1:end-1);% 取数据表的前五列(主从成分)Output = Data(:,end);% 取数据表的最后一列(输出值)Data = textread([str{2},'.txt']);% 读测试数据CheckIn = Data(:,1:end-1);% 取数据表的前五列(主从成分)CheckOut = Data(:,end);% 取数据表的最后一列(输出值)Input = Input';Output = Output';CheckIn = CheckIn';CheckOut = CheckOut';% 矩阵赚置[Input,minp,maxp,Output,mint,maxt] = premnmx(Input,Output);% 标准化数据%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%% 神经网络参数设置%====可以修正处Para.Goal = 0.0001;% 网络训练目标误差Para.Epochs = 800;% 网络训练代数Para.LearnRate = 0.1;% 网络学习速率%====Para.Show = 5;% 网络训练显示间隔Para.InRange = repmat([-1 1],size(Input,1),1);% 网络的输入变量区间Para.Neurons = [size(Input,1)*2+1 1];% 网络后两层神经元配置Para.TransferFcn= {'logsig' 'purelin'};% 各层的阈值函数Para.TrainFcn = 'trainlm';% 网络训练函数赋值% traingd : 梯度下降后向传播法% traingda : 自适应学习速率的梯度下降法% traingdm : 带动量的梯度下降法% traingdx :% 带动量,自适应学习速率的梯度下降法Para.LearnFcn = 'learngdm';% 网络学习函数Para.PerformFcn = 'sse';% 网络的误差函数Para.InNum = size(Input,1);% 输入量维数Para.IWNum = Para.InNum*Para.Neurons(1);% 输入权重个数Para.LWNum = prod(Para.Neurons);% 层权重个数Para.BiasNum = sum(Para.Neurons);% 偏置个数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%Net = newff(Para.InRange,Para.Neurons,Para.TransferFcn,...Para.TrainFcn,Para.LearnFcn,Para.PerformFcn);% 建立网络%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%Net.trainParam.show = Para.Show;% 训练显示间隔赋值Net.trainParam.goal = Para.Goal;% 训练目标误差赋值Net.trainParam.lr = Para.LearnRate;% 网络学习速率赋值Net.trainParam.epochs = Para.Epochs;% 训练代数赋值Net.trainParam.lr = Para.LearnRate;Net.performFcn = Para.PerformFcn;% 误差函数赋值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 调试Out1 =sim(Net,Input);% 仿真刚建立的网络Sse1 =sse(Output-Out1);% 刚建立的网络误差%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [Net TR] = train(Net,Input,Output);% 训练网络并返回%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Out3 =sim(Net,Input);% 对学习训练后的网络仿真。
MATLAB神经网络(2)BP神经网络的非线性系统建模——非线性函数拟合
MATLAB神经⽹络(2)BP神经⽹络的⾮线性系统建模——⾮线性函数拟合2.1 案例背景在⼯程应⽤中经常会遇到⼀些复杂的⾮线性系统,这些系统状态⽅程复杂,难以⽤数学⽅法准确建模。
在这种情况下,可以建⽴BP神经⽹络表达这些⾮线性系统。
该⽅法把未知系统看成是⼀个⿊箱,⾸先⽤系统输⼊输出数据训练BP神经⽹络,使⽹络能够表达该未知函数,然后⽤训练好的BP神经⽹络预测系统输出。
本章拟合的⾮线性函数为y=x12+x22该函数的图形如下图所⽰。
t=-5:0.1:5;[x1,x2] =meshgrid(t);y=x1.^2+x2.^2;surfc(x1,x2,y);shading interpxlabel('x1');ylabel('x2');zlabel('y');title('⾮线性函数');2.2 模型建⽴神经⽹络结构:2-5-1从⾮线性函数中随机得到2000组输⼊输出数据,从中随机选择1900 组作为训练数据,⽤于⽹络训练,100组作为测试数据,⽤于测试⽹络的拟合性能。
2.3 MATLAB实现2.3.1 BP神经⽹络⼯具箱函数newffBP神经⽹络参数设置函数。
net=newff(P, T, S, TF, BTF, BLF, PF, IPF, OPF, DDF)P:输⼊数据矩阵;T:输出数据矩阵;S:隐含层节点数;TF:结点传递函数。
包括硬限幅传递函数hardlim、对称硬限幅传递函数hardlims、线性传递函数purelin、正切型传递函数tansig、对数型传递函数logsig;x=-5:0.1:5;subplot(2,6,[2,3]);y=hardlim(x);plot(x,y,'LineWidth',1.5);title('hardlim');subplot(2,6,[4,5]);y=hardlims(x);plot(x,y,'LineWidth',1.5);title('hardlims');subplot(2,6,[7,8]);y=purelin(x);plot(x,y,'LineWidth',1.5);title('purelin');subplot(2,6,[9,10]);y=tansig(x);plot(x,y,'LineWidth',1.5);title('tansig');subplot(2,6,[11,12]);y=logsig(x);plot(x,y,'LineWidth',1.5);title('logsig');BTF:训练函数。
BP神经网络实验详解(MATLAB实现)
BP神经网络实验详解(MATLAB实现)BP(Back Propagation)神经网络是一种常用的人工神经网络结构,用于解决分类和回归问题。
在本文中,将详细介绍如何使用MATLAB实现BP神经网络的实验。
首先,需要准备一个数据集来训练和测试BP神经网络。
数据集可以是一个CSV文件,每一行代表一个样本,每一列代表一个特征。
一般来说,数据集应该被分成训练集和测试集,用于训练和测试模型的性能。
在MATLAB中,可以使用`csvread`函数来读取CSV文件,并将数据集划分为输入和输出。
假设数据集的前几列是输入特征,最后一列是输出。
可以使用以下代码来实现:```matlabdata = csvread('dataset.csv');input = data(:, 1:end-1);output = data(:, end);```然后,需要创建一个BP神经网络模型。
可以使用MATLAB的`patternnet`函数来创建一个全连接的神经网络模型。
该函数的输入参数为每个隐藏层的神经元数量。
下面的代码创建了一个具有10个隐藏神经元的单隐藏层BP神经网络:```matlabhidden_neurons = 10;net = patternnet(hidden_neurons);```接下来,需要对BP神经网络进行训练。
可以使用`train`函数来训练模型。
该函数的输入参数包括训练集的输入和输出,以及其他可选参数,如最大训练次数和停止条件。
下面的代码展示了如何使用`train`函数来训练模型:```matlabnet = train(net, input_train, output_train);```训练完成后,可以使用训练好的BP神经网络进行预测。
可以使用`net`模型的`sim`函数来进行预测。
下面的代码展示了如何使用`sim`函数预测测试集的输出:```matlaboutput_pred = sim(net, input_test);```最后,可以使用各种性能指标来评估预测的准确性。
BP神经网络用于函数拟合与模式识别的Matlab示例程序 - 副本
BP神经网络用于函数拟合与模式识别的Matlab示例程序clcclearclose all%---------------------------------------------------% 产生训练样本与测试样本,每一列为一个样本P1 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];T1 = [repmat([1;0;0],1,5),repmat([0;1;0],1,5),repmat([0;0;1],1,5)];P2 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];T2 = [repmat([1;0;0],1,5),repmat([0;1;0],1,5),repmat([0;0;1],1,5)];%---------------------------------------------------% 归一化[PN1,minp,maxp] = premnmx(P1);PN2 = tramnmx(P2,minp,maxp);%---------------------------------------------------% 设置网络参数NodeNum = 10; % 隐层节点数TypeNum = 3; % 输出维数TF1 = 'tansig';TF2 = 'purelin'; % 判别函数(缺省值)%TF1 = 'tansig';TF2 = 'logsig';%TF1 = 'logsig';TF2 = 'purelin';%TF1 = 'tansig';TF2 = 'tansig';%TF1 = 'logsig';TF2 = 'logsig';%TF1 = 'purelin';TF2 = 'purelin';net = newff(minmax(PN1),[NodeNum TypeNum],{TF1 TF2});%---------------------------------------------------% 指定训练参数% net.trainFcn = 'traingd'; % 梯度下降算法% net.trainFcn = 'traingdm'; % 动量梯度下降算法%% net.trainFcn = 'traingda'; % 变学习率梯度下降算法% net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法%% (大型网络的首选算法 - 模式识别)% net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最小%% 共轭梯度算法% net.trainFcn = 'traincgf'; % Fletcher-Reeves修正算法% net.trainFcn = 'traincgp'; % Polak-Ribiere修正算法,内存需求比Fletcher-Reeves 修正算法略大% net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大% (大型网络的首选算法 - 函数拟合,模式识别)% net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多%% net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快% net.trainFcn = 'trainoss'; % One Step Secant Algorithm,计算量和内存需求均比BFGS 算法小,比共轭梯度算法略大%% (中小型网络的首选算法 - 函数拟合,模式识别)net.trainFcn = 'trainlm'; % Levenberg-Marquardt算法,内存需求最大,收敛速度最快%% net.trainFcn = 'trainbr'; % 贝叶斯正则化算法%% 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm' %---------------------%net.trainParam.show = 1; % 训练显示间隔net.trainParam.lr = 0.3; % 学习步长 - traingd,traingdmnet.trainParam.mc = 0.95; % 动量项系数 - traingdm,traingdxnet.trainParam.mem_reduc = 10; % 分块计算Hessian矩阵(仅对Levenberg-Marquardt 算法有效)net.trainParam.epochs = 1000; % 最大训练次数net.trainParam.goal = 1e-8; % 最小均方误差net.trainParam.min_grad = 1e-20; % 最小梯度net.trainParam.time = inf; % 最大训练时间%---------------------------------------------------% 训练与测试net = train(net,PN1,T1); % 训练%---------------------------------------------------% 测试Y1 = sim(net,PN1); % 训练样本实际输出Y2 = sim(net,PN2); % 测试样本实际输出Y1 = full(compet(Y1)); % 竞争输出Y2 = full(compet(Y2));%---------------------------------------------------% 结果统计Result = ~sum(abs(T1-Y1)) % 正确分类显示为1Percent1 = sum(Result)/length(Result) % 训练样本正确分类率Result = ~sum(abs(T2-Y2)) % 正确分类显示为1Percent2 = sum(Result)/length(Result) % 测试样本正确分类率******************************************************************% BP 神经网络用于函数拟合% 使用平台 - Matlab6.5% 作者:陆振波,海军工程大学% 欢迎同行来信交流与合作,更多文章与程序下载请访问我的个人主页% 电子邮件:luzhenbo@% 个人主页:clcclearclose all%---------------------------------------------------% 产生训练样本与测试样本P1 = 1:2:200; % 训练样本,每一列为一个样本T1 = sin(P1*0.1); % 训练目标P2 = 2:2:200; % 测试样本,每一列为一个样本T2 = sin(P2*0.1); % 测试目标%---------------------------------------------------% 归一化[PN1,minp,maxp,TN1,mint,maxt] = premnmx(P1,T1);PN2 = tramnmx(P2,minp,maxp);TN2 = tramnmx(T2,mint,maxt);%---------------------------------------------------% 设置网络参数NodeNum = 20; % 隐层节点数TypeNum = 1; % 输出维数TF1 = 'tansig';TF2 = 'purelin'; % 判别函数(缺省值)%TF1 = 'tansig';TF2 = 'logsig';%TF1 = 'logsig';TF2 = 'purelin';%TF1 = 'tansig';TF2 = 'tansig';%TF1 = 'logsig';TF2 = 'logsig';%TF1 = 'purelin';TF2 = 'purelin';net = newff(minmax(PN1),[NodeNum TypeNum],{TF1 TF2});%---------------------------------------------------% 指定训练参数% net.trainFcn = 'traingd'; % 梯度下降算法% net.trainFcn = 'traingdm'; % 动量梯度下降算法%% net.trainFcn = 'traingda'; % 变学习率梯度下降算法% net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法%% (大型网络的首选算法)% net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最小%% 共轭梯度算法% net.trainFcn = 'traincgf'; % Fletcher-Reeves修正算法% net.trainFcn = 'traincgp'; % Polak-Ribiere修正算法,内存需求比Fletcher-Reeves 修正算法略大% net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大% (大型网络的首选算法)%net.trainFcn = 'trainscg'; % Scaled Conjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多%% net.trainFcn = 'trainbfg'; % Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快% net.trainFcn = 'trainoss'; % One Step Secant Algorithm,计算量和内存需求均比BFGS 算法小,比共轭梯度算法略大%% (中型网络的首选算法)net.trainFcn = 'trainlm'; % Levenberg-Marquardt算法,内存需求最大,收敛速度最快%% net.trainFcn = 'trainbr'; % 贝叶斯正则化算法%% 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm' %---------------------%net.trainParam.show = 20; % 训练显示间隔net.trainParam.lr = 0.3; % 学习步长 - traingd,traingdmnet.trainParam.mc = 0.95; % 动量项系数 - traingdm,traingdxnet.trainParam.mem_reduc = 1; % 分块计算Hessian矩阵(仅对Levenberg-Marquardt算法有效)net.trainParam.epochs = 1000; % 最大训练次数net.trainParam.goal = 1e-8; % 最小均方误差net.trainParam.min_grad = 1e-20; % 最小梯度net.trainParam.time = inf; % 最大训练时间%---------------------------------------------------% 训练net = train(net,PN1,TN1); % 训练%---------------------------------------------------% 测试YN1 = sim(net,PN1); % 训练样本实际输出YN2 = sim(net,PN2); % 测试样本实际输出MSE1 = mean((TN1-YN1).^2) % 训练均方误差MSE2 = mean((TN2-YN2).^2) % 测试均方误差%---------------------------------------------------% 反归一化Y2 = postmnmx(YN2,mint,maxt);%---------------------------------------------------% 结果作图plot(1:length(T2),T2,'r+:',1:length(Y2),Y2,'bo:')title('+为真实值,o为预测值')%输入样本点及其相应的类别,其中有一个奇异点P=[-0.5 -0.5 0.3 -0.1 0.2 0.0 0.6 0.8 60;-0.5 0.5 -0.5 1.0 0.5 -0.9 0.8 -0.6 20];T=[1 1 0 1 1 0 1 0 1];%在坐标图上绘出样本点plotpv(P,T);%建立一个感知器网络figure;plotpv(P,T);net=newp([-1 60;1 20],1);handle=plotpc(net.iw{1},net.b{1});%利用样本点训练网络并绘出得到的分类线E=1;while (sse(E)),[net,Y,E]=adapt(net,P,T);handle=plotpc(net.iw{1},net.b{1},handle);end;%局部放大分类线图figure;plotpv(P,T);plotpc(net.iw{1},net.b{1});axis([-2 2 -2 2]);%选择10个点来测试网络testpoints=[-0.5 0.3 -0.9 0.4 -0.1 0.2 -0.6 0.8 0.1 -0.4; -0.3 -0.8 -0.4 -0.7 0.4 -0.6 0.1 -0.5 -0.5 0.3]; a=sim(net,testpoints);%在坐标图上绘出网络的分类结果及分类线figure;plotpv(testpoints,a);plotpc(net.iw{1},net.b{1});%产生指定类别的样本点,并在图中绘出X = [0 1; 0 1]; % 限制类中心的范围clusters = 5; % 指定类别数目points = 10; % 指定每一类的点的数目std_dev = 0.05; % 每一类的标准差P = nngenc(X,clusters,points,std_dev);plot(P(1,:),P(2,:),'+r');title('输入样本向量');xlabel('p(1)');ylabel('p(2)');%建立网络net=newc([0 1;0 1],5,0.1); %设置神经元数目为5 %得到网络权值,并在图上绘出figure;plot(P(1,:),P(2,:),'+r');w=net.iw{1}hold on;plot(w(:,1),w(:,2),'ob');hold off;title('输入样本向量及初始权值');xlabel('p(1)');ylabel('p(2)');figure;plot(P(1,:),P(2,:),'+r');hold on;%训练网络net.trainParam.epochs=7;net=init(net);net=train(net,P);%得到训练后的网络权值,并在图上绘出w=net.iw{1}plot(w(:,1),w(:,2),'ob');hold off;title('输入样本向量及更新后的权值');xlabel('p(1)');ylabel('p(2)');a=0;p = [0.6 ;0.8];a=sim(net,p)%生成一个信号,作为被预测信号Time=0:0.025:5;T=sin(Time*4*pi);Q=length(T);%由信号T生成输入信号PP = zeros(5,Q);P(1,2:Q) = T(1,1:(Q-1));P(2,3:Q) = T(1,1:(Q-2));P(3,4:Q) = T(1,1:(Q-3));P(4,5:Q) = T(1,1:(Q-4));P(5,6:Q) = T(1,1:(Q-5));%绘出信号T的曲线figure;plot(Time,T);title('信号T');xlabel('时间');ylabel('目标信号');%设计网络net=newlind(P,T);%仿真网络a=sim(net,P);%绘出网络预测输出figure;plot(Time,a);title('预测结果');xlabel('时间');ylabel('预测值');%得到误差信号,并绘出其曲线e=T-a;figure;plot(Time,e);title('误差');xlabel('时间');ylabel('误差值');%分别定义两段时间Time1和Time2,对应信号的不同频率时段Time1=0:0.05:4;Time2=4.05:0.024:6;Time=[Time1 Time2];%得到待预测的目标信号T=[cos(Time1*4*pi) cos(Time2*8*pi)];T=con2seq(T);%绘出目标信号的曲线,并指定给输入figure;plot(Time,cat(2,T{:}));xlabel('时间');ylabel('目标');title('待跟踪的目标信号');P=T;%生成线性网络lr=0.1;delays = [1 2 3 4 5];net = newlin(minmax(cat(2,P{:})),1,delays,lr);%对网络进行自适应训练[net,a,e]=adapt(net,P,T);%绘出预测信号、目标信号及误差信号曲线figure;plot(Time,cat(2,a{:}),Time,cat(2,P{:}),'--');xlabel('时间');ylabel('目标、预测值');title('目标信号及预测结果');figure;plot(Time,cat(2,e{:}));xlabel('时间');ylabel('误差');title('误差信号');%定义输入信号并绘出其曲线time=0:0.025:5;X=sin(sin(time).*time*10);plot(time,X);title('输入信号T');xlabel('时间');ylabel('输入信号');figure;%定义系统线性变换函数,绘出系统输出曲线T=X*2+0.8;plot(time,T);title('系统输出T');xlabel('时间');ylabel('系统输出');%定义网络输入Q=size(X,2);P=zeros(3,Q);P(1,1:Q)=X(1,1:Q);P(2,2:Q)=X(1,1:(Q-1));P(3,3:Q)=X(1,1:(Q-2));%建立网络net=newlind(P,T);%测试网络a=sim(net,P);%绘出网络输出a与系统输出Tfigure;plot(time,a,'+',time,T,'--');title('网络输出a与系统输出T'); xlabel('时间');ylabel('系统输出-- 网络输出+');%计算误差,并绘出其曲线e=T-a;figure;plot(time,e);title('输出误差');xlabel('时间');ylabel('误差');%定义输入信号并绘出其曲线time1=0:0.005:4;time2=4.005:0.005:6;time=[time1 time2];X=sin(sin(time*4).*time*8);plot(time,X);title('输入信号X');xlabel('时间');ylabel('输入信号');%定义系统输出,绘出曲线steps1=length(time1);[T1,state]=filter([1 -0.5],1,X(1:steps1));steps2=length(time2);T2=filter([0.9 -0.6],1,X((1:steps2) + steps1),state); T=[T1 T2];figure;plot(time,T);title('系统输出T');xlabel('时间');ylabel('系统输出');%将系统输入和输出转换成序列信号T=con2seq(T);P=con2seq(X);%建立网络lr=0.5;delays=[0 1];net=newlin(minmax(cat(2,P{:})),1,delays,lr);%训练网络[net,a,e]=adapt(net,P,T);%绘出网络输出a与系统输出Tfigure;plot(time,cat(2,a{:}),'+',time,cat(2,T{:}),'--');title('网络输出a与系统输出T');xlabel('时间');ylabel('系统输出-- 网络输出+');%绘出误差曲线figure;plot(time,cat(2,e{:}));title('输出误差');xlabel('时间');ylabel('误差');。
BP神经网络的设计实例(MATLAB编程)
神经网络的设计实例(MATLAB编程)例1 采用动量梯度下降算法训练BP 网络。
训练样本定义如下:输入矢量为p =[-1 -2 3 1-1 1 5 -3]目标矢量为t = [-1 -1 1 1]解:本例的MATLAB 程序如下:close allclearecho onclc% NEWFF——生成一个新的前向神经网络% TRAIN——对BP 神经网络进行训练% SIM——对BP 神经网络进行仿真pause% 敲任意键开始clc% 定义训练样本P=[-1, -2, 3, 1; -1, 1, 5, -3]; % P 为输入矢量T=[-1, -1, 1, 1]; % T 为目标矢量pause;clc% 创建一个新的前向神经网络net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm') % 当前输入层权值和阈值inputWeights=net.IW{1,1}inputbias=net.b{1}% 当前网络层权值和阈值layerWeights=net.LW{2,1}layerbias=net.b{2}pauseclc% 设置训练参数net.trainParam.show = 50;net.trainParam.lr = 0.05;net.trainParam.mc = 0.9;net.trainParam.epochs = 1000;net.trainParam.goal = 1e-3;pauseclc% 调用TRAINGDM 算法训练BP 网络[net,tr]=train(net,P,T);pauseclc% 对BP 网络进行仿真A = sim(net,P)% 计算仿真误差E = T - AMSE=mse(E)pauseclcecho off例2 采用贝叶斯正则化算法提高BP 网络的推广能力。
在本例中,我们采用两种训练方法,即L-M 优化算法(trainlm)和贝叶斯正则化算法(trainbr),用以训练BP 网络,使其能够拟合某一附加有白噪声的正弦样本数据。
GA-BP神经网络应用实例之MATLAB程序
GA-BP神经网络应用实例之MATLAB程序%gap.xls 中储藏训练样本的原始输入数据 37 组%gat.xls 中储藏训练样本的原始输出数据 37 组%p_test.xls 中储藏测试样本的原始输入数据 12 组%t_test.xls 中储藏测试样本的原始输出数据 12 组%其中 gabpEval.m 适应度值计算函数, gadecod.m 解码函数%--------------------------------------------------------------------------nntwarn off;% nntwarn函数可以临时关闭神经网络工具箱的警告功能,今世码使用到神经% 网络工具箱的函数时会产生大量的警告而这个函数可以跳过这些警告但%是,为了保证代码可以在新版本的工具箱下运行,我们不激励这么做pc=xlsread('gap.xls');tc=xlsread('gat.xls');p_test=xlsread('p_test.xls');t_test=xlsread('t_test.xls');p=pc';t=tc';p_test=p_test';t_test=t_test';%归一化办理for i=1:2P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:))); endfor i=1:4T(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:))); endfor i=1:2P_test(i,:)=(p_test(i,:)-min(p_test(i,:)))/(max(p_test(i,:))-min(p_test(i,:)));end%--------------------------------------------------------------------------%创办 BP神经网络,隐含层节点数为 12net=newff(minmax(P),[12,4],{'tansig','purelin'},'trainlm'); %------- -------------------------------------------------------------------%下面使用遗传算法对网络进行优化R=size(P,1);% BP神经网络输入层节点数S2=size(T,1);% BP神经网络输出层节点数S1=12;% 隐含层节点数S=R*S1+S1*S2+S1+S2;%遗传算法编码长度aa=ones(S,1)*[-1,1];popu=100;% 种群规模initPop=initializega(popu,aa,'gabpEval');%初始化种群gen=500;% 遗传代数%下面调用 gaot 工具箱,其中目标函数定义为 gabpEval[x,endPop,bPop,trace]=ga(aa,'gabpEval',[],initPop,[1e-6 1 1],'maxGenTerm',...gen,'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2gen 3]);%--------------------------------------------------------------------------%绘收敛曲线图figure;plot(trace(:,1),1./trace(:,3),'r-'); hold on;plot(trace(:,1),1./trace(:,2),'b-'); xlabel('遗传代数');ylabel(' 平方和误差 ');figure;plot(trace(:,1),trace(:,3),'r-'); hold on;plot(trace(:,1),trace(:,2),'b-'); xlabel('遗传代数');ylabel(' 适应度 ');legend('平均适应度值','最优适应度值'); %----------- ---------------------------------------------------------------%下面将初步获取的权值矩阵赋给还没有开始训练的 BP网络[W1,B1,W2,B2,P,T,A1,A2,SE,val]=gadecod(x); net.IW{1,1}=W1;net.LW{2,1}=W2;net.b{1}=B1;net.b{2}=B2;%设置训练参数net.trainParam.epochs=3000;net.trainParam.goal=1e-6;%训练网络net=train(net,P,T);w1=net.IW{1,1};w2=net.LW{2,1};b1=net.b{1};b2=net.b{2};%测试网络性能temp=sim(net,P_test);yuce1=[temp(1,:);temp(2,:),;temp(3,:);temp(4,:)];for i=1:4yuce(i,:)=yuce1(i,:)*(max(t_test(i,:))-min(t_test(i,:)))+min(t_test(i,:));end%--------------------------------------------------------------------------%测试输出结果之一figure;plot(1:12,yuce(1,:),'bo-');ylabel(' 切口外径 mm');hold on;plot(1:12,t_test(1,:),'r*-'); legend('测试结果','测试样本');figure;plot(1:12,yuce(1,:)-t_test(1,:),'b-');ylabel(' 误差 mm');title('测试结果与测试样本误差');figure;plot(1:12,((yuce(1,:)-t_test(1,:))/t_test(1,:))*100,'b*');ylabel(' 百分比 ');title('测试结果与测试样本误差');%测试输出结果之二figure;plot(1:12,yuce(2,:),'bo-'); ylabel('切口内径mm');hold on;plot(1:12,t_test(2,:),'r*-'); legend('测试结果','测试样本'); figure;plot(1:12,yuce(2,:)-t_test(2,:),'b-');ylabel(' 误差 mm');title('测试结果与测试样本误差');figure;plot(1:12,((yuce(2,:)-t_test(2,:))/t_test(2,:))*100,'b*');ylabel(' 百分比 ');title('测试结果与测试样本误差');%测试输出结果之三figure;plot(1:12,yuce(3,:),'bo-'); ylabel('最大滚切力N');hold on;plot(1:12,t_test(3,:),'r*-'); legend('测试结果','测试样本'); figure;plot(1:12,yuce(3,:)-t_test(3,:),'b-');ylabel(' 误差 N');title('测试结果与测试样本误差');figure;plot(1:12,((yuce(3,:)-t_test(3,:))/t_test(3,:))*100,'b*');ylabel(' 百分比 ');title('测试结果与测试样本误差');%测试输出结果之四figure;plot(1:12,yuce(4,:),'bo-'); ylabel('切断时间s');hold on;plot(1:12,t_test(4,:),'r*-');legend('测试结果','测试样本');figure;plot(1:12,yuce(4,:)-t_test(4,:),'b-');ylabel(' 误差 s');title('测试结果与测试样本误差');figure;plot(1:12,((yuce(4,:)-t_test(4,:))/t_test(4,:))*100,'b*'); ylabel(' 百分比 ');title('测试结果与测试样本误差');%--------------------------------------------------------------------------。
Matlab训练好的BP神经网络如何保存和读取方法(附实例说明)
Matlab训练好的BP神经网络如何保存和读取方法(附实例说明)看到论坛里很多朋友都在提问如何存储和调用已经训练好的神经网络。
本人前几天也遇到了这样的问题,在论坛中看了大家的回复,虽然都提到了关键的两个函数“save”和“load”,但或多或少都简洁了些,让人摸不着头脑(呵呵,当然也可能是本人太菜)。
通过不断调试,大致弄明白这两个函数对神经网络的存储。
下面附上实例给大家做个说明,希望对跟我有一样问题的朋友有所帮助。
如果只是需要在工作目录下保到当前训练好的网络,可以在命令窗口输入:save net %net为已训练好的网络然后在命令窗口输入:load net %net为已保存的网络加载net。
但一般我们都会在加载完后对网络进行进一步的操作,建议都放在M文件中进行保存网络和调用网络的操作如下所示:%% 以函数的形式训练神经网络functionshenjingwangluo()P=[-1,-2,3,1;-1,1,5,-3];%P为输入矢量T=[-1,-1,1,1,];%T为目标矢量net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')%创建一个新的前向神经网络inputWeights=net.IW{1,1}inputbias=net.b{1}%当前输入层权值和阀值layerWeights=net.LW{2,1}layerbias=net.b{2}net.trainParam.show=50;net.trainParam.lr=0.05;net.trainParam.mc=0.9;net.trainParam.epochs=1000;net.trainParam.goal=0.0002;%调用算法训练BP网络[net,tr]=train(net,P,T);%保存训练好的网络在当前工作目录下的aaa 文件中,net为网络名save('aaa', 'net');%也可以采用格式“save aaa net;”%若要保存到指定目录用“'save('d:\aaa.mat', 'net');”这样就保存到指定的目录下了%%调用网络,以函数的形式function jiazaiwangluo()%网络加载,注意文件名要加单引号load('-mat','aaa');%从指定目录加载“load('-mat','d:\aaa.mat'); ”P=[3;4]A=sim(net,P)%对网络进行仿真上面两个函数都已经调试成功,有需要的朋友可以试试看,希望对大家有帮助。
BP神经网络数据分类matlab程序代码
BP神经网络数据分类——语音信号特征分类MatLab程序代码%% 清空环境变量clcclear%% 训练数据预测数据提取及归一化%下载四类语音信号load data1c1load data2c2load data3c3load data4c4%四个特征信号矩阵合成一个矩阵data(1:500,:)=c1(1:500,:);data(501:1000,:)=c2(1:500,:);data(1001:1500,:)=c3(1:500,:);data(1501:2000,:)=c4(1:500,:);%从1到2000间随机排序k=rand(1,2000);[m,n]=sort(k);%输入输出数据input=data(:,2:25);output1 =data(:,1); %把输出从1维变成4维for i=1:2000switch output1(i)case 1output(i,:)=[1 0 0 0];case 2output(i,:)=[0 1 0 0];case 3output(i,:)=[0 0 1 0];case 4output(i,:)=[0 0 0 1];endend%随机提取1500个样本为训练样本,500个样本为预测样本input_train=input(n(1:1500),:)'; output_train=output(n(1:1500),:)'; input_test=input(n(1501:2000),:)'; output_test=output(n(1501:2000),:)';%输入数据归一化[inputn,inputps]=mapminmax(input_trai n);%% 网络结构初始化innum=24;midnum=25;outnum=4;%权值初始化w1=rands(midnum,innum);b1=rands(midnum,1);w2=rands(midnum,outnum);b2=rands(outnum,1);w2_1=w2;w2_2=w2_1;w1_1=w1;w1_2=w1_1;b1_1=b1;b1_2=b1_1;b2_1=b2;b2_2=b2_1;%学习率xite=0.1alfa=0.01;%% 网络训练for ii=1:10E(ii)=0;for i=1:1:1500%% 网络预测输出x=inputn(:,i);% 隐含层输出for j=1:1:midnumI(j)=inputn(:,i)'*w1(j,:)'+b1(j);Iout(j)=1/(1+exp(-I(j)));end% 输出层输出yn=w2'*Iout'+b2;%% 权值阀值修正%计算误差e=output_train(:,i)-yn;E(ii)=E(ii)+sum(abs(e));%计算权值变化率dw2=e*Iout;db2=e';for j=1:1:midnumS=1/(1+exp(-I(j)));FI(j)=S*(1-S);endfor k=1:1:innumfor j=1:1:midnumdw1(k,j)=FI(j)*x(k)*(e(1)*w2(j,1)+e(2) *w2(j,2)+e(3)*w2(j,3)+e(4)*w2(j,4));db1(j)=FI(j)*(e(1)*w2(j,1)+e(2)*w2(j,2) +e(3)*w2(j,3)+e(4)*w2(j,4));endendw1=w1_1+xite*dw1';b1=b1_1+xite*db1';w2=w2_1+xite*dw2';b2=b2_1+xite*db2';w1_2=w1_1;w1_1=w1;w2_2=w2_1;w2_1=w2;b1_2=b1_1;b1_1=b1;b2_2=b2_1;b2_1=b2;endend%% 语音特征信号分类inputn_test=mapminmax('apply',input_te st,inputps);for ii=1:1for i=1:500%1500%隐含层输出for j=1:1:midnumI(j)=inputn_test(:,i)'*w1(j,:)'+b1(j);Iout(j)=1/(1+exp(-I(j)));endfore(:,i)=w2'*Iout'+b2;endend%% 结果分析%根据网络输出找出数据属于哪类for i=1:500output_fore(i)=find(fore(:,i)==max(fore( :,i)));end%BP网络预测误差error=output_fore-output1(n(1501:2000) )'; %画出预测语音种类和实际语音种类的分类图figure(1)plot(output_fore,'r')hold onplot(output1(n(1501:2000))','b') legend('预测语音类别','实际语音类别')%画出误差图figure(2)plot(error)title('BP网络分类误差','fontsize',12) xlabel('语音信号','fontsize',12)ylabel('分类误差','fontsize',12)%print -dtiff -r600 1-4k=zeros(1,4);%找出判断错误的分类属于哪一类for i=1:500if error(i)~=0[b,c]=max(output_test(:,i));switch ccase 1k(1)=k(1)+1;case 2k(2)=k(2)+1;case 3k(3)=k(3)+1;case 4k(4)=k(4)+1;endendend%找出每类的个体和kk=zeros(1,4);for i=1:500[b,c]=max(output_test(:,i));switch ccase 1kk(1)=kk(1)+1;case 2kk(2)=kk(2)+1;case 3kk(3)=kk(3)+1;case 4kk(4)=kk(4)+1;endend%正确率rightridio=(kk-k)./kk。
BP神经网络逼近(matlab程序)
BP神经网络逼近y=1/x,MATLAB程序%BP神经网络逼近y=1/x;%----------------定义必要的变量方便调试--------------------clear;clc;q=8; %神经元个数max_epoch=100000; %最大训练次数err_goal=0.01; %期望误差最小值alpha =0.01; %学习率X = 1:0.5:10; %样本D=1./X; %期望值[m,n] = size(X); %m为输入个数,n为样本数量l=1; %单输出wjk = rand(l,q); %隐层到输出层的初始权值vij = rand(q,m); %输入层到隐层的初始权值for epoch=1:max_epoch%-------------------------前向传播求输入--------------------NETj=vij*X; %隐层净输入Yj=1./(1+exp(-NETj)); %计算隐层输出NETk=wjk*Yj; %输出层净输入Ok=1./(1+exp(-NETk));%计算输出层输出e=((D-Ok)*(D-Ok)')/2; %计算误差函数E(epoch)=e;if(e<err_goal)char='达到输出误差要求学习结束'break;end%-------------------反向传播调权值-------------------------------%调整输出层权值deltak=Ok.*(1-Ok).*(D-Ok);wjk=wjk+alpha*deltak*Yj';%调整隐含层权值deltai=Yj.*(1-Yj).*(deltak'*wjk)';vij=vij+alpha*deltai*X';end%-----------------取样本测试---------------------------------Xx = 1:3:66;D1 = 1./Xx; %期望输出[m1,n1] = size(Xx);NETj1=vij*Xx; %隐层净输入Yj1=1./(1+exp(-NETj1)); %计算隐层输出NETk1=wjk*Yj1; %输出层净输入Ok1=1./(1+exp(-NETk1));%计算输出层输出%-----------------------显示与绘图---------------------------------epoch %显示样本集计算次数Ok %显示训练集输出层输出Ok1 %显示测试集输出层输出subplot(2,2,1);plot(X,D,'b-o'); %样本与期望值title('训练集网络样本')subplot(2,2,2);plot(X,Ok,'b-o',X,D,'r-x');%训练集网络输出与期望值title('训练集网络输出与期望值')subplot(2,2,3);plot(1:1:epoch,E,'k*'); %显示误差title('训练集输出误差')subplot(2,2,4);plot(Xx,Ok1,'b-o',Xx,D1,'r-x'); %绘制样本及网络输出title('测试集网络输出与期望值')运行结果当隐层神经元个数q=8时char =达到输出误差要求学习结束epoch =86197Ok =Columns 1 through 100.8717 0.7039 0.5349 0.4121 0.3313 0.2775 0.2398 0.2120 0.1908 0.1741Columns 11 through 190.1608 0.1499 0.1410 0.1337 0.1276 0.1225 0.1183 0.1147 0.1117Ok1 =Columns 1 through 100.8717 0.2398 0.1410 0.1117 0.1013 0.0972 0.0956 0.0950 0.0947 0.0946Columns 11 through 200.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945Columns 21 through 220.0945 0.0945当隐层神经元个数q=2时epoch =100000Ok =Columns 1 through 100.3222 0.3112 0.3007 0.2910 0.2821 0.2741 0.2668 0.2603 0.2546 0.2495Columns 11 through 190.2451 0.2413 0.2379 0.2351 0.2326 0.2305 0.2287 0.2271 0.2258Ok1 =Columns 1 through 100.3222 0.2668 0.2379 0.2258 0.2211 0.2194 0.2187 0.2185 0.2184 0.2184Columns 11 through 200.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184Columns 21 through 220.2184 0.2184结果分析由运行结果和图形可以看出隐层神经元个数q=8时,网络训练86197次就能使误差达到0.01q=2时,网络训练次数达到最大值100000次还没有达到误差允许的范围。
BP神经网络在MATLAB上的实现与应用
收稿日期:2004-02-12作者简介:桂现才(1964)),海南临高人,湛江师范学院数学与计算科学学院讲师,从事数据分析与统计,数据挖掘研究.2004年6月第25卷第3期湛江师范学院学报JO URN AL OF Z HA NJI ANG NOR M AL CO LL EG E Jun 1,2004Vol 125 N o 13BP 神经网络在M ATLAB 上的实现与应用桂现才(湛江师范学院数学与计算科学学院,广东湛江524048)摘 要:BP 神经网络在非线性建模,函数逼近和模式识别中有广泛地应用,该文介绍了B P 神经网络的基本原理,利用MA TL AB 神经网络工具箱可以很方便地进行B P 神经网络的建立、训练和仿真,给出了建立BP 神经网络的注意事项和例子.关键词:人工神经网络;BP 网络;NN box MA TL AB中图分类号:TP311.52 文献标识码:A 文章编号:1006-4702(2004)03-0079-051 BP 神经网络简介人工神经网络(Artificial Neural Netw orks,简称为N N)是近年来发展起来的模拟人脑生物过程的人工智能技术.它由大量简单的神经元广泛互连形成的复杂的非线性系统,它不需要任何先验公式,就能从已有数据中自动地归纳规则,获得这些数据的内在规律,具有很强的非线性映射能力,特别适合于因果关系复杂的非确性推理、判断、识别和分类等问题.基于误差反向传播(Back propagation)算法的多层前馈网络(Multiple -layer feedf or ward net 2work,简记为BP 网络),是目前应用最多也是最成功的网络之一,构造一个BP 网络需要确定其处理单元)))神经元的特性和网络的拓扑结构.1.1神经元模型神经元是神经网络最基本的组成部分,一般地,一个有R 个输入的神经元模型如图1所示.其中P 为输入向量,w 为权向量,b 为阈值,f 为传递函数,a 为神经元输出.所有输入P 通过一个权重w 进行加权求和后加上阈值b 再经传递函数f 的作用后即为该神经元的输出a.传递函数可以是任何可微的函数,常用的有Sigmoid 型和线性型.1.2 神经网络的拓扑结构神经网络的拓扑结构是指神经元之间的互连结构.图2是一个三层的B P 网络结构.B P 网络由输入层、输出层以及一个或多个隐层节点互连而成的一种多层网,这种结构使多层前馈网络可在输入和输出间建立合适的线性或非线性关系,又不致使网络输出限制在-1和1之间.2 M A TLAB 中B P 神经网络的实现BP 网络的训练所采用的算法是反向传播法,可以以任意精度逼近任意的连续函数,近年来,为了解决BP 网络收敛速度慢,训练时间长等不足,提出了许多改进算法[1][2].在应用BP 网络解决实际问题的过程中,选择多少层网络、每层多少个神经元节点、选择何种传递函数、何种训练算法等,均无可行的理论指导,只能通过大量的实验计算获得.这无形增加了研究工作量和编程计算工作量.M AT L AB 软件提供了一个现成的神经网络工具箱(Neural Netw ork T oolbox,简称N Nbox),为解决这个矛盾提供了便利条件.下面针对BP 网络的建立、传递函数的选择、网络的训练等,在介绍NN box 相关函数的基础上,给出利用这些函数编程的方法.2.1 神经网络的建立M AT LAB 的N Nbox 提供了建立神经网络的专用函数ne wff().用ne wf f 函数来确定网络层数、每层中的神经元数和传递函数,其语法为:net =ne wf f(PR,[S1,S2,,,S N],{TF1,TF2,,,T FN},B TF,BL F,PF)其中PR 是一个由每个输入向量的最大最小值构成的Rx2矩阵.Si 是第i 层网络的神经元个数.TFi 是第i 层网络的传递函数,缺省为tansig,可选用的传递函数有tansig,logsig 或purelin.BT F )字符串变量,为网络的训练函数名,可在如下函数中选择:traingd 、traingdm 、traingdx 、trainbfg 、trainlm 等,缺省为trainlm.BL F )字符串变量,为网络的学习函数名,缺省为learngdm.BF )字符串变量,为网络的性能函数,缺省为均方差c mse cnew ff 在确定网络结构后会自动调用init 函数用缺省参数来初始化网络中各个权重和阈值,产生一个可训练的前馈网络,即该函数的返回值为net.由于非线性传递函数对输出具有压缩作用,故输出层通常采用线性传递函数,以保持输出范围.2.2 神经网络训练初始化后的网络即可用于训练,即将网络的输入和输出反复作用于网络,不断调整其权重和阈值,以使网络性能函数net.performFcn 达到最小,从而实现输入输出间的非线性映射.对于new ff 函数产生的网络,其缺省的性能函数是网络输出和实际输出间的均方差M SE.在N Nbox 中,给出了十多种网络学习、训练函数,其采用的算法可分为基本的梯度下降算法和快速算法,各种算法的推导参见文献[1][2].在M A T LAB 中训练网络有两类模式:逐变模式(incremental mode)和批变模式(batch mode).在逐变模式中,每一个输入被作用于网络后,权重和阈值被更新一次.在批变模式中,所有的输入被应用于网络后,权重和阈值才被更新一次.使用批变模式不需要为每一层的权重和阈值设定训80湛江师范学院学报(自然科学) 第25卷练函数,而只需为整个网络指定一个训练函数,使用起来相对方便,而且许多改进的快速训练算法只能采用批变模式,在这里我们只讨论批变模式,以批变模式来训练网络的函数是train ,其语法主要格式为:[net,tr]=train(N ET,p,t),其中p 和t 分别为输入输出矩阵,NET 为由ne wff 产生的要训练的网络,net 为修正后的网络,tr 为训练的记录(训练步数epoch 和性能perf).train 根据在new ff 函数中确定的训练函数来训练,不同的训练函数对应不同的训练算法.Traingd 基本梯度下降算法.收敛速度慢,可用于增量模式训练.Traingdm 带有趋势动量的梯度下降算法.收敛速度快于Traingd,可用于增量模式训练.Traingdx 自适应学习速度算法.收敛速度快于Traingd,仅用于批量模式训练.Trainnp 强适应性BP 算法.用于批量模式训练,收敛速度快,数据占用存储空间小.Traincgf Fletcher-reeves 变梯度算法.是一种数据占用存储空间最小的变梯度算法.Traincgp Polak -Ribiere 变梯度算法.存储空间略大于Traincgp,但对有些问题具有较快的收敛速度.Traincgb Powell-beale 变梯度算法.存储空间略大于Traincgp,具有较快的收敛速度.Trainsc g 固定变比的变梯度算法.是一种无需线性搜索的变梯度算法.Trainbf g BFGS 拟牛顿算法.数据存储量近似于Hessian 矩阵,每个训练周期计算虽大,但收敛速度较快.Trainoss 变梯度法与拟牛顿法的折中算法.Trainlm Levenberg -Marquardt 算法.对中度规模的网络具有较快的收敛速度.Trainbr 改进型L )M 算法.可大大降低确定优化网络结构的难度.训练时直接调用上述的函数名,调用前为下列变量赋初始值:net.trainParam.show )))每多少轮显示一次;net.trainPara m.L r )))学习速度;net.trainParam.epochs )))最大训练轮回数;net.trainPara m.goal )))目标函数误差.2.3 仿真函数及实例利用仿真函数可对训练好的网络进行求值运算及应用.函数调用形式为:a=sim(net,p);其中net 为训练好的网络对象,p 为输入向量或矩阵,a 为网络输出.如果P 为向量,则为单点仿真;P 为矩阵,则为多点仿真.作为应用示例利用上述的函数,可解决下述非线性单输入单输出系统的模型化问题.已知系统输入为:x(k)=sin(k*P /50)系统输出为:y(k)=0.7sin(P x)+0.3sin(3P x)假定采样点k I [0,50].采用含有一个隐层的三层BP 网络建模,为了便于比较建立了两个模型.模型一的神经元为{1,7,1},模型二为{3,7,1},输入层和隐层传递函数均为TA NSIG 函数,输出层为线性函数.网络训练分别采用基本梯度下降法和变学习速度的梯度下降法.可编制如下的应用程序:k=0:50;x(k)=sin(k*pi/50);y(k)=0.7*sin(pi*x)+0.3*sin(3*pi*x);net=new ff([0,1],[1,7,1],{-tansig .,.tansig .,.purelin .},.traingd .);%建立模型一,并采用基本梯度下降法训练.net.trainParam.show=100;%100轮回显示一次结果81第3期 桂现才:BP 神经网络在M A TL AB 上的实现与应用82湛江师范学院学报(自然科学)第25卷net.trainParam.L r=0.05;%学习速度为0.05net.trainParam.epochs=50000;%最大训练轮回为50000次net.trainParam.goal=1e-4;%均方误差为0.0001net=train(net,x,y);%开始训练,其中x,y分别为输入输出样本y1=sim(net,x);%用训练好的模型进行仿真plot(x,y,x,y1);%绘制结果曲线若采用模型二,仅需将程序第4句ne wf f函数中的第二个参数改为[3,7,1].若采用变学习速度算法,仅需将该函数第4个参数改为.traingda.,加入:net.trainparam.lr-inc=1.05%;训练速度增加系数.一句即可.模型一用基本梯度下降法,训练次数要5万次以上,用变学习速度的梯度下降法,训练次数为4214次.模型二用基本梯度下降法,训练次数要5万次以上,用变学习速度的梯度下降法,训练次数6511次.(M A TL AB6.0)以上结果反映出BP网络经有效训练后可很好地逼近非线性函数.但其训练次数过多,训练时间长.3建立BP神经网络的注意事项利用M A TL AB软件提供的工具箱编制采用BP网络解决非线性问题程序是一种便捷、有效、省事的途径,但在使用时要解决好以下几个关键环节.3.1神经元结点数网络的输入与输出结点数是由实际问题的本质决定的,与网络性能无关.网络训练前的一个关键步骤是确定隐层结点数L,隐层结点数的选择与其说具有科学性,不如说更具有技巧性,往往与输入数据中隐含的特征因素有关.L的选择至今仍得不到一个统一的规范.L的初始值可先由以下两个公式中的其中之一来确定[3][4].l=m+n(1)或l=0143mn+0112n2+2154m+0177n+0135+0151(2)其中m、n分别为输入结点数目与输出结点数目.隐层结点数可根据公式(1)或(2)得出一个初始值,然后利用逐步增长或逐步修剪法.所谓逐步增长是先从一个较简单的网络开始,若不符合要求则逐步增加隐层单元数到合适为止;逐步修剪则从一个较复杂的网络开始逐步删除隐层单元,具体实现已有不少文献讨论.3.2传递函数的选择工具箱提供了三种传递函数:L og-sigmoid、tan-sigmoid和线性函数.前两种为非线性函数,分别将x I(-],+])的输入压缩为y I[0,1]和y I[-1,+1]的输出.因此,对非线性问题,输入层和隐层多采用非线性传递函数,输出层采用线性函数,以保持输出的范围,就非线性传递函数而言,若样本输出均大于零时,多采用L og-sigmoid函数,否则,采用Tan-sigmoid函数.对线性系统而言,各层多采用线性函数.3.3数据预处理和后期处理如果对神经网络的输入和输出数据进行一定的预处理,可以加快网络的训练速度,M A TL AB 中提供的预处理方法有(1)归一化处理:将每组数据都变为-1至1之间数,所涉及的函数有pre mnmx、postmnmx、tramnmx;(2)标准化处理:将每组数据都化为均值为0,方差为1的一组数据,所涉及的函数有prestd、poststd、trastd;(3)主成分分析:进行正交处理,可减少输入数据的维数,所涉及的函数有prepca、trapca.(4)回归分析与相关性分析:所用函数为postrg,可得到回归系数与相关系数,也可用[5]介绍的方法进行置信区间分析.下面以归一化处理为例说明其用法,另外两种预处理方法的用法与此类似.对于输入矩阵p 和输出矩阵t 进行归一化处理的语句为:[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);训练时应该用归一化之后的数据,即:net =train(net,pn,tn);训练结束后还应对网络的输出an =sim(net ,pn)作如下处理:a =postmnmx(an,mint,maxt);当用训练好的网络对新数据pne w 进行预测时,也应作相应的处理:pnew n =tramnmx(pne w,minp,maxp);ane wn =sim(net,pne wn);ane w =postmnmx(anew,mint,ma xt);3.4 学习速度的选定学习速度参数net.trainparam.lr 不能选择的太大,否则会出现算法不收敛.也不能太小,会使训练过程时间太长.一般选择为0.01~0.1之间的值,再根据训练过程中梯度变化和均方误差变化值来确定.3.5 对过拟合的处理网络训练有时会产生/过拟合0,所谓/过拟合0就是训练集的误差被训练的非常小,而当把训练好的网络用于新的数据时却产生很大的误差的现象,也就是说此时网络适应新情况的泛化能力很差.提高网络泛化能力的方法是选择合适大小的网络结构,选择合适的网络结构是困难的,因为对于某一问题,事先很难判断多大的网络是合适的.为了提高泛化能力,可用修改性能函数和提前结束训练两类方法来实现,详见[6].参考文献:[1] 张乃尧、阎平凡.神经网络与模糊控制[M].北京:清华大学出版社,1998.[2] 刘增良、刘有才.模糊逻辑与神经网络)))理论研究与探索[M].北京:北京航空航天大学出版社,1996.[3] 徐庐生.微机神经网络[M].北京:中国医药科技出版社,1995.[4] 高大启.有教师的线性基本函数前向三层神经网络结构研究[J].计算机学报,1998,21(1):80-85[5] 陈小前,罗世彬,王振国,等1B P 神经网络应用中的前后处理过程研究[J].系统工程理论与实践,2002,22(1):65-70.[6] 闵惜琳、刘国华.用MA TLAB 神经网络工具箱开发B P 网络应用[J].计算机应用,2001,21(8):163-164.[7] 飞思科技产品研发中心.MA TLAB 6.5辅助神经网络分析与设计[M].北京:电子工业出版社,2003.Realization of BP Networks and Their Applications on MATLABG UI Xian-cai(Mathe matics and C omputational Science School,Zhanji ang Normal C ollege,Zhanjiang,Guangdong 524048,Chi na)Abstract:B P Neural Netw orks are widely applied in nonlinear modeling,f unction approach,and pat 2tern rec ognition.This paper introduces the fundmental of BP Neural Networks.Nnbox can be easily used to create,train and simulate a netw ork,w hile some e xamples and explanations are given.Key words:Artificial Neural Netw orks;B P Networks;Nnbox;M A TL AB 83第3期 桂现才:BP 神经网络在M A TL AB 上的实现与应用。
第 4 章 神经计算基本方法(BP神经网络MATLAB仿真程序设计)例子
BP网络应用实例
x=imread(m,’bmp’); bw=im2bw(x,0.5); 为二值图像 [i,j]=find(bw==0); )的行号和列号 imin=min(i); )的最小行号 imax=max(i); )的最大行号 %读人训练样本图像丈件 %将读人的训练样本图像转换 %寻找二值图像中像素值为0(黑
4
BP网络学习算法
图5.5具有多个极小点的误差曲面
5
BP网络学习算法
另外一种情况是学习过程发生振荡,如图5.6所示 。 误差曲线在m点和n点的梯度大小相同,但方向相反 ,如果第k次学习使误差落在m点,而第k十1次学习 又恰好使误差落在n点。 那么按式(5.2)进行的权值和阈值调整,将在m 点和n点重复进行,从而形成振荡。
图 5.16
待分类模式
20
BP网络应用实例
解(1)问题分析 据图5.16所示两类模式可以看出,分类为简单的非 线性分类。有1个输入向量,包含2个输入元素;两 类模式,1个输出元素即可表示;可以以图5.17所 示两层BP网络来实现分类。
图 5.17
两层BP网络
21
BP网络应用实例
(2)构造训练样本集
6
BP网络学习算法
图5.6学习过程出现振荡的情况
7
BP网络的基本设计方法
BP网络的设计主要包括输人层、隐层、输出层及各 层之间的传输函数几个方面。 1.网络层数 大多数通用的神经网络都预先确定了网络的层数,而 BP网络可以包含不同的隐层。
8
BP网络的基本设计方法
但理论上已经证明,在不限制隐层节点数的情况下 ,两层(只有一个隐层)的BP网络可以实现任意非 线性映射。 在模式样本相对较少的情况下,较少的隐层节点, 可以实现模式样本空间的超平面划分,此时,选择 两层BP网络就可以了;当模式样本数很多时,减小 网络规模,增加一个隐层是必要的,但BP网络隐层 数一般不超过两层。
matlab神经网络实例(超级简单)
介绍神经网络算法在机械结构优化中的应用的例子(大家要学习的时候只需要把输入输出变量更改为你自己的数据既可以了,如果看完了还有问题的话可以加我微博“极南师兄”给我留言,与大家共同进步)。
把一个结构的8个尺寸参数设计为变量,如上图所示,对应的质量,温差,面积作为输出。
用神经网络拟合变量与输出的数学模型,首相必须要有数据来源,这里我用复合中心设计法则构造设计点,根据规则,八个变量将构造出81个设计点。
然后在ansys workbench中进行81次仿真(先在proe建模并设置变量,将模型导入wokbench中进行相应的设置,那么就会自动的完成81次仿真,将结果导出来exceel文件)Matlab程序如下P=[20 2.5 6 14.9 16.5 6 14.9 16.515 2.5 6 14.9 16.5 6 14.9 16.525 2.5 6 14.9 16.5 6 14.9 16.520 1 6 14.9 16.5 6 14.9 16.520 4 6 14.9 16.5 6 14.9 16.520 2.5 2 14.9 16.5 6 14.9 16.520 2.5 10 14.9 16.5 6 14.9 16.520 2.5 6 10 16.5 6 14.9 16.520 2.5 6 19.8 16.5 6 14.9 16.520 2.5 6 14.9 10 6 14.9 16.520 2.5 6 14.9 23 6 14.9 16.520 2.5 6 14.9 16.5 2 14.9 16.520 2.5 6 14.9 16.5 10 14.9 16.520 2.5 6 14.9 16.5 6 10 16.520 2.5 6 14.9 16.5 6 19.8 16.520 2.5 6 14.9 16.5 6 14.9 1020 2.5 6 14.9 16.5 6 14.9 2317.51238947 1.75371684 4.009911573 12.46214168 13.26610631 4.00991157312.46214168 19.7338936922.48761053 1.75371684 4.009911573 12.46214168 13.26610631 4.00991157312.46214168 13.2661063117.51238947 3.24628316 4.009911573 12.46214168 13.26610631 4.00991157322.48761053 3.24628316 4.009911573 12.46214168 13.26610631 4.00991157317.33785832 13.2661063117.51238947 1.75371684 7.990088427 12.46214168 13.26610631 4.00991157317.33785832 19.7338936922.48761053 1.75371684 7.990088427 12.46214168 13.26610631 4.00991157317.33785832 13.2661063117.51238947 3.24628316 7.990088427 12.46214168 13.26610631 4.00991157312.46214168 19.7338936922.48761053 3.24628316 7.990088427 12.46214168 13.26610631 4.00991157312.46214168 13.2661063117.51238947 1.75371684 4.009911573 17.33785832 13.26610631 4.00991157317.33785832 13.2661063122.48761053 1.75371684 4.009911573 17.33785832 13.26610631 4.00991157317.33785832 19.7338936917.51238947 3.24628316 4.009911573 17.33785832 13.26610631 4.00991157312.46214168 13.2661063122.48761053 3.24628316 4.009911573 17.33785832 13.26610631 4.00991157312.46214168 19.7338936917.51238947 1.75371684 7.990088427 17.33785832 13.26610631 4.00991157312.46214168 13.2661063122.48761053 1.75371684 7.990088427 17.33785832 13.26610631 4.00991157312.46214168 19.7338936917.51238947 3.24628316 7.990088427 17.33785832 13.26610631 4.00991157317.33785832 13.2661063122.48761053 3.24628316 7.990088427 17.33785832 13.26610631 4.00991157317.33785832 19.7338936917.51238947 1.75371684 4.009911573 12.46214168 19.73389369 4.00991157317.33785832 13.2661063122.48761053 1.75371684 4.009911573 12.46214168 19.73389369 4.00991157317.33785832 19.7338936917.51238947 3.24628316 4.009911573 12.46214168 19.73389369 4.00991157312.46214168 13.2661063122.48761053 3.24628316 4.009911573 12.46214168 19.73389369 4.00991157312.46214168 19.7338936917.51238947 1.75371684 7.990088427 12.46214168 19.73389369 4.00991157312.46214168 13.2661063122.48761053 1.75371684 7.990088427 12.46214168 19.73389369 4.00991157312.46214168 19.7338936917.51238947 3.24628316 7.990088427 12.46214168 19.73389369 4.00991157317.33785832 13.2661063122.48761053 3.24628316 7.990088427 12.46214168 19.73389369 4.00991157317.33785832 19.7338936917.51238947 1.75371684 4.009911573 17.33785832 19.73389369 4.00991157322.48761053 1.75371684 4.009911573 17.33785832 19.73389369 4.00991157312.46214168 13.2661063117.51238947 3.24628316 4.009911573 17.33785832 19.73389369 4.00991157317.33785832 19.7338936922.48761053 3.24628316 4.009911573 17.33785832 19.73389369 4.00991157317.33785832 13.2661063117.51238947 1.75371684 7.990088427 17.33785832 19.73389369 4.00991157317.33785832 19.7338936922.48761053 1.75371684 7.990088427 17.33785832 19.73389369 4.00991157317.33785832 13.2661063117.51238947 3.24628316 7.990088427 17.33785832 19.73389369 4.00991157312.46214168 19.7338936922.48761053 3.24628316 7.990088427 17.33785832 19.73389369 4.00991157312.46214168 13.2661063117.51238947 1.75371684 4.009911573 12.46214168 13.26610631 7.99008842717.33785832 13.2661063122.48761053 1.75371684 4.009911573 12.46214168 13.26610631 7.99008842717.33785832 19.7338936917.51238947 3.24628316 4.009911573 12.46214168 13.26610631 7.99008842712.46214168 13.2661063122.48761053 3.24628316 4.009911573 12.46214168 13.26610631 7.99008842712.46214168 19.7338936917.51238947 1.75371684 7.990088427 12.46214168 13.26610631 7.99008842712.46214168 13.2661063122.48761053 1.75371684 7.990088427 12.46214168 13.26610631 7.99008842712.46214168 19.7338936917.51238947 3.24628316 7.990088427 12.46214168 13.26610631 7.99008842717.33785832 13.2661063122.48761053 3.24628316 7.990088427 12.46214168 13.26610631 7.99008842717.33785832 19.7338936917.51238947 1.75371684 4.009911573 17.33785832 13.26610631 7.99008842712.46214168 19.7338936922.48761053 1.75371684 4.009911573 17.33785832 13.26610631 7.99008842712.46214168 13.2661063117.51238947 3.24628316 4.009911573 17.33785832 13.26610631 7.99008842717.33785832 19.7338936922.48761053 3.24628316 4.009911573 17.33785832 13.26610631 7.99008842717.33785832 13.2661063117.51238947 1.75371684 7.990088427 17.33785832 13.26610631 7.99008842717.33785832 19.7338936922.48761053 1.75371684 7.990088427 17.33785832 13.26610631 7.99008842717.33785832 13.2661063117.51238947 3.24628316 7.990088427 17.33785832 13.26610631 7.99008842722.48761053 3.24628316 7.990088427 17.33785832 13.26610631 7.99008842712.46214168 13.2661063117.51238947 1.75371684 4.009911573 12.46214168 19.73389369 7.99008842712.46214168 19.7338936922.48761053 1.75371684 4.009911573 12.46214168 19.73389369 7.99008842712.46214168 13.2661063117.51238947 3.24628316 4.009911573 12.46214168 19.73389369 7.99008842717.33785832 19.7338936922.48761053 3.24628316 4.009911573 12.46214168 19.73389369 7.99008842717.33785832 13.2661063117.51238947 1.75371684 7.990088427 12.46214168 19.73389369 7.99008842717.33785832 19.7338936922.48761053 1.75371684 7.990088427 12.46214168 19.73389369 7.99008842717.33785832 13.2661063117.51238947 3.24628316 7.990088427 12.46214168 19.73389369 7.99008842712.46214168 19.7338936922.48761053 3.24628316 7.990088427 12.46214168 19.73389369 7.99008842712.46214168 13.2661063117.51238947 1.75371684 4.009911573 17.33785832 19.73389369 7.99008842717.33785832 13.2661063122.48761053 1.75371684 4.009911573 17.33785832 19.73389369 7.99008842717.33785832 19.7338936917.51238947 3.24628316 4.009911573 17.33785832 19.73389369 7.99008842712.46214168 13.2661063122.48761053 3.24628316 4.009911573 17.33785832 19.73389369 7.99008842712.46214168 19.7338936917.51238947 1.75371684 7.990088427 17.33785832 19.73389369 7.99008842712.46214168 13.2661063122.48761053 1.75371684 7.990088427 17.33785832 19.73389369 7.99008842712.46214168 19.7338936917.51238947 3.24628316 7.990088427 17.33785832 19.73389369 7.99008842717.33785832 13.2661063122.48761053 3.24628316 7.990088427 17.33785832 19.73389369 7.99008842717.33785832 19.73389369]';%注意因为本人做了81组仿真试验,这里的矩阵后面有转置符号,在神经网络模型中,输入P的是8X81的矩阵(把程序复制过来之后格式没对齐,大家自己调整一下啦),对应的下面的输出T的是3x81的矩阵。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。
校苑数模提供:2013美赛群:43269178
1、BP网络构建
(1)生成BP网络
=
net newff PR S S SNl TF TF TFNl BTF BLF PF
(,[ 1 2...],{ 1 2...},,,)
R⨯维矩阵。
P R:由R维的输入样本最小最大值构成的2
S S SNl:各层的神经元个数。
[ 1 2...]
TF TF TFNl:各层的神经元传递函数。
{ 1 2...}
BTF:训练用函数的名称。
(2)网络训练
=
net tr Y E Pf Af train net P T Pi Ai VV TV
[,,,,,] (,,,,,,)
(3)网络仿真
=
Y Pf Af E perf sim net P Pi Ai T
[,,,,] (,,,,)
BP网络的训练函数
训练方法训练函数
梯度下降法traingd
有动量的梯度下降法traingdm
自适应lr梯度下降法traingda
自适应lr动量梯度下降法traingdx
弹性梯度下降法trainrp
Fletcher-Reeves共轭梯度法traincgf
Ploak-Ribiere共轭梯度法traincgp
Powell-Beale共轭梯度法traincgb
量化共轭梯度法trainscg
拟牛顿算法trainbfg
一步正割算法trainoss
Levenberg-Marquardt trainlm
更多内容请访问校苑数模。
加群:43269178。