数学建模培训人工神经网络.docx
- 文档编号:25659163
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:41
- 大小:150.08KB
数学建模培训人工神经网络.docx
《数学建模培训人工神经网络.docx》由会员分享,可在线阅读,更多相关《数学建模培训人工神经网络.docx(41页珍藏版)》请在冰豆网上搜索。
数学建模培训人工神经网络
常用的人工神经网络案例
1感知器网络MatLab上机实验
例1.1
用newp函数设计一个单输入和一个神经元的感知器神经网络,输入的最小值和最大值为
。
>>net=newp([02],1);
可以用下面语句来观察生成了一个什么样的神经网络。
>>inputweights=net.inputWeights{1,1}
inputweights=
delays:
0
initFcn:
'initzero'
learn:
1
learnFcn:
'learnp'
learnParam:
[]
size:
[11]
userdata:
[1x1struct]
weightFcn:
'dotprod'
weightParam:
[1x1struct]
从中可以看到,缺省的学习函数为learnp,网络输入给hardlim传递函数的量为数量积dotprod,即输入量和权值矩阵的乘积,然后再加上阈值。
缺省的初始化函数为initzero,即权值的初始值置为0。
同样地,
>>biases=net.biases{1,1}
biases=
initFcn:
'initzero'
learn:
1
learnFcn:
'learnp'
learnParam:
[]
size:
1
userdata:
[1x1struct]
例1.2
设计一个输入为二维向量的感知器网络,其边界值已定。
>>net=newp([-22;-22],1);
和上面的例子一样,权值和阈值的初始值为0。
如果不想预置为0,则必须单独生成。
例如,两个权值和阈值分别为[-11]和1,应用如下语句:
>>net.IW{1,1}=[-11];
>>net.b{1,1}=[1];
应用下面语句验证一下:
>>net.IW{1,1}
ans=
-11
>>net.b{1,1}
ans=
1
下面来看这个感知器网络对两个输入信号的输出如何,两个信号分别位于感知器两个边界。
第一个输入信号:
>>P1=[1;1];
>>a1=sim(net,P1)
a1=
1
第二个输入信号:
>>P2=[1;-1];
>>a2=sim(net,P2)
a2=
0
由此看出,输出是正确的,感知器为输入信号进行了正确的分类。
若将两个输入信号组成一个数列,则输出量也为一个数列。
>>P3={[1;1],[1;-1]};
>>a3=sim(net,P3)
a3=
[1][0]
例1.3
首先有newp函数生成一个神经网络。
>>net=newp([-22;-22],1);
其权值为:
>>wts=net.IW{1,1}
wts=
00
其阈值为:
>>bias=net.b{1,1}
bias=
0
改变权值和阈值:
>>net.IW{1,1}=[3,4];
>>net.b{1,1}=[5];
检查权值和阈值,确实已经改变了:
>>wts=net.IW{1,1}
wts=
34
>>bias=net.b{1,1}
bias=
5
然后应用init来复原权值和阈值。
>>net=init(net);
>>wts=net.IW{1,1}
wts=
00
>>bias=net.b{1,1}
bias=
0
由此可见,应用init可以复原感知器初始值。
例1.4
应用init改变网络输入的权值和阈值为随机数。
>>net.inputweights{1,1}.initFcn='rands';
>>net.biases{1,1}.initFcn='rands';
>>net=init(net);
下面验证一下权值和阈值:
>>wts=net.IW{1,1}
wts=
0.8116-0.7460
>>bias=net.b{1,1}
bias=
0.6294
例1.5
假设一个二维向量输入的感知器神经网络,其输入和期望值样本为:
、
、
、
首先,生成一个感知器网络,然后利用train函数进行训练
>>net=newp([-22;-22],1);
>>net.trainParam.epochs=1;%设置最大迭代次数
>>p=[21-2-1;2-221];%样本
>>t=[0101];%导师信号
>>net=train(net,p,t);
>>w=net.IW{1,1}
w=
-3-1
>>b=net.b{1,1}
b=
0
对输入向量进行仿真验证
>>sim(net,p)
ans=
0011
可见,网络仿真结果没有达到期望值,通过调整训练最大次数可以看其结果。
>>net.trainParam.epochs=20;
>>net=train(net,p,t);
>>sim(net,p)
ans=
0101
因此训练是成功的,训练规则具有一定的收敛性,并且能够达到精度。
例1.6
设计一个二输入感知器神经网络,将五个输入向量分为两类。
P=[-0.5-0.50.5-0.1;-0.50.5-0.51.0]
T=[1100]
首先,应用newp构造一个神经元感知器神经网络,然后利用plotpv画出输入向量图,与期望值1对应的输入向量用“+”表示,与期望值0对应的输入向量用“o”表示。
>>P=[-0.5-0.50.5-0.1;-0.50.5-0.51.0];
>>T=[1100];
>>net=newp([-11;-11],1);
>>plotpv(P,T);
>>p=[0.7;1.2];
>>net=train(net,P,T);
>>a=sim(net,p)
a=
0
>>plotpv(p,a);
>>holdon
>>plotpv(P,T);
>>plotpc(net.IW{1,1},net.b{1,1})
>>holdoff
由此可见,感知器网络能够做到对输入向量进行正确分类,同时验证了网络的可行性。
例1.7
含有奇异样本的输入向量和期望输出如下:
P=[-0.5-0.50.3-0.1-40;-0.50.5-0.5150]
T=[11001]
首先,应用newp构造一个神经元感知器神经网络,然后利用plotpv画出输入向量图。
>>net=newp([-40-0.5;-0.550],1);
>>plotpv(P,T);
>>net=train(net,P,T);
>>holdon
>>plotpc(net.IW{1,1},net.b{1,1})
>>holdoff
为了使图形清晰,我们修改坐标值放大部分图形。
>>axis([-22-22]);
由此可见,网络对于输入向量可以做到正确分类,缺点就是样本存在奇异性的情况下训练时间大大增加了。
>>P=[-0.5-0.50.3-0.1-40;-0.50.5-0.5150];
>>T=[11001];
>>net=newp([-40-0.5;-0.550],1);
>>net.inputWeights{1,1}.learnFcn='learnpn';
>>net.biases{1,1}.learnFcn='learnpn';
>>net=train(net,P,T);
>>plotpv(P,T);
>>holdon;
>>plotpc(net.IW{1,1},net.b{1,1});
>>holdoff
>>axis([-22-22])
例1.8
单层感知器的一个致命弱点就是输入向量必须是线性可分的。
如果输入向量线性可分,感知器可以给出正确的分类结果。
而对于线性不可分的输入向量,感知器就不能对输入向量进行正确分类。
构造五组输入样本P,T是期望输出。
>>P=[-0.5-0.50.3-0.1-0.8;-0.50.5-0.51.00.0];
>>T=[11000];
>>plotpv(P,T);
>>net=newp(minmax(P),1);
>>net=train(net,P,T);
>>holdon;
>>plotpc(net.IW{1,1},net.b{1,1});
>>holdoff
不能对其分类,此结果恰恰证明了前面所述的结论。
2线性神经网络MatLab上机实验
例2.1
假设输入和期望输出为:
>>P=[123]
>>T=[2.04.25.9]
设计网络:
>>net=newlind(P,T);
通过对输入量进行仿真:
>>O=sim(net,P)
O=
2.08334.03335.9833
可见,网络的输出已经非常接近期望的输出值。
例2.2
假设输入和期望输出为:
>>P=[21-2-1;2-221];
>>T=[0101];
设计网络:
>>net=newlin(minmax(P),1);
训练网络:
>>net.trainParam.goal=0.1;
>>net=train(net,P,T);
>>net.IW{1,1}
ans=
-0.0615-0.2194
>>net.b{1,1}
ans=
0.5899
网路仿真:
>>O=sim(net,P)
O=
0.02820.96720.27410.4320
>>err=T-O
err=
-0.02820.0328-0.27410.5680
>>mse(err)
ans=
0.0999
例2.3
为了测定刀具的磨损速度,做这样的实验:
经过一定时间(如每隔一小时),测量一次刀具的厚度,得到一组实验数据如下:
时间
0
1
2
3
4
5
6
7
刀具厚度
27.0
26.8
26.5
26.3
26.1
25.7
25.3
24.8
试根据上面的实验数据建立一个大体合适的神经网络。
解:
t=[01234567];
y=[27.026.826.526.326.125.725.324.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.iw{1,1}%权值
b=net.b{1,1}%阈值
时间
0
1
2
3
4
5
6
7
期望输出
27.0
26.8
26.5
26.3
26.1
25.7
25.3
24.8
实际输出
27.13
26.82
26.52
26.21
25.91
25.61
25.30
25.00
偏差
-0.13
-0.02
-0.02
0.09
0.19
0.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*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('输出-目标');
title('输出信号和目标信号');
e=T-O;
mse=mse(T-O)
w=net.iw{1,1}
b=net.b{1,1}
figure;
plot(time,e);
网络权值:
-0.01930.0161-0.0021-0.98081.8808
网络阈值:
0.0066网络均方误差:
0.0018
例2.5
以下是上证指数2009年2月2日到3月27日的收盘价格,构建一个神经网络,利用该组信号的6个过去值预测信号的将来值。
日期
价格
日期
价格
2009/02/02
2011.682
2009/03/02
2093.452
2009/02/03
2060.812
2009/03/03
2071.432
2009/02/04
2107.751
2009/03/04
2198.112
2009/02/05
2098.021
2009/03/05
2221.082
2009/02/06
2181.241
2009/03/06
2193.012
2009/02/09
2224.711
2009/03/09
2118.752
2009/02/10
2265.161
2009/03/10
2158.572
2009/02/11
2260.822
2009/03/11
2139.021
2009/02/12
2248.092
2009/03/12
2133.881
2009/02/13
2320.792
2009/03/13
2128.851
2009/02/16
2389.392
2009/03/16
2153.291
2009/02/17
2319.442
2009/03/17
2218.331
2009/02/18
2209.862
2009/03/18
2223.731
2009/02/19
2227.132
2009/03/19
2265.761
2009/02/20
2261.482
2009/03/20
2281.091
2009/02/23
2305.782
2009/03/23
2325.481
2009/02/24
2200.652
2009/03/24
2338.421
2009/02/25
2206.572
2009/03/25
2291.551
2009/02/26
2121.252
2009/03/26
2361.701
2009/02/27
2082.852
2009/03/27
2374.44
解:
clear;
clc;
D=[2011.6822060.8122107.7512098.0212181.2412224.7112265.1612260.8222248.0922320.7922389.3922319.4422209.8622227.1322261.4822305.7822200.6522206.5722121.2522082.8522093.4522071.4322198.1122221.0822193.0122118.7522158.5722139.0212133.8812128.8512153.2912218.3312223.7312265.7612281.0912325.4812338.4212291.5512361.7012374.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('输入');
ylabel('期望输出');
net=newlind(X,D);
O=sim(net,X);
figure;
plot(count,O,'r');
xlabel('输入');
ylabel('实际输出');
三、BP神经网络
BP网络的训练函数
训练方法
训练函数
梯度下降法
traingd
有动量的梯度下降法
traingdm
自适应lr梯度下降法
traingda
自适应lr动量梯度下降法
traingdx
弹性梯度下降法
trainrp
Fletcher-Reeves共轭梯度法
traincgf
Ploak-Ribiere共轭梯度法
traincgp
Powell-Beale共轭梯度法
traincgb
量化共轭梯度法
trainscg
拟牛顿算法
trainbfg
一步正割算法
trainoss
Levenberg-Marquardt
trainlm
BP网络训练参数
训练参数
参数介绍
训练函数
net.trainParam.epochs
最大训练次数(缺省为10)
traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.goal
训练要求精度(缺省为0)
traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.lr
学习率(缺省为0.01)
traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.max_fail
最大失败次数(缺省为5)
traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.min_grad
最小梯度要求(缺省为1e-10)
traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.show
显示训练迭代过程(NaN表示不显示,缺省为25)
traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.time
最大训练时间(缺省为inf)
traingd、traingdm、traingda、traingdx、trainrp、traincgf、traincgp、traincgb、trainscg、trainbfg、trainoss、trainlm
net.trainParam.mc
动量因子(缺省0.9)
traingdm、traingdx
net.trainParam.lr_inc
学习率lr增长比(缺省为1.05)
traingda、traingdx
net.trainParam.lr_dec
学习率lr下降比(缺省为0.7)
traingda、traingdx
net.trainParam.max_perf_inc
表现函数增加最大比(缺省为1.04)
traingda、traingdx
net.trainParam.delt_inc
权值变化增加量(缺省为1.2)
trainrp
net.trainParam.delt_dec
权值变化减小量(缺省为0.5)
trainrp
net.trainParam.delt0
初始权值变化(缺省为0.07)
trainrp
net.trainParam.deltamax
权值变化最大值(缺省为50.0)
trainrp
net.trainParam.searchFcn
一维线性搜索方法(缺省为srchcha)
traincgf、traincgp、traincgb、trainbfg、trainoss
net.trainParam.sigma
因为二次求导对权值调整的影响参数(缺省值5.0e-5)
trainscg
net.trainParam.lambda
Hessian矩阵不确定性调节参数(缺省为5.0e-7)
trainscg
net.trainParam.men_reduc
控制计算机内存/速度的参量,内存较大设为1,否则设为2(缺省为1)
trainlm
net.trainParam.mu
的初始值(缺省为0.001)
trainlm
net.trainParam.mu_dec
的减小率(缺省为0.1)
trainlm
net.trainParam.mu_inc
的增长率(缺省为10)
trainlm
net.trainParam.mu_max
的最大值(缺省为1e10)
trainlm
例3.1
clear;
clc;
P=[-1-1224;05057];
T=[-1-111-1];
net=newff(minmax(P),[5,1],{'tansig','purelin'},'traingd');
net.trainParam.show=50;
net.trainParam.lr=0.05;
net.trainParam.epochs=300;
net.train
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数学 建模 培训 人工 神经网络