当前位置:首页 >> 信息与通信 >>

BP神经网络matlab实例(简单而经典)


学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。

1、BP 网络构建 (1)生成 BP 网络

net = newff ( PR,[ S1 S 2...SNl ],{TF1 TF 2...TFNl}, BTF , BLF , PF )
PR :由 R 维的输入样本最小最大值构成的 R × 2 维矩阵。 [ S1 S 2...SNl ] :各层的神经元个数。 {TF1 TF 2...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 )
BP 网络的训练函数 训练方法 梯度下降法 有动量的梯度下降法 自适应 lr 梯度下降法 自适应 lr 动量梯度下降法 弹性梯度下降法 Fletcher-Reeves 共轭梯度法 Ploak-Ribiere 共轭梯度法 Powell-Beale 共轭梯度法 量化共轭梯度法 拟牛顿算法 一步正割算法 Levenberg-Marquardt BP 网络训练参数 训练函数 traingd traingdm traingda traingdx trainrp traincgf traincgp traincgb trainscg trainbfg trainoss trainlm

训练参数
net.trainParam.epochs

参数介绍 最大训练次数(缺省为 10)

训练函数 traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、

net.trainParam.goal

训练要求精度(缺省为 0)

net.trainParam.lr

学习率(缺省为 0.01)

学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。

traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm
net.trainParam.max_fail

最大失败次数(缺省为 5)

traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm

net.trainParam.min_grad

最小梯度要求(缺省为 1e-10)

net.trainParam.show

显示训练迭代过程(NaN 表 示不显示,缺省为 25)

net.trainParam.time

最大训练时间(缺省为 inf) traingd、 traingdm、 traingda、 traingdx、trainrp、traincgf、 traincgp、 traincgb、 trainscg、 trainbfg、trainoss、trainlm 动量因子(缺省 0.9) 学习率 lr 增长比(缺省为 1.05) 表现函数增加最大比(缺省 为 1.04) 权值变化增加量(缺省为 1.2) 权值变化减小量(缺省为 0.5) 权值变化最大值(缺省为 50.0) 一维线性搜索方法(缺省为 srchcha) 因为二次求导对权值调整的 影响参数(缺省值 5.0e-5) Hessian 矩阵不确定性调节 参数(缺省为 5.0e-7) traingdm、traingdx traingda、traingdx

net.trainParam.mc net.trainParam.lr_inc net.trainParam.lr_dec net.trainParam.max_perf_inc net.trainParam.delt_inc net.trainParam.delt_dec net.trainParam.delt0 net.trainParam.deltamax net.trainParam.searchFcn net.trainParam.sigma net.trainParam.lambda net.trainParam.men_reduc

学习率 lr 下降比 (缺省为 0.7) traingda、traingdx traingda、traingdx trainrp trainrp

初始权值变化 (缺省为 0.07) trainrp trainrp traincgf、 traincgp、 traincgb、 trainbfg、trainoss trainscg trainscg

net.trainParam.mu net.trainParam.mu_dec net.trainParam.mu_inc net.trainParam.mu_max

控制计算机内存/速度的参 trainlm 量, 内存较大设为 1, 否则设 为 2(缺省为 1) ? 的初始值(缺省为 0.001) trainlm ? 的减小率(缺省为 0.1) trainlm

? 的增长率(缺省为 10) trainlm ? 的最大值(缺省为 1e10) trainlm

学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。

2、BP 网络举例 举例 1、
%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)

举例 2、 利用三层 BP 神经网络来完成非线性函数的逼近任务, 其中隐层神经元个数为五个。 样本数据: 输入 X -1.0000 -0.9000 -0.8000 -0.7000 -0.6000 -0.5000 -0.4000 解: 看到期望输出的范围是 ( ?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];

输出 D -0.9602 -0.5770 -0.0729 0.3771 0.6405 0.6600 0.4609

输入 X -0.3000 -0.2000 -0.1000 0 0.1000 0.2000 0.3000

输出 D 0.1336 -0.2013 -0.4344 -0.5000 -0.3930 -0.1647 -0.0988

输入 X 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000

输出 D 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}%输入层到中间层权值 theta1 = net.b{1}%中间层各神经元阈值 W = net.lw{2,1}%中间层到输出层权值 theta2 = net.b{2}%输出层各神经元阈值

所得结果如下:
输入层到中间层的权值: V = ( -9.1669 7.3448 7.3761 4.8966 3.5409 )
T

中间层各神经元的阈值: θ = ( 6.5885 -2.4019 -0.9962 1.5303 3.2731) 中间层到输出层的权值: W = ( 0.3427 0.2135 0.2981 -0.8840 1.9134 ) 输出层各神经元的阈值: T = -1.5271

T

举例 3、 利用三层 BP 神经网络来完成非线性函数的逼近任务, 其中隐层神经元个数为五个。 样本数据: 输入 X 0 1 2 3 解: 看到期望输出的范围超出 ( ?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);

输出 D 0 1 2 3

输入 X 4 5 6 7

输出 D 4 3 2 1

输入 X 8 9 10

输出 D 2 3 4

学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。

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}%输出层各神经元阈值

所得结果如下: 输入层到中间层的权值: V = ( 0.8584 2.0890 -1.2166 0.2752 -0.3910 )
T

中间层各神经元的阈值: θ = ( -14.0302 -9.8340 7.4331 -2.0135 0.5610 )

T

中间层到输出层的权值: W = ( -0.4675 -1.1234 2.3208 4.6402 -2.2686 ) 输出层各神经元的阈值: T = 1.7623 问题:以下是上证指数 2009 年 2 月 2 日到 3 月 27 日的收盘价格,构建一个三层 BP 神经网
络,利用该组信号的 6 个过去值预测信号的将来值。

日期 2009/02/02 2009/02/03 2009/02/04 2009/02/05 2009/02/06 2009/02/09 2009/02/10 2009/02/11 2009/02/12 2009/02/13 2009/02/16 2009/02/17 2009/02/18 2009/02/19 2009/02/20 2009/02/23 2009/02/24 2009/02/25 2009/02/26 2009/02/27

价格 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

日期 2009/03/02 2009/03/03 2009/03/04 2009/03/05 2009/03/06 2009/03/09 2009/03/10 2009/03/11 2009/03/12 2009/03/13 2009/03/16 2009/03/17 2009/03/18 2009/03/19 2009/03/20 2009/03/23 2009/03/24 2009/03/25 2009/03/26 2009/03/27

价格 2093.452 2071.432 2198.112 2221.082 2193.012 2118.752 2158.572 2139.021 2133.881 2128.851 2153.291 2218.331 2223.731 2265.761 2281.091 2325.481 2338.421 2291.551 2361.701 2374.44



相关文章:
BP神经网络matlab实例(简单而经典)
BP神经网络matlab实例(简单而经典) - 学习神经网络的好助手,可以仿照其中的代码,只需修改个别参数便可以轻易实现自己需要完成的任务。 p=p1';t=t1'; [pn,minp...
更多相关标签: