您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > BP神经网络的C++实现及其在故障诊断中的应用
UploadByYelkyQQ1216534370BP神经网络的C++实现及其在故障诊断中的应用王三明蒋军成(南京化工大学南京210009)摘要:采用面向对象的程序设计方法(OOP),利用C++构造实现了优化BP神经网络通用故障诊断程序,介绍了该程序构造的关键技术和重要诊断程序模块的设计;该程序具有良好操作性、扩展性和通用性,诊断实例表明此神经网络故障诊断模型的准确性。关键词:面向对象的程序设计BP神经网络故障诊断1.引言人工神经网络具有自组织、自适应和并行处理等特点以及很强的输入输出非线形映射能力和易于学习和训练的优点,已被广泛应用于多个领域。面向对象的程序设计(OOP)风格,具有良好的概括、分类和抽象能力,该方法已被广泛应用于程序设计语言、形式定义、操作系统、人工智能、实时系统、数据库等多种领域。现存多种类型的神经网络,在拓扑结构和神经元权值信息的整体表现形式上具有很大的共性,而采用OOP实现这些共性是非常有效的。本文采用OOP法,利用C++语言实现了BP神经网络通用程序,以促进神经网络的在故障诊断中的更好应用。2.OOP方法简介[3]OOP(Oject-OrientedProgramming)是模块设计的一种有效程序设计方法。OOP的包括几个重要概念:对象(object)它不仅代表了普遍使用的物体的直接抽象,而且对用户掩遮了实现的复杂性;类(class);继承(inheritance);多态性(polymorphism),在C++中主要体现在虚函数的应用上;类模板(template)在C++中允许单个的类处理通用的数据类型T。OOP中的类结构通过类接口和类实现分离开来支持信息隐藏,这种分离允许类接口映射到多种不同实现,对用户掩蔽了实现的复杂性。继承机制使对象具有很好的可扩展性,也易于实现软件的重用。这些特性都非常适合于神经网络的实现。3.BP故障诊断神经网络模型及其C++实现3.1BP故障诊断神经网络模型BP网络由多个网络层构成,其中包括一个输入层、一个或几个隐层、一个输出层,层与层之间采用全互连接,同层神经元之间不存在相互连接。BP网络的学习过程由前向传播和反向传播组成,在前向传播过程中,输入模式经输入层、隐层逐层处理,并传向输出层,如果在输出层不能得到期望的输出,则转入反向传播过程,将误差值沿连接通路逐层反向传送,并修正各UploadByYelkyQQ1216534370层连接权值。对于给定的一组训练模式,不断用一个训练模式训练网络,重复前向传播和误差反向传播过程,直至网络均方误差(Ep)小于给定值为止。前向传播的过程按(1)式进行,反向传播过程按(3)、(4)进行。节点输出:Oj=f(∑Wij×Xi-j)(1)Oj–节点输出;Xi–节点输入;Wij-节点连接权值;f-非线形作用函数;-神经单元阈值。权值修正:△Wij(n+1)=a×Ei×Oj+×△Wij(n)(2)a-学习因子(根据输出误差动态调整);-动量因子;Ei-计算误差。误差计算:Ep=1/2×∑(tpi-Opi)2(3)tpi-i节点的期望输出值;Opi-i节点计算输出值。3.2BP诊断网络模型的C++构造实现用C++实现BP网络诊断模型,包括两大模块,即网络模型数据结构模块和网络功能函数模块。(1)模型数据结构模块为了实现BP模型算法,并使程序结构清晰、易于阅读、扩展,采用了指针、数组及结构技术,定义了以下网络模型数据结构。Typedefstruct{intn_inputs,n_outputs;//n_inputs-输入层节点数;n_inputs-输出层节点数intn_nhlayers,*nunit[];//n_nhlayers-隐层数;*nunit[]-各隐层节点数floatrate,momentum;//rate-学习因子;momentum-动量因子float*weights[],*dweights[];//*weights[]-连接权值;*dweights[]-权值修正值floatinput[i][j];//input[i][j]-学习样本集floatouts_hlayer[],outs_olayer[i][j];//outs_hlayer[]-隐层输出;outs_olayer[i][j]-输出层输出}BP_network;(2)模型功能函数模块UploadByYelkyQQ1216534370该BP程序所包含的函数较多,下面简单介绍几个关键函数及其功能。Setup(intn_inputs,intn_outputs,intn_nhlayers,int*nunit,floatrate,floatmomentum)的功能:根据给定的模型参数,创建一个BP网络模型。有两种方法建立网络模型:由用户在程序界面输入模型的各个参数;由程序自动调用Read_network()函数可直接从一定格式的网络模型输入文件中一次性读入网络的拓扑结构及网络权值,自动完成神经网络模型的建立过程,从而对用户掩蔽了网络实现的复杂性。Initweight()的功能:初始化网络的连接权值:即0~1之间的random()。Feedforward()的功能:实现BP网络的前向传播过程。Feedback()的功能:实现网络的误差反向传播,同时修正网络的权值。Read_network()的功能:从一定格式的网络模型文件中直接读取网络拓扑结构及权值参数值,供Setup()自动建立BP网络模型。Read_example()的功能:从一定格式的诊断样本文件中一次性装载网络学习样本集,并传递给input[i][j]。Write_network()的功能:以一定格式记录保存学习后生成的网络模型,包括拓扑结构、权值、迭代次数、输出误差等值,以便Read_network()直接读取,使网络模型一旦建立,可重用。Write_example()的功能:当诊断输出结果较理想时,把诊断过的诊断样本和其结果增加到网络学习样本集中,使网络学习样本集随着网络学习的增加而不断壮大、充实。通用BP神经网络诊断程序的主流程见图1。UploadByYelkyQQ1216534370图1BP神经网络故障诊断模型程序图Fig1ProgramgraphoffaultdiagnosismodulewithBPnetwork4.故障诊断实例在诊断对象的结构和参数未知或部分未知时,神经网络被广泛地应用在故障诊断这样的智能应用领域。下面利用上述的BP神经网络诊断程序来对磨削烧伤进行故障诊断来加以说明BP神经网络在故障诊断中的应用可行性和准确性。表1列出了部分进行归一化处理后的5组磨削烧伤诊断的BP学习样本(共100个学习样本),每一个学习样本由6种征兆参数值组成,也就是每一个学习样本所对应的状态正常与否由这6个征兆的权重共同决定。表1磨削烧伤故障诊断网络学习样本Table1Learningexamplesoffaultdiagnosisforburnduringgrinding样本号征兆1征兆2征兆3征兆4征兆5征兆6状态UploadByYelkyQQ121653437010.88150.65210.89790.73600.25670.11250.99(正常)20.87590.57000.87150.67810.18540.09650.97(正常)30.81650.55890.89460.74550.15650.09000.98(正常)40.56060.04910.68300.53600.61010.49400.40(异常)50.84460.81280.66030.44130.99980.99890.41(异常)经过网络反复自学习后,当BP故障诊断神经网络模型参数为:n_inputs=6;n_outputs=1;隐层层数n_nhlayers=1;隐层节点数nunit=8;学习因子rate=0.3;动量因子momentum=0.1;预设误差error=0.001时,网络收敛速度最快:迭代2547次后,达到预设误差要求收敛。利用学习后建立的故障诊断网络模型来进行待诊断样本的诊断,将诊断后的结果与各个征兆的隶属度权重知识库进行贴近度比较,得出待诊样本1与学习样本2最接近,因此将其诊断为正常;而待诊样本2与学习样本5最接近,因此将其诊断为异常,诊断结果见表2。表2待诊断故障样本及其诊断结果Table2Examplestobediagnosedandresults待诊样本编号征兆1征兆2征兆3征兆4征兆5征兆6诊断结果10.75730.48100.89450.73720.40540.17930.9733(正常)20.84450.81280.66030.44140.99800.98890.4072(异常)5.总结本文采用C++构造实现了BP神经网络模型算法通用程序,该模型程序具有较好的移植性和通用性,对于开发其它神经网络程序具有一定的借鉴意义。故障诊断实例表明该BP故障诊断模型程序的可行性,并且收敛速度快、诊断正确。参考文献1.蒋军成,王省身.煤层自燃危险性预测的人工神经网络方法.中国矿业大学学报,1997,3:19-22.2.彭宁,蒋静坪.面向对象的神经网络程序设计及其在非线形动态系统辨识中的应用.科技通报,1999,15(3):193-1953.张庆年.前馈神经网络的特性分析与应用.武汉交通科技大学学报,1999,23(4):372-374RealizationofBPNetworkwithC++andItsApplicationinFaultDiagnosisUploadByYelkyQQ1216534370WangSanmingJiangJuncheng(CollegeofMechanicEngineering,NanjingUniversityofTechnology,Nanjing,210009)AbstractAuniversalBPprogramhasbeendesignedwithC++bythewayofOOP(Object-OrientedProgramming).Thekeytechniqueandimportantfunctionmodulesdesignoftheprogramhavebeenintroduced.ThentheBPprogramisusedinfaultdiagnosis.ThediagnosismodulewithBPisprovided.AexampleoffaultdiagnosisusingtheBPprogramhasbeengiven.ThediagnosingresultsshowtheBPprogramhasfriendlyinterface,goodpropertyofexpansionandnicety.KeywordsObject-orientedProgrammingBPNetworkFaultDiagnosis
本文标题:BP神经网络的C++实现及其在故障诊断中的应用
链接地址:https://www.777doc.com/doc-4224266 .html