课程论文BP神经网络实现交通运输量的预测课程名称人工智能与神经网络学院计算机学院专业信号与信息处理班级10级研姓名汪杜娟(103520081002016)论文分数评阅教师(签名)中国传媒大学2010年12月1摘要:本文详细介绍了用于预测交通量的BP神经神经网络模型的构建,并用所构建的模型预测交通量。本文给出1986年到2000年的15组交通数据量,网络设置为3输入,1输出。其中9组为正常训练数据,3组为变量数据,3组为测试数据。1.研究背景交通量预测的方法很多,其中定量法常用的有移动平均法、指数平滑法、回归分析法,他们实现起来不是很方便,都需要建立函数模型来进行预测。与这些方法相比,神经网络有较强的映射能力、泛化能力、容错能力和很强的联想记忆能力,人工神经网络作为一种并行的计算模型,具有传统建模方法所不具备的很多优点,有很好的非线性映射能力,对被建模对象的经验知识要求不多,一般不必事先知道有关被建模对象的结参数和动作特性等方面的知识,只需给出对象的输入和输出数据,通过网络本身的学习功能就可以达到输入与输出的映射关系.所以,用神经网络模型进行交通量预测是一种有效的方法。近年来,已有学者利用神经网络进行了交通量的预测(其中使用最多的是BP神经网络或他的变化形式),构建了多种的模型,取得了一定的成就,下面具体介绍构建预测交通量的BP神经网络模型的步骤,以此完成对交通运输量的预测。2.BP神经网络原理和拓扑结构22.1,神经元模型神经网络是由很多神经元组成的,首先我们看一下,什么是神经元?图1所示为一个具有n个输入的神经元模型。x=(x1,x2,…,xn)为神经元的输入,为可调的输入权值,w=(w1,w2,…,wn)为偏移信号,用于建模神经元的兴奋阈值。u和f分别表示神经元的基函数和激活函数。基函数u是一个多输入单输出函数,u=u(x);激活函数f的一般作用是对基函数的输出进行“挤压”:y=f(u),即通过非线性函数f(u)将u变换到指定范围内。图1神经元模型2.2BP神经网络的结构如图2所示,这是一个三层BP网络。一般来说,BP网络是一种具有三层或三层以上的多层神经元网络,由输入层,隐含层和输出层组成。它的上下各层之间的各个神经元实现全连接,即上一层的每一个神经元与下一层的每一个神经元都有连接,而上下各层之间无连接。3图2BP神经网络的结构2.3,BP神经网络的原理BP神经网络就是采用BP算法训练的网络,是一种多层前向网络。BP算法即后向传播(Back-Propagation)学习算法,其基本原理是:信息的逐层前向计算传播和权值、阈值通过误差的反向传播来调整,这两个过程周而复始地进行,直到网络输出的误差达到可接受的程度。它是一种迄今为止最著名的多层网络学习算法。3.BP神经网络的特点网络实质上实现了一个从输入到输出的映射功能,而数学理论已证明它具有实现任何复杂非线性映射的功能。这使得它特别适合于求解内部机制复杂的问题。我们无需建立模型,或了解其内部过程,只需输入,获得输出。只要BPNN结构优秀,一般20个输入函数以下的问题都能在50000次的学习以内收敛到最低误差附近。而且理论上,4一个三层的神经网络,能够以任意精度逼近给定的函数,这是非常诱人的期望;网络能通过学习带正确答案的实例集自动提取“合理的”求解规则,即具有自学习能力;网络具有一定的推广、概括能力。4.BP神经网络应注意问题1,BP算法的学习速度很慢,其原因主要有:a,由于BP算法本质上为梯度下降法,而它所要优化的目标函数又非常复杂,因此,必然会出现“锯齿形现象”,这使得BP算法低效;b,存在麻痹现象,由于优化的目标函数很复杂,它必然会在神经元输出接近0或1的情况下,出现一些平坦区,在这些区域内,权值误差改变很小,使训练过程几乎停顿;c,为了使网络执行BP算法,不能用传统的一维搜索法求每次迭代的步长,而必须把步长的更新规则预先赋予网络,这种方法将引起算法低效。2,网络训练失败的可能性较大,其原因有:a,从数学角度看,BP算法为一种局部搜索的优化方法,但它要解决的问题为求解复杂非线性函数的全局极值,因此,算法很有可能陷入局部极值,使训练失败;b,网络的逼近、推广能力同学习样本的典型性密切相关,而从问题中选取典型样本实例组成训练集是一个很困难的问题。3,网络结构的选择:尚无一种统一而完整的理论指导,一般只能由经验选定。为此,有人称神经网络的结构选择为一种艺术。而网络的结构直接影响网络的逼5近能力及推广性质。因此,应用中如何选择合适的网络结构是一个重要的问题。4、新加入的样本要影响已学习成功的网络,而且刻画每个输入样本的特征的数目也必须相同。5、采用s型激活函数,由于输出层各神经元的理想输出值只能接近于1或0,而不能达到1或0,因此设置各训练样本的期望输出分量Tkp时,不能设置为1或0,设置0.9或0.1较为适宜。5.BP算法流程图BP算法的流程图如图3:图3BP算法流程图66.BP神经网络matlab实现的基本步骤1、数据归一化,可以用一线性函数将数据归一化到[-1,1];2、输入学习样本矩阵和对应的理想输出矩阵;3、建立神经网络,用newff()函数,包括设置多少层网络,一般3层以内既可以。每层的节点数(具体节点数,尚无科学的模型和公式方法确定,可采用试凑法,但输出层的节点数应和需要输出的量个数相等),设置隐含层的传输函数等。4、用学习样本和输出矩阵,用train()函数,这步非常重要;5、网络完成训练后,用sim()函数,就可以调用训练结果,输入测试数据,进行测试;6、数据进行反归一化,用对应线性函数反归一化得到数据;7、误差分析、结果预测或分类,作图等…7.结果和分析7.1网络层数、神经元数、传递函数与学习算法的确定:神经网络理论Kolmogorov定理已经证明,经充分学习三层BP网络可以逼近任何函数,因此选择三层网络。时间序列数据输入层节点数是人为定的,输入层节点数太多会造成网络学习的次数较大,输入层节点数太少则不能反映后续值与前驱值的相关关系。经反复试验,最终确定输入层节点为3个,输出层节点数为1个,隐层节点数确定为3个。转移函数决定了神经元的连接方式,在神经网络中的作用非常重要。在BP网络中,涉及到的转移函数有很多种,如purelin、logsig、7tansig等。在预报为目的的BP模型中,转移函数常用的有:Sigmoid函数和线性函数(y=x),一般来说,转移函数的选择由研究问题的性质决定。Sigmoid函数中又分为tansig和logsig函数两种,其中tansig函数为双曲正切S型,形式为:2/(1exp(2))1fx;logsig函数为对数S型,形式为:1/(1exp())fx;后者趋势变化较前者平稳。另外,为缩短学习时间,BP网络学习算法采用了Levenberg-Marquardt数值优化法来实现。7.2程序仿真:对网络的训练参数设置如下:net.trainParam.show=20;%表示训练20次显示一次结果net.trainParam.epochs=1000;%训练次数设置net.trainParam.goal=0;%训练目标设置net.trainParam.lr=0.1;%学习率设置,应设置为较小值,太大虽然会在开始加快收敛速度,但在临近最佳点时,会产生动荡,而致使无法收敛80100200300400500600700800900100010-510-410-310-210-11001000EpochsTraining-BluePerformanceis2.97993e-005,Goalis0实验中,对98-00年的交通量进行了测试,发现得到的数据分别是558.1、695.6和506.9与实际值567、685和507进行比较发现误差还是很小的,这个网络基本还是能够满足要求的。最后,对01年的交通量进行了预测,用98-00这三年的交通量作为输入,可以得到预测的交通量结果为593.8。7.3结果分析:通过程序运行结果可以看出,预测精度基本达到要求,下面是基本思路及matlab的实现:1、设置一个误差项,为测试数据的网络仿真结果和实际结果偏差,并设置一个自己能接受的精度值;2、每次训练网络后,将这个误差和设置值比较,也可通过测试获得网络能给出的最高预测精度;93、得到满意训练网络后,保存BP结果,以便下次调用。4、该模型的构建是直接调用Matlab软件中的自带函数,所以实现和操作起来简单方便,非常有利于的学习掌握,有很大的实用价值。另一方面,该BP神经网络模型的学习能力很强,经过训练后,通过该模型学习训练时的各样本目标值与实际值误差很小,而且误差平方和很小,即MSE=8.9562e-005,可见由此预测的结果也较精确。证明了BP神经网络在交通运输量的预测中的应用是有效的。而且,就具体网络的训练过程而言,BP神经网络需要调整的参数比较少,因此可以更快地找到合适的预测网络,具有较大的计算优势。参考文献:[1]李驰宇,李远富,梁东.基于人工神经网络的交通运量预测[J].[2]闻新,周露,李翔,等.MATLAB神经网络仿真与应用[M].[3]李铁男,李凯昕.神经网络及其应用[J].[4]周开利,康耀红.神经网络及其MATLAB仿真程序设计[M].代码附录:clcclearp=[0.4930.3720.445;0.3720.4450.176;0.4450.1760.235;0.1760.2350.378;0.2350.3780.429;...100.3780.4290.561;0.4290.5610.651;0.5610.6510.467;0.6510.4670.527;0.4670.5270.668;...0.5270.6680.841;0.6680.8410.526;0.8410.5260.480;0.5260.4800.567;0.4800.5670.685]';%输入数据,共15组,每组三个输入t=[0.1760.2350.3780.4290.5610.6510.4670.5270.6680.8410.5260.4800.5670.6850.507];%输出数据,共15组,每组1个输出ptest=[0.8410.5260.480;0.5260.4800.567;0.4800.5670.685]';%用后三组数据作为检测样本predict=[0.5670.6850.507]';用来预测01年的交通量NodeNum1=3;%隐层神经元数NodeNum2=1;%输出层神经元数TF1='tansig';%隐层传输函数TF2='tansig';%输出层传输函数net=newff(minmax(p),[NodeNum1,NodeNum2],{TF1TF2},'trainlm');%创建三层BP网络net.trainParam.show=20;%表示训练20次显示一次结果net.trainParam.epochs=1000;%训练次数设置net.trainParam.goal=0;%训练目标设置net.trainParam.lr=0.1;%学习率设置,应设置为较小值,太大虽然会在开始加快收敛速度,但在临近最佳点时,会产生动荡,而致使无法收敛net=train(net,p,t);%开始训练,其中p、t分别为输入、输出向量a=sim(net,ptest);%测试98、99、00年的值b=sim(net,predict);%用来预测01年的交通量