基于matlab实现BP神经网络模型仿真Word格式.docx
《基于matlab实现BP神经网络模型仿真Word格式.docx》由会员分享,可在线阅读,更多相关《基于matlab实现BP神经网络模型仿真Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
2005
450254
2006
378781
2007
327209
2008
265204
2009
238351
二、问题研究
(一)研究方向
(1)通过数据利用BP神经网络模型预测历年全国交通事故次数并与实际值进行比较。
(2)分析BP神经网络模型改变训练函数再进行仿真与之前结果进行对比。
(3)从泛化能力和稳定性等方面分析BP神经网络模型的优劣。
(4)利用径向基函数网络模型进行仿真,得到结果与采用BP神经网络模型得到的结果进行比较。
(二)相关知识
(1)人工神经网络
人工神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。
在工程与学术界也常直接简称为神经网络或类神经网络。
神经网络是一种运算模型,由大量的节点(或称神经元)和之间相互联接构成。
每个节点代表一种特定的输出函数,称为激励函数(activationfunction)。
每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。
网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。
而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
人工神经网络有以下几个特征:
(1)非线性非线性关系是自然界的普遍特性。
大脑的智慧就是一种非线性现象。
人工神经元处于激活或抑制二种不同的状态,这种行为在数学上表现为一种非线性
网络关系。
具有阈值的神经元构成的网络具有更好的性能,可以提高容错性和存储容量。
(2)非局限性一个神经网络通常由多个神经元广泛连接而成。
一个系统的整体行为不仅取决于单个神经元的特征,而且可能主要由单元之间的相互作用、相互连接所决定。
通过单元之间的大量连接模拟大脑的非局限性。
联想记忆是非局限性的典型例子。
(3)非常定性人工神经网络具有自适应、自组织、自学习能力。
神经网络不但处理的信息可以有各种变化,而且在处理信息的同时,非线性动力系统本身也在不断变化。
经常采用迭代过程描写动力系统的演化过程。
(4)非凸性一个系统的演化方向,在一定条件下将取决于某个特定的状态函数。
例如能量函数,它的极值相应于系统比较稳定的状态。
非凸性是指这种函数有多个极值,故系统具有多个较稳定的平衡态,这将导致系统演化的多样性。
(2)BP神经网络模型
BP(BackPropagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。
BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。
它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。
BP神经网络模型拓扑结构包括输入层(input)、隐层(hidelayer)和输出层(outputlayer)。
(3)径向基函数网络模型
径向基函数(RadialBasisFunction,RBF)神经网络由三层组成,输入层节点只传递输入信号到隐层,隐层节点由像高斯函数那样的辐射状作用函数构成,而输出层节点通常是简单的线性函数。
隐层节点中的作用函数(基函数)对输入信号将在局部产生响应,也就是说,当输入信号靠近基函数的中央范围时,隐层节点将产生较大的输出,由此看出这种网络具有局部逼近能力,所以径向基函数网络也称为局部感知场网络。
三、建模
第一步:
根据数据选定BP神经网络的结构,本文中所用到的BP神经网络模型网络层数为2,隐层神经元数目为10,选择隐层和输出层神经元函数分别为tansig函数和purelin函数,网络训练方法分别用了梯度下降法、有动量的梯度下降法和有自适应lr的梯度下降法。
第二步:
对输入数据和输出数据进行归一化处理;
第三步:
有函数newff()构造神经网络。
第四步:
在对神经网络训练之前,首先设定相关参数,例如最大训练次数、训练要求精度、学习率等。
第五步:
对BP神经网络进行训练。
第六步:
重复训练直到满足要求为止。
第七步:
保存训练好的神经网络,并用训练好的神经网络进行预测。
第八步:
将预测值和实际输出值进行对比,分析模型的稳定性。
四、仿真
BP网络神经网络模型仿真,matlab源代码如下:
x=[];
y=[];
p=x'
;
t=y'
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
figure
(1);
plot(pn,tn,'
-'
);
title('
实际输入与实际输出图'
'
fontsize'
12)
ylabel('
实际输出'
xlabel('
样本'
net=newff(minmax(pn),[101],{'
tansig'
'
purelin'
},'
traingd'
net.trainParam.epochs=50000;
net.trainParam.goal=0.00001;
net.trainParam.lr=0.01;
%net.trainParam.min_grad=1e-50;
net=train(net,pn,tn);
t2=sim(net,pn);
figure
(2);
r'
pn,t2,'
b'
legend('
期望输出'
预测输出'
)
预测输出与实际输出对比'
函数输出'
figure(3)
plot(pn,t2,'
:
og'
holdon
-*'
BP网络预测输出'
error=t2-tn;
figure(4)
plot(error,'
BP网络预测误差'
误差'
figure(5)
plot((tn-t2)./t2,'
神经网络预测误差百分比'
errorsum=sum(abs(error))
%输出训练后的权值和阈值
iw1=net.IW{1};
b1=net.b{1};
lw2=net.LW{2};
b2=net.b{2};
仿真结果如下图所示:
(1)模型训练方法为梯度下降法,函数为traingd
神经网络的第一层的权重为:
13.6043215790013
-13.6781856692610
-14.0649206962947
-13.9848650272192
-13.9871960386982
-13.9951268043836
-14.0071081197679
-13.9888866256635
14.1108167288415
13.9653714912941
神经网络第一层的偏置为:
-14.3935492958342
11.2816707014364
7.64317226847366
4.70625608385651
1.69507957693330
-1.57106974025717
-4.61930431372367
-7.79883621089532
10.7542837046117
14.0333143274359
神经网络的第二层的权重为:
0.5191492362622030.2518287694070920.1027356545542340.150********58290.2814587482634100.309838232092716.025*********-0.2894001266039140.4399908683284090.108195723319044
神经网络第而层的偏置为:
-0.427391472171392
(2)模型训练方法为有动量的梯度下降法,函数为traingdm
(3)模型训练方法为有自适应lr的梯度下降法,函数为traingda
五、评价
(1)初始值的影响
本文建立BP神经网络模型时用的是newff()函数,由于newff()的随意性,所以基本上每一次的训练结果都是不同的。
前馈型神经网络在训练之前必须要对权值和阈值进行初始化,newff()可以自动完成这一过程,但是,权值和阈值的初始化时随机的,这里就不详细研究了。
(2)训练函数的影响
从上文所给的结果图可以看出,训练函数对模型训练的影响是显著的,网络训练方法分别用了梯度下降法、有动量的梯度下降法和有自适应lr的梯度下降法,可以看到用梯度下降法要训练24961步才能达到要求的训练精度,而使用有动量的梯度下降法和有自适应lr的梯度下降法分别只需要11199步和830步。
大幅度的缩减了训练次数,但得到的训练过的模型一样精准。
(3)稳定性
BP神经网络模型有一下几点不足:
首先,由于学习速率是固定的,因此网络的收敛速度慢,需要较长的训练时间。
对于一些复杂问题,BP算法需要的训练时间可能非常长,这主要是由于学习速率太小造成的,可采用变化的学习速率或自适应的学习速率加以改进。
其次,BP算法可以使权值收敛到某个值,但并不保证其为误差平面的全局最小值,这是因为采用梯度下降法可能产生一个局部最小值。
对于这个问题,可以采用附加动量法来解决。
再次,网络隐含层的层数和单元数的选择尚无理论上的指导,一般是根据经验或者通过反复实验确定。
因此,网络往往存在很大的冗余性,在一定程度上也增加了网络学习的负担。
最后,网络的学习和记忆具有不稳定性。
也就是说,如果增加了学习样本,训练好的网络就需要从头开始训练,对于以前的权值和阈值是没有记忆的。
但是可以将预测、分类或聚类做的比较好的权值保存。
(4)泛化能力
BP神经网络模型的泛化能力很弱,而且学习和记忆具有不稳定性,所以在实际的应用中,原始的BP算法很难胜任。
本文最后给出径向基函数网络的仿真结果及源代码,并与BP神经网络模型进行比较。
径向基函数网络的仿真matlab源代码如下:
clear
clc
%输入
%输出
net=newrb(p,t);
Y=sim(net,p);
figure
(1)
plot(p,Y,'
plot(p,t,'
径向基函数网络输出'
error=Y-t;
figure
(2)
径向基函数网络预测误差'
结果如下图所示:
从上图可以看出用newrb()函数建立径向基函数网络模型进行仿真也得到了很好的结果,并且该模型比BP神经网络模型更简单,而且需要设定的参数更少。
稳定性也比BP模型好很多。
最后,用newrb()函数建立径向基函数网络模型预测2010年全国车祸次数,得到结果为:
304560次。