第一范文网 - 专业文章范例文档资料分享平台

MATLAB下BP神经网络设计

来源:用户分享 时间:2025/5/23 20:39:31 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

MATLAB下BP神经网络的设计开发

BP网络在神经网络工具箱中的仿真

本文利用Matlab6.5神经网络工具箱,以一组动态冲击实验数据为例建立网络模型。实验数据共有13组,将其中对曲线形状有关键性影响的10组数据作为网络的训练数据,另外3组作为测试数据用以验证网络的预测性能。

①BP网络的建立

在建立BP神经网络时,首先要根据应用的问题确定网络结构,即选择网络的层数和隐层节点数。由于本例中实验数据较少,采用最基本的两层网络就可以很好地逼近未知函数了。隐层节点数的选择在神经网络的应用中一直是一个复杂的问题:隐层节点数过多,将导致网络的预测能力不够,并容易导致网络陷入局部极小值难以跳出;隐层节点数过少,网络训练不出来,或不能识别以前没有的样本,且容错性差。在设计中,比较实际的做法是通过对不同神经元数的网络进行训练、对比,找出网络效果最好时的隐层节点数。在本例中,经大量的训练、对比,最终取中间隐层节点数为10。另一方面,BP隐层传递函数采用正切Sigmoid函数tansig,可以逼近任意非线性函数;输出层神经元则采用线性函数purelin,可以把输出值释放到任意值。至此,一个1-10-1的神经网络模型建立完毕。

②BP网络的训练

Matlab神经网络工具箱为用户提供了三种可用于BP网络的训练函数,它们是:trainbp、trainbpx和trainlm。它们用法类似,采用不同的学习规则。trainlm训练函数使用Levenberg-Marquardt算法,是三种规则中迭代次数最少、训练速度最快的一个,缺点是该算法在每次迭代时的计算量比其他算法大,故需要大量的存储空间,对于参数很大的应用是不实用的,考虑到待处理问题的参数较小,因此采用trainlm训练函数。目标误差设为0.01,最大训练步数设为10 000。设定好参数之后开始训练网络,训练结果显示:网络在训练了32次之后达到目标误差0.01,训练停止。

③BP网络的测试

由于初始值取随机值,每次训练得到的结果都不相同,经多次训练得到最好的结果,并记录下此时的权值和阈值。至此,可用固定的网络去进行其他非实验点的最大加速度—静应力值的预测。为了检验该网络是否具有较好的预测能力,将3组测试数据代入网络中进行预测,结果表明:预测数据和原始数据的平均相对误差为3.2726%,由此可以看出拟合结果是相当精确的。至此,利用BP网络成功建立了厚度为50mm、跌落高度为40cm的蜂窝纸板缓

冲特性模型。

本文利用BP网络在非线性建模方面的特殊优势,以厚度为50mm、跌落高度为40cm的蜂窝纸板为例,建立神经网络模型。经测试表明:该模型能以较高的精度对非实验点数据进行预测。但是,在建立模型的过程中也发现了一些问题,主要有两个方面:

一是样本数过少,很难精确反映出待建模型的特性,而且容易导致网络在学习过程中难以退出局部极小值。解决的办法是在实验部分增加实验点以增加训练样本数。

二是BP网络本身存在的一些问题,主要表现在收敛速度很慢,有时在局部极小值收敛,不能找到全局极小值。针对这样的情况,可以考虑采用其他算法如:模拟退火、遗传算法等,以保证网络能收敛到全局极小值。

1调试方法

1.1提供训练样本和权值、阈值的初始值

BP算法是有指导的训练,是靠调节各层的权值使网络学会训练样本所表达的规律。 训练样本由输入输出对{Pki:tkj}组成,而

i(i=1,2,…,n,)是输入层神经元的序号,n是输入层神经元数; j(j=1,2,…,m,)是输出层神经元的序号,m是输出层神经元数;

k(k=1,2,…,q,)是训练对的序号,显然,q的大小决定了训练样本的规模, Pki的输入方法是:先就某固定的k值,输入i的所有取值下的输入样本;再改变k值,输入i的所有取值下的输入样本;直到k=q,输入i的所有取值下的输入样本为至。tkj的输入方法与Pki相同。

需要注意的是:MATLAB下的神经网络工具箱不必专门指出输入层神经元和输出层神经元的多少,而是自动地从Pki和tkj中辨认,即会默认输入层神经元数为n,输出层神经元数为m。所以Pi和tj的给定就显得特别重要。

k

k

Wih是输入层至隐层的权值,h(h=1,2,…,s1,)是隐层神经元的序号,s1是隐层神经元数。它需要在程序中给出确定的初始值,其输入方法是:就某固定的i值,输入h的所有取值下的权值;Whj是隐层至输出层的权值,其输入方法是:就某固定的h值,输入j的所有取值下的权值,bh和bj分别是隐层、输出层神经元的阈值,它们需要在程序中给出确定的初始值。

1.2有关函数说明

用软件模拟BP网络时,需要用到的函数有:initff、trainbp、simuff、ploterr等,下面分别说明。

在设计BP网络时,只要已知输入向量p、各层的神经元数、各层神经元的传递函数,就可以利用函数initff对BP网络进行初始化。

例如,1个2层(不包括输入层)的BP网络,隐层有8个神经元,传递函数为tansig(正切S型函数),输出层神经元数由目标向量t决定,传递函数为purelin(纯线性函数),该BP网络的初始化语句为:

[w1,b1,w2,b2]=initff(p,8,′tansig′,t,′purelin′);

用户在准备数据样本时,向量p应该包含所有输入值中的最大值和最小值,这样才能保证得到最佳的初始值。

神经网络工具箱函数trainbp、trainbpx、trainlm,用来对BP网络进行训练,它们的用法是类似的,只是采用的学习规则有所不同。

1. trainbp利用标准BP学习规则训练前馈网络,使网络完成函数逼近、矢量分类和模式识别;

2. trainbpx采用了动量法和学习率自适应调整的策略,从而提高了学习速度并增加了算法的可靠性;

3. trainlm使用了Levenberg-Marquardt优化方法,学习时间更短,但对于复杂的问题,这种方法需要很大的存储空间。 下面程序表明了trainlm的调用方法: df=5;%训练过程显示频率 me=1000;%最大训练步数 eg=0.01;%误差指标 tp=[df me eg];

[w1,b1,w2,b2,ep,tr]=trainlm(w1,b1,′tansig′,w2,b2,′purelin′,p,t,tp);

经过训练得到了新的权值矩阵w1、w2,阈值矢量b1、b2,网络的实际训练次数ep及网络训练误差平方和行矢量tr。

前馈网络由一系列网络层组成,每一层都从前一层得到输入数据,simuff函数可用于仿真最多3层的前馈网络:

a=simuff(q,w1,b1,′tansig′,w2,b2,′purelin′) 上式q为输入数据,a为预测结果。

Ploterr(e,eg)用于绘制误差行矢量e随训练次数的变化图,同时以点线绘出误差指标eg,其纵轴为对数刻度,总的训练次数小于e的长度,e的第一个元素为网络训练前的误差。

1.3网络结构的确定

神经网络的结构设计是一个非常重要但却十分复杂的问题。网络的结构设计主要指对于给定的任务:

①如何选择网络层数?因为网络的输入和输出层易于确定,所以这一问题实际上就是隐层应该为几层;

②每层应选多少神经元;

③神经元的传递函数应如何选定。

所有这些都是使用神经网络时必须加以解决的问题。但目前对此并没有一个确切的答案,MATLAB下的神经网络工具箱也不例外。

综合以往的研究成果,可以得到BP网络结构的一些结论:

①对于3层(1个输入层、1个隐层和1个输出层)的BP网络,只要其隐层的神经元数可选,就可以任意精度逼近任何连续函数(Kolmogorov定理);

②随着所逼近函数的波动性增加,隐层的神经元数也应适当增加; ③随着学习样本数的增加,隐层神经元数也应增加;

④增加隐层数目可以减少各隐层的神经元数,减少陷入局部极小的机会;

⑤随着网络复杂程度和学习样本数的增加,其收敛速度变慢,所以网络的规模不应随意增大。

搜索更多关于: MATLAB下BP神经网络设计 的文档
MATLAB下BP神经网络设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c38va257k9u7wp9920sze_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top