BP神经网络matlab实例(简单而经典)(完整资料).doc

  • 格式:doc
  • 大小:149.50 KB
  • 文档页数:14

【最新整理,下载后即可编辑】p=p1';t=t1';[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %原始数据归一化net=newff(minmax(pn),[5,1],{'tansig','purelin'},'traingdx');%设置网络,建立相应的BP网络,minmax(pn)找到pn 矩阵的最大最小值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...]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[,,,,] (,,,,){'tansig','purelin'},'trainrp'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),[5,1],{'tansig','purelin'},'trainrp');%minmax(P)取P的最大最小值;[5,1]第一次神经元5个,第二层1个;'tansig','purelin'神经网络第一层和第二层的转移函数;'trainrp'网络训练函数。

net.trainParam.show=50; %最多显示训练步数net.trainParam.lr=0.05; %学习率(缺省为0.01)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神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。

样本数据:看到期望输出的范围是()1,1-,所以利用双极性Sigmoid函数作为转移函数。

程序如下:clear;clc;X=-1:0.1:1;D=[-0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609...0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -.0988...0.3072 0.3960 0.3449 0.1816 -0.312 -0.2189 -0.3201];figure;plot(X,D,'*'); %绘制原始数据分布图(附录:1-1)net = newff([-1 1],[5 1],{'tansig','tansig'});net.trainParam.epochs = 1000; %训练的最大次数net.trainParam.goal = 0.005; %全局最小误差net = train(net,X,D);O = sim(net,X);figure;plot(X,D,'*',X,O); %绘制训练后得到的结果和误差曲线(附录:1-2、1-3)V = net.iw{1,1};%输入层到中间层权值theta1 = net.b{1};%中间层各神经元阈值W = net.lw{2,1};%中间层到输出层权值theta2 = net.b{2};%输出层各神经元阈值所得结果如下:输入层到中间层的权值:()V=-9.1669 7.3448 7.3761 4.8966 3.5409T中间层各神经元的阈值:()θ=6.5885 -2.4019 -0.9962 1.5303 3.2731T中间层到输出层的权值:()W=0.3427 0.2135 0.2981 -0.8840 1.9134输出层各神经元的阈值:-1.5271T=举例3、利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。

样本数据:看到期望输出的范围超出()1,1-,所以输出层神经元利用线性函数作为转移函数。

程序如下:clear;clc;X = [0 1 2 3 4 5 6 7 8 9 10];D = [0 1 2 3 4 3 2 1 2 3 4];figure;plot(X,D,'*'); %绘制原始数据分布图net = newff([0 10],[5 1],{'tansig','purelin'})net.trainParam.epochs = 100;net.trainParam.goal=0.005;net=train(net,X,D);O=sim(net,X);figure;plot(X,D,'*',X,O); %绘制训练后得到的结果和误差曲线(附录:2-2、2-3)V = net.iw{1,1}%输入层到中间层权值theta1 = net.b{1}%中间层各神经元阈值W = net.lw{2,1}%中间层到输出层权值theta2 = net.b{2}%输出层各神经元阈值所得结果如下:输入层到中间层的权值:()0.8584 2.0890 -1.2166 0.2752 -0.3910TV=中间层各神经元的阈值:()θ=-14.0302 -9.8340 7.4331 -2.0135 0.5610T中间层到输出层的权值:()-0.4675 -1.1234 2.3208 4.6402 -2.2686W=输出层各神经元的阈值: 1.7623T=问题:以下是上证指数2009年2月2日到3月27日的收盘价格,构建一个三层BP神经网络,利用该组信号的6个过去值预测信号的将来值。

load data3_1.txt;[m,n]=size( data3_1);tsx = data3_1(1:m-1,1);tsx=tsx';ts = data3_1(2:m,1);ts=ts';[TSX,TSXps]=mapminmax(tsx,1,2); [TS,TSps]=mapminmax(ts,1,2); TSX=TSX';figure;plot(ts,'LineWidth',2);title('到杭旅游总人数(1999.01.01-2009.12.31)','FontSize',12); xlabel('统计年份(1990.12.19-2009.08.19)','FontSize',12);ylabel('归一化后的总游客数/万人','FontSize',12);grid on;% 生成BP网络、利用minmax函数求输入样本范围net_1=newff(minmax(TS),[10,1],{'tansig','purelin'},'traincgf')% 设置训练参数net_1.trainParam.show = 50; %显示训练迭代过程(NaN表示不显示,缺省25)net_1.trainParam.lr = 0.025; %学习率(缺省0.01)net_1.trainParam.mc = 0.9; %动量因子(缺省0.9)net_1.trainParam.epochs = 10000; %最大训练次数net_1.trainParam.goal = 0.001; %训练要求精度inputWeights=net_1.IW{1,1} %输入层权值inputbias=net_1.b{1} %输入层阈值layerWeights=net_1.LW{2,1} %输出层权值layerbias=net_1.b{2} %输出层阈值TS',TSX% 网络训练[net_1,tr]=train(net_1,TS,TSX);另一问题隐层个数及训练次数可以在定义网络时自己设定,图形的话是系统自己生成的.题目的意思是00得到0,01得到1,10得到1,11得到0。

前者为输入,后者为输出.所以就这样构造:%输入一共四组,每组两个p=[0,0;0,1;1,0;1,1];%输出:t=[0,1,1,0];构造神经网络:net=newff(p',t,{10},{'tansig'},'trainlm');%上面这句话的意思是建立新的神经网络net,newff(输入,输出,{隐层数量及该层的节点个数},{传输函数名},训练函数);{10}代表单隐层,并且该层节点为10个,如果想显示多隐层,比如双隐层,{10,15}这样就行,传输函数也要相应增加,比如{'tansig','logsig'}节点数和传输函数名可以随意调整,目的当然是让预测结果更精确%之后,net.trainParam.goal = 0.00001; %设置精确度net.trainParam.epochs = 5000; %设置训练次数,5000次[net,tr] = train(net,p',t); %训练开始。