bp神经网络matlab代码实例_BP神经网络与matlab实例详解(一)

本文介绍了BP神经网络的概念,它是一种多层前馈神经网络,广泛应用于预测。通过MATLAB,我们可以构建并训练BP神经网络,例如,通过设置输入层、隐藏层和输出层的神经元数量,以及训练参数,实现不同非线性问题的预测。文中给出了多个实例,包括双输入单输出和非线性函数逼近的任务,展示了如何使用MATLAB代码进行BP神经网络的训练和仿真。
摘要由CSDN通过智能技术生成
3219491de5901b3a278e5543629828a8.gif

什么是BP神经网络

BP神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络。它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方差为最小。

BP神经网络由输入层、隐含层、输出层三大层组成,其中隐含层可以为一层或多层。隐含层内的神经元与外界没有直接的联系,但其状态的改变能影响输入和输出之间的关系。

如何应用BP神经网络进行预测

MATLAB中可以实现BP神经网络预测,只要通过输入输入层神经元,及设定隐含层层数、节点数及预测精度的控制要求就可以实现预测。它的原理实际上是分析输入神经元与输出神经元的非线性关系,这就要求输出项参数实际上是与输入项参数需要具有一定的关联性。

BP网络构建

(1)生成BP网络

20cf13cd25c8c3f1fd71ea99cec4959e.png

PR:由R维的输入样本最小最大值构成的R*2维矩阵。

[S1S2...SN]:各层的神经元个数。

{TF1 TF2 ...TFN}:各层的神经元传递函数。

BTF:训练用函数的名称。

(2)网络训练

d3fe1f5e1b58d2455fb13e3e0ffe57b6.png

(3)网络仿真

c2fb01fcb0195b0eea2c27c66cffecdb.png

BP网络的训练函数

edef86dba1184c2b3ba1ec0d2ca7105f.png

BP网络训练参数

bd033340de06a59e787f9753af787dfb.png d5fdbda56aa4ce10566c0dba150f114d.png d9ab64a135a41ea972158b871612b6e5.png

BP网络举例

举例1

双输入单输出五组样本 网络结构是2-5-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神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。

样本数据:

b363cce94a94ee9d1f2aed6f85a5dae2.png

解:

看到期望输出的范围是(-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}%输出层各神经元阈值

所得结果如下:

输入层到中间层的权值:

fa5641e27af533198bd613ae3ad85d95.png

中间层各神经元的阈值: 

895fa4f89f4567eae055bf2dfd6e6170.png

中间层到输出层的权值:

6600d153454bdb0266a6f642ada0fa37.png

输出层各神经元的阈值:

2f5a93b7fee6f47b64d484fdbf637a50.png

权值直接确定法:

format long

clc;

clear;

xi=-1:0.1:1;xi=xi';

yi=[-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];

numSMP=length(yi);     %样本个数

numW=25;               %隐层神经元个数

xiM=[];

for jj=0:1:(numW-1)

 xiM=[xiM,xi.^jj];   %

end

W=pinv(xiM)*yi';         %隐层最优权值

figure;

plot(xi,yi,'k*',xi,xiM*W,'r:')

举例3

利用三层BP神经网络来完成非线性函数的逼近任务,其中隐层神经元个数为五个。

样本数据:

a46aca7018778833128ad2f3b1b57cc1.png

解:

看到期望输出的范围超出(-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);

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

所得结果如下:

输入层到中间层的权值:

968e108d22c5dfb1293d94e02705aa34.png

中间层各神经元的阈值: 

290972c7cec4352ea2c34dd5e40c6b35.png

中间层到输出层的权值:

49392ba6dff43fb709ca75ad50cfe2b9.png

输出层各神经元的阈值:

1987cd50d2c2835a9a7b4336093f0795.png

•  END  •

模友们可能已经发现:现在公众号推送文章的顺序,已经不会按时间排列了。这种变化,可能会让各位模友错过我们每天的推送。

所以,如果你还想像往常一样,聚焦数模乐园,就需要将“数模乐园”标为星标公众号,同时在阅读完文章后,别忘了给一个“在看”哦。

星标步骤

(1)点击页面最上方“数模乐园”,进入公众号主页

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

b204ae677f31dbe641a81967b13a7b83.gif f158172b45f4396d116a27b95c86938d.png

扫码关注我们

9d12be6568c908a0041dbf1a3f9e86fc.png

2020夏令营QQ交流群

0ea7b3fc7ba82a159c3beac2adcde3a1.png 55650f40f623fdbedea44e3e9f5848d9.gif

球分享

55650f40f623fdbedea44e3e9f5848d9.gif

球点赞

55650f40f623fdbedea44e3e9f5848d9.gif

球在看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值