学习神经网络的好助手,可以仿照其中的代码,只需要修改个别参数便可以轻易实现自己需要完成的任务。
1. BP网络构建
(1) 生成BP网络
Net=newff(PR,|S1 S2 …SN|,{TF1 TF2 …TFNl},BTF,BLF,PF)
PR:由R维的输入样本最小最大值构成的RX2维矩阵。
[S1 S2…SNl]:各层的神经元个数。
{ TF1 TF2 …TFNl}}:各层的神经元传递函数。
BTF:
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示网络的训练函数。默认为‘trainlm’
BLF:表示网络的权值学习函数。默认为‘learngdm’
PF:表示性能数,默认为‘mse’
(2) 网络训练
[net,tr,Y,E,Pf,Af]=train(net,P,T,PiAi,VV,TV)
(3) 网络仿真
[Y,Pf,Af,E,,Perf]=sim(net,P,Pi,Ai,T)
BP网络的训练函数
训练方法
训练函数
梯度下降法
trainged
有动量的梯度下降法
Traingdm
有适应lr的梯度下降法
Traingda
有适应lr的动量梯度下降法
Traingdx
弹性梯度下降法
Trainrp
Fletcher-Reeves共轭梯度法
Traincgf
Ploak-Bibiere共轭梯度法
Traincgp
Powell-Beale共轭梯度法
Traincgd
量化共轭梯度法
Trainscp
拟牛顿算法
Trainbfg
一步正割算法
Trainoss
Levenberg-Marquardt
trainlm
BP网络训练参数
训练参数
参数介绍
训练参数
net,trainParam.epochs
最大训练次数(缺省为10)
Trainged Traingdm Traingda
Traingdx Trainrp Traincgf
Traincgp Traincgd Trainscp
Trainbfg Trainoss Trainlm
net,trainParam.goal
训练要求精度(缺省为0)
Trainged Traingdm Traingda
Traingdx Trainrp Traincgf
Traincgp Traincgd Trainscp
Trainbfg Trainoss Trainlm
net,trainParam.lr
学习率(缺省为0.01)
12个,同上
net,trainParam.max_fail
最大失败次数(缺省为5)
12个,同上
net,trainParam.min_grad
最小梯度要求(缺省为1e-10)
12个,同上
net,trainParam.show
显示训练迭代过程(NaN表示不显示,缺省为25)
12个,同上
net,trainParam.time
最大训练时间(缺省为inf)
12个,同上
net,trainParam.mc
动量因子(缺省为0.9)
traindm, traindx
net,trainParam.lr_inc
学习率lr增长比(缺省为1.05)
trainda ,traindx
net,trainParam.lr_dec
学习率lr下降比(缺省为0.7)
trainda ,traindx
net,trainParam.max_perf_inc
表现函数增加最大比(缺省为1.04)
trainda ,traindx
net,trainParam.delt_inc
权值变化增加量(缺省为1.2)
trainrp
net,trainParam.delt_dec
权值变化减小量(缺省为0.5)
trainrp
net,trainParam.delt_0
初始权值变化(缺省为0.07)
trainrp
net,trainParam.delt_amax
权值变化最大值(缺省为50.0)
trainrp
net,trainParam.searchFcn
一维线性搜索方法(缺省为srchcha)
traincgf traincgp traincgb train bfg 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.01)
trainlm
net,trainParam.mu_dec
的减小率(缺省为0.1)
trainlm
net,trainParam. mu_inc
的增长率(缺省为10)
trainlm
net,trainParam. mu_max
的最大值(缺省为1e10)
trainlm
2,BP网络举例
例一
%traingd
clear;
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’);
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)
例二、利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。
样本数据:
输入
输出
输入
输出
输入
输出
-1.0000
-0.9602
-0.3000
0.1336
0.4000
0.3072
-0.9000
-0.5770
-0.2000
-0.2013
0.5000
0.3960
-0.8000
-0.0729
-0.1000
-0.4344
0.6000
0.3449
-0.7000
-0.3771
0
-0.5000
0.7000
0.1816
-0.6000
-0.6405
0.1000
-0.3930
0.8000
-0.3120
-0.5000
-0.6600
0.2000
-0.1647
0.9000
-0.2189
-.04000
-0.4609
0.3000
-0.0988
1.0000
-0.3201
解:
看到期望输出的范围是(-1,1),所以利用双极性signoid函数作为转移函数。
程序如下:
clear;
clc; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
X=-1:0.1:1;//x从-1到1的向量, 0.1那个是阶数。就是指-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 -0.0988..
0.3072 0.3960 0.3449 0.1816 -0.3120 -0.2189 -0.3201
];
figure;
plot(X,D,’*’);%绘制原始数据分布图(附录;1-1)
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);绘制训练后得到的结果和误差曲线(附录:1-2、1-3)
V=net.iw{1,1} %输入层到中间层的权值
thetal=net.b{1} %中间层各神经元的阈值
W=net.lw{2,1} %中间层到输出层的权值
theta2=net.b{2} %输出层各神经元的阈值
所得结果如下:
输入层到中间层的权值:V=(-9.1669 7.3448 7.3761 4.8966 3.5409)
中间层各神经元的阈值:=(6.5885 -2.4019 -0.9962 1.5303 3.2731)
中间层到输出层的权值:W=(0.3427 0.2135 0.2981 -0.884. 1.9134)
输出层各神经元的阈值:T=-1.5271
例三.
以下是上证指数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,TSps]=mapminmax(tsk,1,2);
[TS,TSps]=mapminmax(ts,1,2);
TSX=TSX’;