Matlab代码实践——BP神经网络

数模建模 专栏收录该内容
2 篇文章 0 订阅

                                                       1、什么是BP神经网络

BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用梯度下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。

                                                            2、BP网络构建

这里写图片描述

                                                      3、BP网络的训练函数

这里写图片描述

                                                 4、BP网络训练参数

1.训练参数                       2.参数介绍             3.训练函数  
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

                                                        5、[Matlab]例1

输入:P=[-1 -1 2 2 4;0 5 0 5 7]; 
输出:T=[-1 -1 1 1 -1];

代码

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); %网络训练

W1= net.iw{1, 1}  %输入层到中间层的权值
B1 = net.b{1} %中间各层神经元阈值
W2 = net.lw{2, 1} %中间层到输出层的权值
B2 = net.b{2} %输出层各神经元阈值

sim(net,P) %利用得到的神经网络仿真

                                                      6、matlab工具箱结果解释

这里写图片描述

                                                        7、[Matlab]例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 = 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}%输出层各神经元阈值

输出图像

这里写图片描述



 

另外本人还开设了个人公众号:JiandaoStudio ,会在公众号内定期发布行业信息,以及各类免费代码、书籍、大师课程资源。

 

                                            

扫码关注本人微信公众号,有惊喜奥!公众号每天定时发送精致文章!回复关键词可获得海量各类编程开发学习资料!

例如:想获得Python入门至精通学习资料,请回复关键词Python即可。

  • 4
    点赞
  • 0
    评论
  • 42
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:精致技术 设计师:CSDN官方博客 返回首页

打赏作者

JiandaoStudio

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值