您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > BP神经网络实验报告要交
BP神经网络在红酒分类中的应用信息学院研15谢青青1043115267摘要:葡萄酒化学成分复杂,葡萄酒的质量是各种化学成分的综合反映,通常检测的方法有感官评定和常规的理化指标检测,感官评定虽然在生产中也有较多的应用,但是评测周期长,影响因素多,主观性强,重复性差,且无法快速检测。使用BP神经网络对标准化且具有一致评判标准的数据进行训练,将来分类时仅仅使用理化指标进行评估,不带有人为主观因素。一、BP网络简介BP(BackPropagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hiddenlayer)和输出层(outputlayer)。下图就是一个简单的BP网络模型:BP神经网络的结构示意图二、BP神经元下图给出了第j个基本BP神经元(节点),它只模仿了生物神经元所具有的三个最基本也是最重要的功能:加权、求和与转移。其中x1、x2…xi…xn分别代表来自神经元1、2…i…n的输入;wj1、wj2…wji…wjn则分别表示神经元1、2…i…n与第j个神经元的连接强度,即权值;bj为阈值;f(·)为传递函数;yj为第j个神经元的输出[1]。第j个神经元的净输入值为:BP神经元其中:若视,,即令及包括及,则于是节点j的净输入可表示为:净输入通过传递函数(TransferFunction)f(·)后,便得到第j个神经元的输出:式中f(·)是单调上升函数,而且必须是有界函数,因为细胞传递的信号不可能无限增加,必有一最大值。三、建立BP神经网络BP网络的设计主要包括网络层数、输入层节点数、隐含层节点数、输出层节点数及传输函数、训练方法、训练参数的设置等几个方面。1、网络层数BP网络可以包含一或者多个隐含层,但是对于大部分应用场合,一个隐含层就可以满足需要,但如果样本较多,可以增加隐含层数来减小网络规模。2、输入层节点数输入层节点取决于输入向量的维数,应从实际数据中抽象出模型,形成输入和输出空间。则该实验中的输入向量为13*178维。3、隐含层节点数这里对于网络的影响最大,较多的隐含层节点数会带来更好的效果,但是会影响训练的时间。但是现在依然没有很好的公式来确定合理的神经元节点个数,这也是BP神经网络的一个瓶颈问题,目前也只是给出一个估计值。为了训练的效果更好,该实验中选择隐含层为10。4、输出层神经元个数该数值是由实际问题抽象出的模型决定的,比如最后结果是N种类别,则输出可以采用N个神经元,例如该实验中,最后结果是3类,那我们就用100、010、001来表示某样本输入哪个类别。5、传递函数一般隐含层使用sigmoid函数,而输出层使用线性函数四、BP神经网络的训练策略及结果本文借助于MATLAB神经网络工具箱来实现多层前馈BP网络(Multi-layerfeed-forwardbackpropagationnetwork)的颜色空间转换,免去了许多编写计算机程序的烦恼。神经网络的实际输出值与输入值以及各权值和阈值有关,为了使实际输出值与网络期望输出值相吻合,可用含有一定数量学习样本的样本集和相应期望输出值的集合来训练网络。1、确定BP网络的结构确定了网络层数、每层节点数、传递函数、初始权系数、学习算法等也就确定了BP网络。确定这些选项时有一定的指导原则,但更多的是靠经验和试凑。1)隐含层数的确定:1998年RobertHecht-Nielson证明了对任何在闭区间内的连续函数,都可以用一个隐含层的BP网络来逼近,因而一个三层的BP网络可以完成任意的n维到m维的映照。因此我们从含有一个隐层的网络开始进行训练。2)BP网络常用传递函数:BP网络常用的传递函数BP网络的传递函数有多种。Log-sigmoid型函数的输入值可取任意值,输出值在0和1之间;tan-sigmod型传递函数tansig的输入值可取任意值,输出值在-1到+1之间;线性传递函数purelin的输入与输出值可取任意值。BP网络通常有一个或多个隐含层,该层中的神经元均采用sigmoid型传递函数,输出层的神经元则采用线性传递函数,整个网络的输出可以取任意值。只改变传递函数而其余参数均固定,在训练BP网络时发现,传递函数使用tansig函数时要比logsig函数的误差小。于是在以后的训练中隐含层传递函数改用tansig函数,输出层传递函数仍选用purelin函数。3)每层节点数的确定:使用神经网络的目的是实现摄像机输出RGB颜色空间与CIE-XYZ色空间转换,因此BP网络的输入层和输出层的节点个数分别为3。下面主要介绍隐含层节点数量的确定。对于多层前馈网络来说,隐含层节点数的确定是成败的关键。若数量太少,则网络所能获取的用以解决问题的信息太少;若数量太多,不仅增加训练时间,更重要的是隐含层节点过多还可能出现所谓“过渡吻合”(Overfitting)问题,即测试误差增大导致泛化能力下降,因此合理选择隐含层节点数非常重要。关于隐含层数及其节点数的选择比较复杂,一般原则是:在能正确反映输入输出关系的基础上,应选用较少的隐含层节点数,以使网络结构尽量简单。本论文中采用网络结构增长型方法,即先设置较少的节点数,对网络进行训练,并测试学习误差,然后逐渐增加节点数,直到学习误差不再有明显减少为止。2、误差的选取在神经网络训练过程中选择均方误差MSE较为合理,原因如下:①标准BP算法中,误差定义为:每个样本作用时,都对权矩阵进行了一次修改。由于每次权矩阵的修改都没有考虑权值修改后其它样本作用的输出误差是否也减小,因此将导致迭代次数增加。②累计误差BP算法的全局误差定义为:这种算法是为了减小整个训练集的全局误差,而不针对某一特定样本,因此如果作某种修改能使全局误差减小,并不等于说每一个特定样本的误差也都能同时减小。它不能用来比较P和m不同的网络性能。因为对于同一网络来说,P越大,E也越大;P值相同,m越大E也越大。③均方误差MSE:其中:—输出节点的个数,—训练样本数目,—网络期望输出值,—网络实际输出值。均方误差克服了上述两种算法的缺点,所以选用均方误差算法较合理。3、训练结果训练一个单隐层的三层BP网络,根据如下经验公式选择隐层节点数[125]:式中:n为输入节点个数,m为输出节点个数,a为1到10之间的常数。针对本论文n1取值范围为3~13。训练结果如表1所示。表1隐含层节点数与误差的关系隐含层神经元个数训练误差测试误差31.256611.127540.7977460.823250.6318490.727860.5702140.670770.5528730.689580.4451180.657590.3855780.6497100.2596240.4555110.1857490.6644120.1838780.48130.1685870.6671由上表可以看出:①增加隐含层节点数可以减少训练误差,但超过10以后测试误差产生波动,即泛化能力发生变化。综合比较隐含层节点数为10与12的训练误差和测试误差,决定隐含层节点数选用12。②训练误差和测试误差都很大,而且收敛速度极慢,这个问题可以通过对输出量进行归一化来解决。根据Sigmoid型传递函数输入和输出的范围,对输入变量不进行归一化处理,只对输出变量进行归一化,这是因为在输出数据要求归一化的同时,对输入数据也进行归一化的话,权值的可解释性就更差了。目标值按下式进行变化:使目标值落在0.05~0.95之间,这样靠近数据变化区间端点的网络输出值就有一波动范围,网络的性能较好。用新生成的训练样本与测试样本对隐层节点数为12的网络进行训练,得到的训练误差为9.89028×10-5,测试误差为1.9899×10-4,达到了预定的目标。隐含层节点为12的神经网络训练结果归一化训练样本后隐含层节点为12的神经网络训练结果六、最终训练后的神经网络结构采用三层BP网络实现摄像机输出RGB颜色空间与CIEXYZ色空间转换,其中隐含层含有12个节点,传递函数采用tansig函数;输出层传递函数选用purelin函数。经过测试后结果满意,可以认为该神经网络可以用来实现这个关系映射。网络的结构如下图所示:三层BP网络结构得到的BP神经网络的权值和阈值为:六、总结1)定量地分析了用线性关系转换摄像机RGB空间到CIE-XYZ空间数据后产生的均方误差,表明CCD摄像机与标准观察者之间有比较明显的差别,也就是说RGB与CIE-XYZ间的转换是非线性的。2)采用MATLAB中神经网络工具箱实现多层前馈BP网络的RGB到CIEXYZ颜色空间转换,用经过归一化的训练样本与测试样本对隐含层节点数为12的三层网络进行训练,得到的训练误差为9.89028×10-5,测试误差为1.9899×10-4,结果表明经过训练的多层前馈BP网络可以满足RGB空间向CIEXYZ颜色空间转换要求,达到了预定目标。3)确定了用于RGB和XYZ颜色空间转换的BP网络结构,并求出了该神经网络的权值和阈值。使用该网络可以定量表达食品颜色,定量比较高压加工食品颜色的变化,可以使食品颜色测定和控制实现定量化,而不再是主观性很强的模糊描述。四、程序代码clearall;fid=fopen('wine_data.txt');%C=textscan(fid,'%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s%f%s','Delimiter');%fclose(fid);P=[C{2}C{4}C{6}C{8}C{10}C{12}C{14}C{16}C{18}C{20}C{22}C{24}C{26}];a=strncmpi(C{1},'a',1);b=strncmpi(C{1},'b',1);c=strncmpi(C{1},'c',1);M=double([abc]);P=P';M=M';P1=P(:,1:140);M1=M(:,1:140);P2=P(:,141:178);M2=M(:,141:178);net=newff(minmax(P1),minmax(M1),10);net.trainParam.show=50;net.trainParam.epochs=2000;net.trainParam.goal=1e-3;[net]=train(net,P1,M1);out=sim(net,P2);[y_out,I_out]=max(out);%I_out为输出out最大值所在的行号[y_t,I_t]=max(M2);diff=I_out-I_t;co=length(find(diff==0));%find方法返回满足条件的个数fprintf('PercentageCorrectclassification:%f%\n',co/38);plot(diff)
本文标题:BP神经网络实验报告要交
链接地址:https://www.777doc.com/doc-1563052 .html