神经网络作业基于BP网络的设备状态分类器设计及其泛化能力改进•本例的工程背景是某设备的减速箱,其目的是设计一个状态分类器,用于检测减速箱的当前状态。为简单起见,将减速箱的状态分为正常状态、轻微故障和严重故障状态等3种等级。•首先,需要获得网络的输入和目标样本。对减速箱运行状态进行检测,获得12组样本数据,有正常状态、轻微故障和严重故障状态数据,分别对应1、2、3。•接下来需要确定网络的结构。采用一个N*2N+1*M的3层BP网络作为状态分类器。其中,N为输入特征向量的分量数,M表示输出状态类别总数。本例中,N=8。为了简便起见,用(0,1)表示正常状态,(1,0)表示轻微故障状态,(1,1)表示严重故障。由此可得,该BP网络结构为:输入层有8个神经元,中间层有17个神经元,输出层有2个神经元。按照一般的设计方案,中间层神经元的传递函数为S型正切函数,输出层神经元的传递函数为S型对数函数。选择S型对数函数,是因为该函数为0-1函数,正好满足设备的状态分类器的输出要求。•令P表示网络的输入样本向量,T表示网络的目标向量。•P=[-1.7817-0.2786-0.2954-0.2394-0.1842-0.1572-0.1584-0.1998;•-1.8710-0.2957-0.3494-0.2904-0.1460-0.1387-0.1492-0.2228;•-1.8347-0.2817-0.3566-0.3476-0.1820-0.1435-0.1778-0.1849;•-1.8807-0.2467-0.2316-0.2419-0.1938-0.2103-0.2010-0.2533;•-1.4151-0.2282-0.2124-0.2147-0.1271-0.0680-0.0872-0.1684;•-1.2879-0.2252-0.2012-0.1298-0.0245-0.0390-0.0762-0.1672;•-1.5239-0.1979-0.1094-0.1402-0.0994-0.1394-0.1673-0.2810;•-1.6781-0.2047-0.1180-0.1532-0.1732-0.1716-0.1851-0.2006;•0.1605-0.0920-0.01600.12460.18020.20870.22340.1003;•0.20450.10780.22460.20310.24280.20500.07040.0403;•-1.0242-0.1461-0.1018-0.0778-0.0363-0.0476-0.0160-0.0253;•-0.7915-0.1018-0.0737-0.0945-0.09550.00440.04670.0719];•T=[01;01;01;01;10;10;10;10;11;11;11;11];•利用如下代码可以创建一个符合以上要求的BP网络。网络的训练函数为trainlm,该函数的运行速度较快,对于中大型网络比较合适。学习函数曲默认值learngdm,性能函数取默认值mse,其中函数minmax设定了输入向量元素的阈值范围。•P=P’;•T=T’;%取P和T的转置,保证输入样本和目标向量之间的列数相等。•net=newff(minmax(P),[17,2],{‘tansig’,’logsig’},’trainlm’)•创建前向BP网络newff函数的用法•net=newff(PR,[S1S2...SN],[TF1TF2...TFN],BTF,BLF,PF);•PR:由每组输入(共R组输入)元素的最大值和最小值组成的R*2维的矩阵;•Si:第i层长度,共N层•TFi:第i层的传递函数•BTF:BP网络的训练函数•BLF:权值和阈值的BP学习算法•PF:网路的性能函数•网络创建后,要经过训练,训练代码如下:•net.trainParam.epochs=50;%设定循环次数为50•net.trainParam.goal=0.0001;%训练误差为0.0001,其余训练参数为默认值•net=train(net,P,T);•训练结果为•TRAINLM,Epoch0/50,MSE0.450759/0.001,Gradient1.22897/1e-010•TRAINLM,Epoch20/50,MSE0.00014653/0.001,Gradient0.00276141/1e-010•TRAINLM,Performancegoalmet.•可见,经过20次训练后,网络误差达到设定的最小值•然后对网络进行测试,测试数据为:•测试程序:•P_test=[-1.4736-0.2845-0.0724-0.2108-0.1904-0.1467-0.1696-0.2001;•-1.6002-0.2011-0.1021-0.1394-0.1001-0.1572-0.1584-0.2790;•-1.0314-0.1521-0.1101-0.0801-0.0347-0.0482-0.0158-0.0301];•P_test=P_test’;•Y=sim(net,P_test)•运行结果:•ans=•1.00001.00000.9999•0.00560.00770.9607•这与实际情况相符,可以投入使用。•下面对网络的泛化能力进行测试和改进。神经网络的泛化能力或推广能力是衡量神经网络性能好坏的重要标志。由于人工神经网络的本质特征是实例学习,而通过有限的样本训练就企图使网络包打天下,是不可能的。长期以来,人们一直致力于调整神经网络的连接权值来提高其性能,缺少新思路。而通过输入的模糊化方法来提高泛化能力,是一个新的角度。•具体算法:•Step1划定训练集P1,测试集P2,相应目标集t1,t2。设定α的搜索•范围[a,b]和搜索步长δ;j=0;•Step2forr=a:δ:b•Step3j=j+1;α[j]=r;•Step4p1=α[j]·P1;p2=α[j]·P2;•Step5用p1,t1训练或生成新网络net;•Step6用p2对net仿真测试,结果为y2;•Step7比较y2和t2,计算误差E(j)=t2-y2;•Step8endfor;•Step9找出α[j]=1时的误差Eα=1;•Step10ifmin(E[j])Eα=1thenα0=α[j];•elseα0=1;endif;•Step11p0=α0·P1;•Step12用p0训练或生成目标网络NET;•Step13return。•此算法的思路是通过对样本的小范围的增减,来生成新的样本,用新样本来训练网络,并测试。选出是测试结果误差最小的一组样本来做为训练样本。本例中对样本进行逐次加减0.0001,生成10组样本(样本和训练过程见附录)。用10组样本分别来训练并测试神经网络,分别计算出误差,选测误差最小的来做为训练样本。•从表中可知,B3组样本的误差最小,用B3做为训练样本。这样就调高了网络的泛化能力。•参考文献:•(1)申慧,宋志飞,丁北.基于BP网络的设备状态分类器设计.科技信息.2011年25期.•(2)冯乃勤,王芳,邱玉辉.提高神经网络泛化能力的研究.计算机工程与应用.2006年4期.•(3)飞思科技产品研发中心.神经网络理论与MATLAB7实现.电子工业出版社.2005.