《数学建模培训--人工神经网络(共32页).doc》由会员分享,可在线阅读,更多相关《数学建模培训--人工神经网络(共32页).doc(32页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上常用的人工神经网络案例1 感知器网络MatLab上机实验例1.1用newp函数设计一个单输入和一个神经元的感知器神经网络,输入的最小值和最大值为。 net=newp(0 2,1);可以用下面语句来观察生成了一个什么样的神经网络。 inputweights = net.inputWeights1,1inputweights = delays: 0 initFcn: initzero learn: 1 learnFcn: learnp learnParam: size: 1 1 userdata: 1x1 struct weightFcn: dotprod weightP
2、aram: 1x1 struct从中可以看到,缺省的学习函数为learnp,网络输入给hardlim传递函数的量为数量积dotprod,即输入量和权值矩阵的乘积,然后再加上阈值。缺省的初始化函数为initzero,即权值的初始值置为0。同样地, biases = net.biases1,1biases = initFcn: initzero learn: 1 learnFcn: learnp learnParam: size: 1 userdata: 1x1 struct例1.2设计一个输入为二维向量的感知器网络,其边界值已定。 net = newp(-2 2;-2 2,1);和上面的例子一样
3、,权值和阈值的初始值为0。如果不想预置为0,则必须单独生成。例如,两个权值和阈值分别为-1 1和1,应用如下语句: net.IW1,1=-1 1; net.b1,1=1;应用下面语句验证一下: net.IW1,1ans = -1 1 net.b1,1ans = 1下面来看这个感知器网络对两个输入信号的输出如何,两个信号分别位于感知器两个边界。第一个输入信号: P1=1;1; a1=sim(net,P1)a1 = 1第二个输入信号: P2=1;-1; a2=sim(net,P2)a2 = 0由此看出,输出是正确的,感知器为输入信号进行了正确的分类。若将两个输入信号组成一个数列,则输出量也为一个数
4、列。 P3=1;1,1;-1; a3=sim(net,P3)a3 = 1 0例1.3首先有newp函数生成一个神经网络。 net = newp(-2 2;-2 2,1);其权值为: wts = net.IW1,1wts = 0 0其阈值为: bias = net.b1,1bias = 0改变权值和阈值: net.IW1,1=3,4; net.b1,1=5;检查权值和阈值,确实已经改变了: wts=net.IW1,1wts = 3 4 bias=net.b1,1bias = 5然后应用init来复原权值和阈值。 net=init(net); wts = net.IW1,1 wts = 0 0 b
5、ias=net.b1,1bias = 0由此可见,应用init可以复原感知器初始值。例1.4应用init改变网络输入的权值和阈值为随机数。 net.inputweights1,1.initFcn=rands; net.biases1,1.initFcn=rands; net=init(net);下面验证一下权值和阈值: wts = net.IW1,1wts = 0.8116 -0.7460 bias=net.b1,1bias = 0.6294例1.5假设一个二维向量输入的感知器神经网络,其输入和期望值样本为:、首先,生成一个感知器网络,然后利用train函数进行训练 net = newp(-2
6、 2;-2 2,1); net.trainParam.epochs=1; %设置最大迭代次数 p=2 1 -2 -1;2 -2 2 1; %样本 t=0 1 0 1; %导师信号 net = train(net,p,t); w=net.IW1,1w = -3 -1 b=net.b1,1b = 0对输入向量进行仿真验证 sim(net,p)ans = 0 0 1 1可见,网络仿真结果没有达到期望值,通过调整训练最大次数可以看其结果。 net.trainParam.epochs=20; net = train(net,p,t); sim(net,p)ans = 0 1 0 1因此训练是成功的,训练
7、规则具有一定的收敛性,并且能够达到精度。例1.6设计一个二输入感知器神经网络,将五个输入向量分为两类。P=-0.5 -0.5 0.5 -0.1;-0.5 0.5 -0.5 1.0T=1 1 0 0首先,应用newp构造一个神经元感知器神经网络,然后利用plotpv画出输入向量图,与期望值1对应的输入向量用“+”表示,与期望值0对应的输入向量用“o”表示。 P=-0.5 -0.5 0.5 -0.1;-0.5 0.5 -0.5 1.0; T=1 1 0 0; net = newp(-1 1;-1 1,1); plotpv(P,T); p=0.7;1.2;net=train(net,P,T); a=
8、sim(net,p)a = 0 plotpv(p,a); hold on plotpv(P,T); plotpc(net.IW1,1,net.b1,1) hold off由此可见,感知器网络能够做到对输入向量进行正确分类,同时验证了网络的可行性。例1.7含有奇异样本的输入向量和期望输出如下:P=-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1 50T=1 1 0 0 1首先,应用newp构造一个神经元感知器神经网络,然后利用plotpv画出输入向量图。 net=newp(-40 -0.5;-0.5 50,1); plotpv(P,T); net=train(net,
9、P,T); hold on plotpc(net.IW1,1,net.b1,1) hold off为了使图形清晰,我们修改坐标值放大部分图形。 axis(-2 2 -2 2);由此可见,网络对于输入向量可以做到正确分类,缺点就是样本存在奇异性的情况下训练时间大大增加了。 P=-0.5 -0.5 0.3 -0.1 -40;-0.5 0.5 -0.5 1 50; T=1 1 0 0 1; net=newp(-40 -0.5;-0.5 50,1); net.inputWeights1,1.learnFcn=learnpn; net.biases1,1.learnFcn=learnpn; net=tr
10、ain(net,P,T); plotpv(P,T); hold on; plotpc(net.IW1,1,net.b1,1); hold off axis(-2 2 -2 2)例1.8单层感知器的一个致命弱点就是输入向量必须是线性可分的。如果输入向量线性可分,感知器可以给出正确的分类结果。而对于线性不可分的输入向量,感知器就不能对输入向量进行正确分类。构造五组输入样本P,T是期望输出。 P=-0.5 -0.5 0.3 -0.1 -0.8;-0.5 0.5 -0.5 1.0 0.0; T=1 1 0 0 0; plotpv(P,T); net = newp(minmax(P),1); net =
11、 train(net,P,T); hold on; plotpc(net.IW1,1,net.b1,1); hold off不能对其分类,此结果恰恰证明了前面所述的结论。2 线性神经网络MatLab上机实验例2.1假设输入和期望输出为: P=1 2 3 T=2.0 4.2 5.9设计网络: net = newlind(P,T);通过对输入量进行仿真: O=sim(net,P)O = 2.0833 4.0333 5.9833可见,网络的输出已经非常接近期望的输出值。例2.2假设输入和期望输出为: P=2 1 -2 -1;2 -2 2 1; T=0 1 0 1;设计网络: net = newlin
12、(minmax(P),1);训练网络: net.trainParam.goal=0.1; net = train(net,P,T); net.IW1,1ans = -0.0615 -0.2194 net.b1,1ans = 0.5899网路仿真: O=sim(net,P)O = 0.0282 0.9672 0.2741 0.4320 err=T-Oerr = -0.0282 0.0328 -0.2741 0.5680 mse(err)ans = 0.0999例2.3为了测定刀具的磨损速度,做这样的实验:经过一定时间(如每隔一小时),测量一次刀具的厚度,得到一组实验数据如下:时间01234567
13、刀具厚度27.026.826.526.326.125.725.324.8试根据上面的实验数据建立一个大体合适的神经网络。解:t=0 1 2 3 4 5 6 7;y=27.0 26.8 26.5 26.3 26.1 25.7 25.3 24.8;plot(t,y,*);net=newlind(t,y); %根据t和y设计一个具有最小均方误差的线性神经网络O=sim(net,t); %用输入t来仿真该网络plot(t,O,t,y,*);e=y-O %期望输出-实际输出mse = mse(y-O) %网络的均方误差值w=net.iw1,1 %权值b=net.b1,1 %阈值时间01234567期望输
14、出27.026.826.526.326.125.725.324.8实际输出27.1326.8226.5226.2125.9125.6125.3025.00偏差-0.13-0.02-0.020.090.190.09-0.00-0.20网络权值:-0.3036 网络阈值:27.1250 网络均方误差:0.0135所拟合的直线:y=-0.3036*t+27.1250例2.4已知一输入信号T=sin(time*pi),其中time=0:0.1:5,构建一个神经网络,利用该组信号的5个过去值预测信号的将来值。解:clc;%清空命令窗口clear;%清空内存time=0:0.1:5;T=sin(time*
15、pi);Q=length(T);X=zeros(5,Q);%X中存储信号T的前5次值,作为网络输入。X(1,6:Q)=T(1,1:(Q-5);X(2,5:Q)=T(1,1:(Q-4);X(3,4:Q)=T(1,1:(Q-3);X(4,3:Q)=T(1,1:(Q-2);X(5,2:Q)=T(1,1:(Q-1);plot(time,T);%绘制信号T曲线xlabel(时间);ylabel(目标信号);title(待预测信号);net=newlind(X,T);O=sim(net,X);figure;plot(time,T,time,O,r);xlabel(时间);ylabel(输出-目标);tit
16、le(输出信号和目标信号);e=T-O;mse = mse(T-O)w = net.iw1,1b = net.b1,1figure;plot(time,e);网络权值:-0.0193 0.0161 -0.0021 -0.9808 1.8808网络阈值:0.0066 网络均方误差:0.0018例2.5以下是上证指数2009年2月2日到3月27日的收盘价格,构建一个神经网络,利用该组信号的6个过去值预测信号的将来值。日期价格日期价格2009/02/022011.6822009/03/022093.4522009/02/032060.8122009/03/032071.4322009/02/0421
17、07.7512009/03/042198.1122009/02/052098.0212009/03/052221.0822009/02/062181.2412009/03/062193.0122009/02/092224.7112009/03/092118.7522009/02/102265.1612009/03/102158.5722009/02/112260.8222009/03/112139.0212009/02/122248.0922009/03/122133.8812009/02/132320.7922009/03/132128.8512009/02/162389.3922009/0
18、3/162153.2912009/02/172319.4422009/03/172218.3312009/02/182209.8622009/03/182223.7312009/02/192227.1322009/03/192265.7612009/02/202261.4822009/03/202281.0912009/02/232305.7822009/03/232325.4812009/02/242200.6522009/03/242338.4212009/02/252206.5722009/03/252291.5512009/02/262121.2522009/03/262361.701
19、2009/02/272082.8522009/03/272374.44解:clear;clc;D=2011.682 2060.812 2107.751 2098.021 2181.241 2224.711 2265.161 2260.822 2248.092 2320.792 2389.392 2319.442 2209.862 2227.132 2261.482 2305.782 2200.652 2206.572 2121.252 2082.852 2093.452 2071.432 2198.112 2221.082 2193.012 2118.752 2158.572 2139.021
20、 2133.881 2128.851 2153.291 2218.331 2223.731 2265.761 2281.091 2325.481 2338.421 2291.551 2361.701 2374.44;Q=length(D);count = 1:1:Q;X=zeros(6,0);X(1,2:Q)=D(1,1:(Q-1);X(2,3:Q)=D(1,1:(Q-2);X(3,4:Q)=D(1,1:(Q-3);X(4,5:Q)=D(1,1:(Q-4);X(5,6:Q)=D(1,1:(Q-5);X(6,7:Q)=D(1,1:(Q-6);plot(count,D);xlabel(输入 );y
21、label(期望输出);net=newlind(X,D);O=sim(net,X);figure;plot(count,O,r);xlabel(输入);ylabel(实际输出);三、BP神经网络BP网络的训练函数训练方法训练函数梯度下降法traingd有动量的梯度下降法traingdm自适应lr梯度下降法traingda自适应lr动量梯度下降法traingdx弹性梯度下降法trainrpFletcher-Reeves共轭梯度法traincgfPloak-Ribiere共轭梯度法traincgpPowell-Beale共轭梯度法traincgb量化共轭梯度法trainscg拟牛顿算法trainb
22、fg一步正割算法trainossLevenberg-MarquardttrainlmBP网络训练参数训练参数参数介绍训练函数net.trainParam.epochs最大训练次数(缺省为10)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet.trainParam.goal训练要求精度(缺省为0)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb
23、、trainscg、trainbfg、trainoss、trainlmnet.trainParam.lr学习率(缺省为0.01)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet.trainParam.max_fail最大失败次数(缺省为5)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、
24、trainlmnet.trainParam.min_grad最小梯度要求(缺省为1e-10)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet.trainParam.show显示训练迭代过程(NaN表示不显示,缺省为25)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet
25、.trainParam.time最大训练时间(缺省为inf)traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlmnet.trainParam.mc动量因子(缺省0.9)traingdm、traingdxnet.trainParam.lr_inc学习率lr增长比(缺省为1.05)traingda、traingdxnet.trainParam.lr_dec学习率lr下降比(缺省为0.7)traingda、traingdxnet.trainPar
26、am.max_perf_inc表现函数增加最大比(缺省为1.04)traingda、traingdxnet.trainParam.delt_inc权值变化增加量(缺省为1.2)trainrpnet.trainParam.delt_dec权值变化减小量(缺省为0.5)trainrpnet.trainParam.delt0初始权值变化(缺省为0.07)trainrpnet.trainParam.deltamax权值变化最大值(缺省为50.0)trainrpnet.trainParam.searchFcn一维线性搜索方法(缺省为srchcha)traincgf、traincgp、traincgb、t
27、rainbfg、trainossnet.trainParam.sigma因为二次求导对权值调整的影响参数(缺省值5.0e-5)trainscgnet.trainParam.lambdaHessian矩阵不确定性调节参数(缺省为5.0e-7)trainscgnet.trainParam.men_reduc控制计算机内存/速度的参量,内存较大设为1,否则设为2(缺省为1)trainlmnet.trainParam.mu的初始值(缺省为0.001)trainlmnet.trainParam.mu_dec的减小率(缺省为0.1)trainlmnet.trainParam.mu_inc的增长率(缺省为1
28、0)trainlmnet.trainParam.mu_max的最大值(缺省为1e10)trainlm例3.1clear;clc;P=-1 -1 2 2 4;0 5 0 5 7;T=-1 -1 1 1 -1;net = newff(minmax(P),5,1,tansig,purelin,traingd);net.trainParam.show=50;net.trainParam.lr=0.05;net.trainParam.epochs=300;net.trainParam.goal=1e-5;net=train(net,P,T);V = net.IW1,1%输入层到中间层的权值b1 = ne
29、t.b1,1%中间层的阈值W = net.lw2,1%中间层到输出层的权值b2 = net.b2,1%输出层的阈值O = sim(net,P);例3.2利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。样本数据如下:输入X输出D输入X输出D输入X输出D-1.0000-0.9602-0.30000.13360.40000.3072-0.9000-0.5770-0.2000-0.20130.50000.3960-0.8000-0.0729-0.1000-0.43440.60000.3449-0.70000.37710-0.50000.70000.1816-0.60000.6
30、4050.1000-0.39300.8000-0.3120-0.50000.66000.2000-0.16470.9000-0.2189-0.40000.46090.3000-0.09881.0000-0.3201看到期望输出的范围是,所以利用双极性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.
31、1816 -0.312 -0.2189 -0.3201;figure;plot(X,D,*); %绘制原始数据分布图net = newff(-1 1,5 1,tansig,tansig);net.trainParam.epochs = 100; %训练的最大次数net.trainParam.goal = 0.005; %全局最小误差net = train(net,X,D); O = sim(net,X); figure; plot(X,D,*,X,O); %绘制训练后得到的结果V = net.IW1,1%输入层到中间层权值b1 = net.b1,1%中间层各神经元阈值W = net.LW2,1
32、%中间层到输出层权值b2 = net.b2,1%输出层各神经元阈值例3.3利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。样本数据如下:输入X输出D输入X输出D输入X输出D00448211539322621043371看到期望输出的范围超出,所以输出层神经元利用线性函数作为转移函数。程序如下: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.trainP
33、aram.epochs = 100;net.trainParam.goal=0.005;net=train(net,X,D);O=sim(net,X);figure;plot(X,D,*,X,O); %绘制训练后得到的结果V = net.IW1,1%输入层到中间层权值b1 = net.b1,1%中间层各神经元阈值W = net.LW2,1%中间层到输出层权值B2 = net.b2,1%输出层各神经元阈值问题以下是上证指数2009年2月2日到3月27日的收盘价格,构建一个三层BP神经网络,利用该组信号的6个过去值预测信号的将来值。日期价格日期价格2009/02/022011.6822009/03
34、/022093.4522009/02/032060.8122009/03/032071.4322009/02/042107.7512009/03/042198.1122009/02/052098.0212009/03/052221.0822009/02/062181.2412009/03/062193.0122009/02/092224.7112009/03/092118.7522009/02/102265.1612009/03/102158.5722009/02/112260.8222009/03/112139.0212009/02/122248.0922009/03/122133.8812
35、009/02/132320.7922009/03/132128.8512009/02/162389.3922009/03/162153.2912009/02/172319.4422009/03/172218.3312009/02/182209.8622009/03/182223.7312009/02/192227.1322009/03/192265.7612009/02/202261.4822009/03/202281.0912009/02/232305.7822009/03/232325.4812009/02/242200.6522009/03/242338.4212009/02/25220
36、6.5722009/03/252291.5512009/02/262121.2522009/03/262361.7012009/02/272082.8522009/03/272374.44四、自组织竞争网络例子4.1clear;clc;P = 0.9285 0.6131 0.8340 0.5159 0.8378 0.6061 0.8924 0.1694 1.0035 0.6021 0.9060 0.4922 0.7868 0.6781 .0.8498 0.1563 0.9909 0.6714 0.9508 0.4555 0.7412 0.5626 0.8816 0.1872 0.8416 0.
37、5563 0.9167 0.4860 .0.8404 0.6145 0.9218 0.2310 0.9715 0.6434 0.8933 0.4849 0.8025 0.5417 0.9277 0.2484 0.9813 0.6539 .0.9019 0.4061 0.8755 0.6349 0.8900 0.1984 0.9892 0.5658 0.8319 0.5058 0.8378 0.6165 0.8745 0.1170 .1.0238 0.5460 0.8349 0.4434 0.8278 0.5570 0.9087 0.1103 0.9507 0.6471 0.8418 0.470
38、9 0.8783 0.5508 .0.9053 0.2012 0.9228 0.5945 0.8486 0.4505 0.8457 0.6079 0.9178 0.1459; .0.1479 0.5004 0.8216 0.0166 0.4534 0.8282 0.8474 0.4114 0.2341 0.4444 0.6953 0.0997 0.4876 0.7123 .0.7668 0.4402 0.2667 0.5194 0.7020 0.0107 0.4576 0.8627 0.7646 0.3596 0.2282 0.5167 0.8467 -0.0137 .0.3942 0.789
39、5 0.7223 0.3120 0.2759 0.5149 0.7960 0.0057 0.4299 0.7802 0.7539 0.3882 0.2711 0.4364 .0.7740 -0.0186 0.4381 0.7963 0.7102 0.3582 0.2596 0.4727 0.6520 -0.0074 0.4564 0.7417 0.7195 0.3529 . 0.2339 0.4839 0.6946 0.0662 0.4775 0.7689 0.6775 0.4523 0.1989 0.4976 0.8291 0.0924 0.4105 0.7883 .0.6960 0.4801 0.1888 0.5191 0.7020 0.0152 0.4149 0.7702 0.8150 0.3383;figure;plot(P(1,:),P(2,:),+r);%初始数据分布图net = newc(minmax(P),6);%初始化一个自组织竞争网络,输出层有两个神经元,聚合成6类W = net.IW1%未训练之前的网络权值hold on;circles = plot(W(:,1),W(:,2),ob);%初始权值位于向量空间重心net = train(net,P);net.trainParam.epochs=700;W=net.IW