BP神经网络的原理的BP什么意思
人工神经网络有很多模型,但是日前应用最广、基本思想最直观、最容易被理解的是多层前馈神经网络及误差逆传播学习算法(ErrorBack-Prooaeation),简称为BP网络。
在1986年以Rumelhart和McCelland为首的科学家出版的《ParallelDistributedProcessing》一书中,完整地提出了误差逆传播学习算法,并被广泛接受。
多层感知网络是一种具有三层或三层以上的阶层型神经网络。
典型的多层感知网络是三层、前馈的阶层网络(图4.1),即:输入层、隐含层(也称中间层)、输出层,具体如下:图4.1三层BP网络结构(1)输入层输入层是网络与外部交互的接口。
一般输入层只是输入矢量的存储层,它并不对输入矢量作任何加工和处理。输入层的神经元数目可以根据需要求解的问题和数据表示的方式来确定。
一般而言,如果输入矢量为图像,则输入层的神经元数目可以为图像的像素数,也可以是经过处理后的图像特征数。
(2)隐含层1989年,RobertHechtNielsno证明了对于任何在闭区间内的一个连续函数都可以用一个隐层的BP网络来逼近,因而一个三层的BP网络可以完成任意的n维到m维的映射。
增加隐含层数虽然可以更进一步的降低误差、提高精度,但是也使网络复杂化,从而增加了网络权值的训练时间。
误差精度的提高也可以通过增加隐含层中的神经元数目来实现,其训练效果也比增加隐含层数更容易观察和调整,所以一般情况应优先考虑增加隐含层的神经元个数,再根据具体情况选择合适的隐含层数。
(3)输出层输出层输出网络训练的结果矢量,输出矢量的维数应根据具体的应用要求来设计,在设计时,应尽可能减少系统的规模,使系统的复杂性减少。
如果网络用作识别器,则识别的类别神经元接近1,而其它神经元输出接近0。
以上三层网络的相邻层之间的各神经元实现全连接,即下一层的每一个神经元与上一层的每个神经元都实现全连接,而且每层各神经元之间无连接,连接强度构成网络的权值矩阵W。
BP网络是以一种有教师示教的方式进行学习的。首先由教师对每一种输入模式设定一个期望输出值。然后对网络输入实际的学习记忆模式,并由输入层经中间层向输出层传播(称为“模式顺传播”)。
实际输出与期望输出的差即是误差。按照误差平方最小这一规则,由输出层往中间层逐层修正连接权值,此过程称为“误差逆传播”(陈正昌,2005)。
所以误差逆传播神经网络也简称BP(BackPropagation)网。随着“模式顺传播”和“误差逆传播”过程的交替反复进行。
网络的实际输出逐渐向各自所对应的期望输出逼近,网络对输入模式的响应的正确率也不断上升。通过此学习过程,确定下各层间的连接权值后。
典型三层BP神经网络学习及程序运行过程如下(标志渊,2006):(1)首先,对各符号的形式及意义进行说明:网络输入向量Pk=(a1,a2,...,an);网络目标向量Tk=(y1,y2,...,yn);中间层单元输入向量Sk=(s1,s2,...,sp),输出向量Bk=(b1,b2,...,bp);输出层单元输入向量Lk=(l1,l2,...,lq),输出向量Ck=(c1,c2,...,cq);输入层至中间层的连接权wij,i=1,2,...,n,j=1,2,...p;中间层至输出层的连接权vjt,j=1,2,...,p,t=1,2,...,p;中间层各单元的输出阈值θj,j=1,2,...,p;输出层各单元的输出阈值γj,j=1,2,...,p;参数k=1,2,...,m。
(2)初始化。给每个连接权值wij、vjt、阈值θj与γj赋予区间(-1,1)内的随机值。(3)随机选取一组输入和目标样本提供给网络。
(4)用输入样本、连接权wij和阈值θj计算中间层各单元的输入sj,然后用sj通过传递函数计算中间层各单元的输出bj。
基坑降水工程的环境效应与评价方法bj=f(sj)j=1,2,...,p(4.5)(5)利用中间层的输出bj、连接权vjt和阈值γt计算输出层各单元的输出Lt,然后通过传递函数计算输出层各单元的响应Ct。
基坑降水工程的环境效应与评价方法Ct=f(Lt)t=1,2,...,q(4.7)(6)利用网络目标向量,网络的实际输出Ct,计算输出层的各单元一般化误差。
基坑降水工程的环境效应与评价方法(7)利用连接权vjt、输出层的一般化误差dt和中间层的输出bj计算中间层各单元的一般化误差。
基坑降水工程的环境效应与评价方法(8)利用输出层各单元的一般化误差与中间层各单元的输出bj来修正连接权vjt和阈值γt。
基坑降水工程的环境效应与评价方法(9)利用中间层各单元的一般化误差,输入层各单元的输入Pk=(a1,a2,...,an)来修正连接权wij和阈值θj。
基坑降水工程的环境效应与评价方法(10)随机选取下一个学习样本向量提供给网络,返回到步骤(3),直到m个训练样本训练完毕。
(11)重新从m个学习样本中随机选取一组输入和目标样本,返回步骤(3),直到网路全局误差E小于预先设定的一个极小值,即网络收敛。如果学习次数大于预先设定的值,网络就无法收敛。(12)学习结束。
可以看出,在以上学习步骤中,(8)、(9)步为网络误差的“逆传播过程”,(10)、(11)步则用于完成训练和收敛过程。通常,经过训练的网络还应该进行性能测试。
测试的方法就是选择测试样本向量,将其提供给网络,检验网络对其分类的正确性。测试样本向量中应该包含今后网络应用过程中可能遇到的主要典型模式(宋大奇,2006)。
这些样本可以直接测取得到,也可以通过仿真得到,在样本数据较少或者较难得到时,也可以通过对学习样本加上适当的噪声或按照一定规则插值得到。
为了更好地验证网络的泛化能力,一个良好的测试样本集中不应该包含和学习样本完全相同的模式(董军,2007)。
谷歌人工智能写作项目:小发猫
如何通过人工神经网络实现图像识别
人工神经网络(ArtificialNeuralNetworks)(简称ANN)系统从20世纪40年代末诞生至今仅短短半个多世纪,但由于他具有信息的分布存储、并行处理以及自学习能力等优点,已经在信息处理、模式识别、智能控制及系统建模等领域得到越来越广泛的应用。
尤其是基于误差反向传播(ErrorBackPropagation)算法的多层前馈网络(Multiple-LayerFeedforwardNetwork)(简称BP网络),可以以任意精度逼近任意的连续函数,所以广泛应用于非线性建模、函数逼近、模式分类等方面。
目标识别是模式识别领域的一项传统的课题,这是因为目标识别不是一个孤立的问题,而是模式识别领域中大多数课题都会遇到的基本问题,并且在不同的课题中,由于具体的条件不同,解决的方法也不尽相同,因而目标识别的研究仍具有理论和实践意义。
这里讨论的是将要识别的目标物体用成像头(红外或可见光等)摄入后形成的图像信号序列送入计算机,用神经网络识别图像的问题。
一、BP神经网络BP网络是采用Widrow-Hoff学习算法和非线性可微转移函数的多层网络。一个典型的BP网络采用的是梯度下降算法,也就是Widrow-Hoff算法所规定的。
backpropagation就是指的为非线性多层网络计算梯度的方法。一个典型的BP网络结构如图所示。我们将它用向量图表示如下图所示。
其中:对于第k个模式对,输出层单元的j的加权输入为该单元的实际输出为而隐含层单元i的加权输入为该单元的实际输出为函数f为可微分递减函数其算法描述如下:(1)初始化网络及学习参数,如设置网络初始权矩阵、学习因子等。
(2)提供训练模式,训练网络,直到满足学习要求。(3)前向传播过程:对给定训练模式输入,计算网络的输出模式,并与期望模式比较,若有误差,则执行(4);否则,返回(2)。
(4)后向传播过程:a.计算同一层单元的误差;b.修正权值和阈值;c.返回(2)二、BP网络隐层个数的选择对于含有一个隐层的三层BP网络可以实现输入到输出的任何非线性映射。
增加网络隐层数可以降低误差,提高精度,但同时也使网络复杂化,增加网络的训练时间。误差精度的提高也可以通过增加隐层结点数来实现。一般情况下,应优先考虑增加隐含层的结点数。
三、隐含层神经元个数的选择当用神经网络实现网络映射时,隐含层神经元个数直接影响着神经网络的学习能力和归纳能力。
隐含层神经元数目较少时,网络每次学习的时间较短,但有可能因为学习不足导致网络无法记住全部学习内容;隐含层神经元数目较大时,学习能力增强,网络每次学习的时间较长,网络的存储容量随之变大,导致网络对未知输入的归纳能力下降,因为对隐含层神经元个数的选择尚无理论上的指导,一般凭经验确定。
四、神经网络图像识别系统人工神经网络方法实现模式识别,可处理一些环境信息十分复杂,背景知识不清楚,推理规则不明确的问题,允许样品有较大的缺损、畸变,神经网络方法的缺点是其模型在不断丰富完善中,目前能识别的模式类还不够多,神经网络方法允许样品有较大的缺损和畸变,其运行速度快,自适应性能好,具有较高的分辨率。
神经网络的图像识别系统是神经网络模式识别系统的一种,原理是一致的。一般神经网络图像识别系统由预处理,特征提取和神经网络分类器组成。预处理就是将原始数据中的无用信息删除,平滑,二值化和进行幅度归一化等。
神经网络图像识别系统中的特征提取部分不一定存在,这样就分为两大类:①有特征提取部分的:这一类系统实际上是传统方法与神经网络方法技术的结合,这种方法可以充分利用人的经验来获取模式特征以及神经网络分类能力来识别目标图像。
特征提取必须能反应整个图像的特征。但它的抗干扰能力不如第2类。
②无特征提取部分的:省去特征抽取,整副图像直接作为神经网络的输入,这种方式下,系统的神经网络结构的复杂度大大增加了,输入模式维数的增加导致了网络规模的庞大。
此外,神经网络结构需要完全自己消除模式变形的影响。但是网络的抗干扰性能好,识别率高。当BP网用于分类时,首先要选择各类的样本进行训练,每类样本的个数要近似相等。
其原因在于一方面防止训练后网络对样本多的类别响应过于敏感,而对样本数少的类别不敏感。另一方面可以大幅度提高训练速度,避免网络陷入局部最小点。
由于BP网络不具有不变识别的能力,所以要使网络对模式的平移、旋转、伸缩具有不变性,要尽可能选择各种可能情况的样本。
例如要选择不同姿态、不同方位、不同角度、不同背景等有代表性的样本,这样可以保证网络有较高的识别率。
构造神经网络分类器首先要选择适当的网络结构:神经网络分类器的输入就是图像的特征向量;神经网络分类器的输出节点应该是类别数。隐层数要选好,每层神经元数要合适,目前有很多采用一层隐层的网络结构。
然后要选择适当的学习算法,这样才会有很好的识别效果。
在学习阶段应该用大量的样本进行训练学习,通过样本的大量学习对神经网络的各层网络的连接权值进行修正,使其对样本有正确的识别结果,这就像人记数字一样,网络中的神经元就像是人脑细胞,权值的改变就像是人脑细胞的相互作用的改变,神经网络在样本学习中就像人记数字一样,学习样本时的网络权值调整就相当于人记住各个数字的形象,网络权值就是网络记住的内容,网络学习阶段就像人由不认识数字到认识数字反复学习过程是一样的。
神经网络是按整个特征向量的整体来记忆图像的,只要大多数特征符合曾学习过的样本就可识别为同一类别,所以当样本存在较大噪声时神经网络分类器仍可正确识别。
在图像识别阶段,只要将图像的点阵向量作为神经网络分类器的输入,经过网络的计算,分类器的输出就是识别结果。五、仿真实验1、实验对象本实验用MATLAB完成了对神经网络的训练和图像识别模拟。
从实验数据库中选择0~9这十个数字的BMP格式的目标图像。图像大小为16×8像素,每个目标图像分别加10%、20%、30%、40%、50%大小的随机噪声,共产生60个图像样本。
将样本分为两个部分,一部分用于训练,另一部分用于测试。实验中用于训练的样本为40个,用于测试的样本为20个。随机噪声调用函数randn(m,n)产生。
2、网络结构本试验采用三层的BP网络,输入层神经元个数等于样本图像的象素个数16×8个。隐含层选24个神经元,这是在试验中试出的较理想的隐层结点数。
输出层神经元个数就是要识别的模式数目,此例中有10个模式,所以输出层神经元选择10个,10个神经元与10个模式一一对应。
3、基于MATLAB语言的网络训练与仿真建立并初始化网络% ================S1 = 24;% 隐层神经元数目S1 选为24[R,Q] = size(numdata);[S2,Q] = size(targets);F = numdata;P=double(F);net = newff(minmax(P),[S1 S2],{'logsig''logsig'},'traingda','learngdm')这里numdata为训练样本矩阵,大小为128×40,targets为对应的目标输出矩阵,大小为10×40。
newff(PR,[S1S2…SN],{TF1TF2…TFN},BTF,BLF,PF)为MATLAB函数库中建立一个N层前向BP网络的函数,函数的自变量PR表示网络输入矢量取值范围的矩阵[Pminmax];S1~SN为各层神经元的个数;TF1~TFN用于指定各层神经元的传递函数;BTF用于指定网络的训练函数;BLF用于指定权值和阀值的学习函数;PF用于指定网络的性能函数,缺省值为‘mse’。
设置训练参数net.performFcn = 'sse'; %平方和误差性能函数 = 0.1; %平方和误差目标 = 20; %进程显示频率net.trainParam.epochs = 5000;%最大训练步数 = 0.95; %动量常数网络训练net=init(net);%初始化网络[net,tr] = train(net,P,T);%网络训练对训练好的网络进行仿真D=sim(net,P);A = sim(net,B);B为测试样本向量集,128×20的点阵。
D为网络对训练样本的识别结果,A为测试样本的网络识别结果。实验结果表明:网络对训练样本和对测试样本的识别率均为100%。如图为64579五个数字添加50%随机噪声后网络的识别结果。
六、总结从上述的试验中已经可以看出,采用神经网络识别是切实可行的,给出的例子只是简单的数字识别实验,要想在网络模式下识别复杂的目标图像则需要降低网络规模,增加识别能力,原理是一样的。
什么是BP神经网络?
。
BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。
经反复学习,最终使误差减小到可接受的范围。具体步骤如下:1、从训练集中取出某一样本,把信息输入网络中。2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。
3、计算网络实际输出与期望输出的误差。4、将误差逐层反向回传至之前各层,并按一定原则将误差信号加载到连接权值上,使整个神经网络的连接权值向误差减小的方向转化。
5、対训练集中每一个输入—输出样本对重复以上步骤,直到整个训练样本集的误差减小到符合要求为止。
什么是模糊神经网络的分类器研究,它是否就是目标识别研究 30
分类和目标识别,还是有一些区别的。分类强调的将一组相似的样本划为一类,各类之间有明显的不同特征。
而目标识别可能是针对个体的,每个个体都有自己的特征,可以将每个样本分别识别出来,例如字符识别、车牌识别等,这些就是目标识别的例子。
模糊神经网络就是模糊理论同神经网络相结合的产物,它汇集了神经网络与模糊理论的优点,集学习、联想、识别、信息处理于一体。其比较适用于分类和识别,因为其模糊规则可以保证不受噪声干扰。
bp神经网络只有一类样本怎么分类
。
神经网络一列为一个样本,所以对于matlab而言,要求输入和输出的列数必须一样的经常有人问起的问题:Errorusing==>network/trainTargetsareincorrectlysizedfornetwork.Matrixmusthave1rows.解决:要求PT的列数一样,如果不一样P=p’t=t’转置一下2.归一澄清一个对归一的错误理解1样本矩阵为9行4列。
9组样本,4个变量。
现在归一化:x=[68.766.6561019.2;89.990.8450011.8;120.8120.6680020.6;16940.4616040.6;180.869.8733033.4;190.3130.2732031.6;109.8151.1575486.1;33.261.4825522.6;111.7126.6704013.6;]写法一:fori=1:9x1(i,:)=(x(i,:)-min(x(i,:)))/(max(x(i,:))-min(x(i,:)))end结果:0.00890.00851.000000.01740.01761.000000.01480.01481.000000.021001.00000.00000.02020.00501.000000.02180.01351.000000.00420.01151.000000.00130.00471.000000.01400.01611.00000写法二:x=x'fori=1:4x1(i,:)=(x(i,:)-min(x(i,:)))/(max(x(i,:))-min(x(i,:)))end结果:Columns1through80.22600.36090.55760.86440.93951.00000.487600.23670.45530.724500.26560.81121.00000.18970.295600.61250.44210.75370.75100.33401.00000.099600.11840.38760.29070.26651.00000.1454Column90.49970.77870.67640.0242注意:写法 2为正确的归一化对归一的错误理解2将数据集分为训练集和测试集,对训练集和测试集分别做归一处理所以就会有人问如果我的测试集只有一个数据如何归一呀最大最小值从那里找呀正确的理解是:训练集和测试集的归一标准是一样的建议:如果训练集和测试集是一起归一的可以自己编程实现归一如果是训练集和测试集是分开的,最好是使用matlab自带的premnmx、postmnmx、tramnmx函数如果是自己编程的话,请注意训练集和测试集的归一标准需要一样premnmx、postmnmx、tramnmx函数的使用例子如下:ExampleHereisthecodetonormalizeagivendatasetsothattheinputsandtargetswillfallintherange[-1,1],usingPREMNMX,andthecodetotrainanetworkwiththenormalizeddata.p=[-10-7.5-5-2.502.557.510];t=[07.07-10-7.0707.07107.070];[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);net=newff(minmax(pn),[51],{'tansig''purelin'},'trainlm');net=train(net,pn,tn);Ifwethenreceivenewinputstoapplytothetrainednetwork,wewilluseTRAMNMXtotransformthemfirst.Thenthetransformedinputscanbeusedtosimulatethepreviouslytrainednetwork.ThenetworkoutputmustalsobeunnormalizedusingPOSTMNMX.p2=[4-7];[p2n]=tramnmx(p2,minp,maxp);an=sim(net,pn);[a]=postmnmx(an,mint,maxt);这个是归一到-1和1之间那我要归一到01之间怎么办有人说可以使用加绝对值就归一到01之间了我觉得加绝对值可能会有些问题比较好的方式是变换P在-11之间Pp=(p+1)/2就可以归一到01之间至于要归一到0.1-0.9之间选取合适的变换就可以做到了二、神经网络(BP)系列(2)(初学者系列)每次结果不一样解析这个系列主要针对使用matlab神经网络工具箱,对一些初学者容易理解错误的地方进行解析。
神经网络每次结果不同解析神经网络每次结果不同是因为初始化的权值和阈值是随机的因为每次的结果不一样,才有可能找到比较理想的结果啊找到比较好的结果后,用命令savefilenamenet;保存网络,可使预测的结果不会变化,调用时用命令loadfilenamenet;取p_test=[];t_test=[];t=sim(net,p_test);err=t_test-t;plot(p_test,err);选择误差小的保存网络savefilenamenet以后调用时loadfilenamenetp_test=[];t_test=[];t=sim(net,p_test);err=t_test-t;plot(p_test,err):因为每次初始化网络时都是随机的,而且训练终止时的误差也不完全相同,结果训练后的权植和阀也不完全相同(大致是一样的),所以每次训练后的结果也略有不同举个例子,这样初始化就能使网络的输出结果是一样的,另外也可以给网络特定的权值,一种方法是把预测结果后的效果比较好的权值做为初值p=[0.87260.94410;000.7093;0.73780.70930.3795;0.64160.37950.7031;10.70310.4241;0.77740.42410.9559;0.95590.50120.7052;...0.82090.70520.4983;0.60110.49831;]';t=[00.73780.641610.77740.50120.82090.60110.9350];rand('state',0);net=newff(minmax(p),[6,1],{'tansig','logsig'},'trainlm');net.trainParam.epochs=2000;=0.001;net=train(net,p,t);y=sim(net,p);error=y-t;res=norm(error);p_test=[0.935010.6236;]';t_test=[0.8027]a=sim(net,p_test)rand('state',0);这个的作用是每次初始化一样0是种子数,如果换成其他数,就可以产生不同的随机值注:rand('state',0);的使用有点为结果相同而相同,至于这样的结果网络性能是否达到好的要求则没有考虑,建议还是不要用这种方法使每次结果相同用保存网络的方法吧消除初值影响可以考虑的另一个方法是简单集成神经网络原理由于选择不同的权值所得结果不同,使最终神经网络泛化能力体现出一定的随机性。
利用这个特性也可以改善神经网络的泛化能力,神经网络集成便是利用这种思路的体现,即先训练一组只有初始权值不同的子网,然后通过各子网“表决(Voting)”的形式(如加权和)得到学习系统的输出。
当神经网络集成用于分类器时,集成的输出通常由个体网络的输出投票产生。通常利用绝对多数投票法(某分类成为最终结果当且仅当输出结果为该分类的神经网络的数目最多)。理论分析和大量实验表明,后者优于前者。
因此,在对分类器进行集成时,目前大多采用相对多数投票法。当神经网络集成用于回归估计时,集成的输出通常由各网络的输出通过简单平均或加权平均产生。
Perrone等人认为,采用加权平均可以得到比简单平均更好的泛化能力。
三、神经网络(BP)系列(3)(初学者请看)分类实例分类实例输入输出设计:对某一问题分析,影响网络性能的输入主要有5个指标,输出则分为8类。8类的话可以用三位二进制表示。
000001010011100101110111神经网络的输入为5维的向量,输出为三维的向量。
输入的数据具有不同的单位和量级,所以在输入在输入神经网络之前应该首先进行归一化处理,将样本数据归一到01之间。
样本总共有328组数据将样本集分为训练集和测试集随机抽取70取做为测试测试集其余的作为训练集网络设计采用tansig(x)和logsig(x)函数作为传输函数,tansig(x)如下式:tansig=2/(1+exp(-2x))-1logsig(x)如下式:logsig(x)=1/(1+exp(-n))对于有限个输入到输出的映射,并不需要无限个隐层节点,这就涉及到如何选择隐层节点数的问题,而这一问题的复杂性,使得至今为止尚未找到一个很好的解析式,隐层节点数往往根据前人设计所得的经验和自己进行试验来确定。
设计网络时我采用的方法是通过神经网络训练来确定隐含层的个数,首先确定隐含层中节点数目的范围,设计一个隐含层神经元数目可变的BP网络,通过误差对比,确定最佳的隐含层神经元的个数。
最后确定的隐含层的个数为12。所以网络结构为5-12-3的三层结构。
load('');p=CC1(:,[1,3:6])';T=[000;111;110;101;100;011;010;001];t=repmat(T,41,1)';pp=p;%%%%%%归一到01之间fori=1:5p(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));endAllSamNum=328;%总样本数TrainSamNum=258;%训练样本数TestSamNum=AllSamNum-TrainSamNum;%测试样本数PerPos=randperm(AllSamNum);TrainDataIn=p(:,1:TrainSamNum)TrainDataOut=t(:,1:TrainSamNum)TestDataIn=p(:,PerPos(:,TrainSamNum+1:TrainSamNum+TestSamNum))TestDataOut=t(:,PerPos(:,TrainSamNum+1:TrainSamNum+TestSamNum))MaxMin=[01;01;01;01;01];net=newff(MaxMin,[12,3],{'tansig','logsig'},'trainlm');%训练参数设置net.trainParam.epochs=1000;%训练次数=0.0001;%训练结束的目标=0.1;%学习率=20;net=train(net,TrainDataIn,TrainDataOut);out=sim(net,TestDataIn)训练结果:TRAINLM,Epoch0/1000,MSE0.296308/0.0001,Gradient83.9307/1e-010TRAINLM,Epoch20/1000,MSE0.0224641/0.0001,Gradient6.7605/1e-010TRAINLM,Epoch40/1000,MSE0.00563627/0.0001,Gradient3.27027/1e-010TRAINLM,Epoch60/1000,MSE0.00348587/0.0001,Gradient1.49868/1e-010TRAINLM,Epoch80/1000,MSE0.00247714/0.0001,Gradient0.459233/1e-010TRAINLM,Epoch100/1000,MSE0.0018843/0.0001,Gradient0.289155/1e-010TRAINLM,Epoch120/1000,MSE0.00148204/0.0001,Gradient0.392871/1e-010TRAINLM,Epoch140/1000,MSE0.00119585/0.0001,Gradient0.340864/1e-010TRAINLM,Epoch160/1000,MSE0.000980448/0.0001,Gradient0.391987/1e-010TRAINLM,Epoch180/1000,MSE0.000779059/0.0001,Gradient0.389835/1e-010TRAINLM,Epoch200/1000,MSE0.000606974/0.0001,Gradient0.310202/1e-010TRAINLM,Epoch220/1000,MSE0.000388926/0.0001,Gradient0.331632/1e-010TRAINLM,Epoch240/1000,MSE0.000143563/0.0001,Gradient0.0403953/1e-010TRAINLM,Epoch248/1000,MSE9.87756e-005/0.0001,Gradient0.174263/1e-010TRAINLM,Performancegoalmet.训练好的权值、阈值的输出方法是:输入到隐层权值:{1,1}隐层阈值:theta1=net.b{1}隐层到输出层权值:{2,1};输出层阈值:theta2=net.b{2}>>{1,1}w1=1.7663-2.8022-0.7142-2.1099-2.40113.6614-2.5297-4.42955.05088.18994.40077.6775-6.02826.15671.87754.5009-9.99155.97375.02343.39310.2703-2.88500.4482-2.91531.36482.37693.31510.87453.19001.2608-2.2815-6.68471.87382.4093-2.9033-5.33326.1506-8.4386-6.79793.1428-0.0135-10.8942-9.63337.231112.06932.31305.22110.01552.94310.3135-6.4017-0.89870.19763.25270.1444-3.6517-1.63393.55052.48131.7880>>theta1=net.b{1}theta1=0.5955-5.4876-9.8986-4.47313.6523-4.03715.61875.74260.9147-8.5523-2.3632-5.6106>>{2,1}w2=Columns1through8-0.2751-3.5658-2.3689-6.4192-1.12091.5711-1.76157.6202-1.2874-9.1588-14.45337.50643.70740.90198.7033-5.00313.3536-0.88447.88870.93360.8410-2.49051.0627-9.3513Columns9through12-2.5894-1.9950-3.0132-4.700913.3490-9.8521-4.6680-4.2037-5.92512.9388-1.6797-2.1077>>theta2=net.b{2}theta2=-2.47620.56920.6694输出:out=Columns1through81.00001.00000.00200.00001.00001.00000.00000.00001.00000.00000.00411.00001.00001.00001.00001.00000.99910.00000.00360.00150.99920.99850.00550.0036Columns9through161.00000.00000.00191.00000.00000.00000.00000.99961.00001.00000.99011.00001.00001.00001.00000.00000.99770.99990.99960.99940.00460.00230.00141.0000Columns17through240.00200.99250.00200.00000.00201.00000.00021.00000.00410.02840.00410.02840.00411.00000.99831.00000.00360.99550.00361.00000.00360.99890.99990.9990Columns25through321.00000.99381.00000.00001.00000.99990.00001.00001.00000.01770.00000.00211.00000.00061.00001.00000.00000.99710.00001.00000.00000.00040.99990.0000Columns33through400.99541.00000.00000.00000.99510.00200.00000.99970.00651.00001.00000.00250.01780.00411.00000.00000.99860.99900.99991.00000.01010.00360.00131.0000Columns41through480.00001.00000.99830.00000.00201.00000.00000.98730.00201.00000.00000.00370.00411.00000.03280.06371.00000.00000.99991.00000.00360.99821.00000.9884Columns49through560.00000.00011.00001.00001.00000.00000.00041.00000.01640.99920.99821.00001.00001.00000.99650.99981.00000.99990.99480.99910.99890.00240.99980.9968Columns57through641.00001.00000.00000.00200.00200.00010.00010.00000.97631.00000.01340.00410.00410.99900.03950.00170.02020.99881.00000.00360.00360.99990.99991.0000Columns65through700.99930.00000.00000.99781.00001.00000.00000.00180.01100.00011.00000.99981.00001.00001.00000.99990.99870.0007每次结果因为初始化不同会不一样,可以选取一个性能比较好的网络保持起来savemyBpNetnetsaveTestDataInTestDataOut测试数据也保存起来(TestDataInTestDataOut为测试数据的输入向量和目标向量)以后调用时loadloadmyBpNetnetout=sim(net,TestDataIn)基本框架程序:(前面的样本数据自己根据实际情况设计)load('');p=CC1(:,[1,3:6])';T=[000;111;110;101;100;011;010;001];t=repmat(T,41,1)';pp=p;%%%%%%归一到01之间fori=1:5p(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));endAllSamNum=328;%总样本数TrainSamNum=258;%训练样本数TestSamNum=AllSamNum-TrainSamNum;%测试样本数PerPos=randperm(AllSamNum);TrainDataIn=p(:,1:TrainSamNum)TrainDataOut=t(:,1:TrainSamNum)TestDataIn=p(:,PerPos(:,TrainSamNum+1:TrainSamNum+TestSamNum))TestDataOut=t(:,PerPos(:,TrainSamNum+1:TrainSamNum+TestSamNum))MaxMin=[01;01;01;01;01];net=newff(MaxMin,[12,3],{'tansig','logsig'},'trainlm');net.trainParam.epochs=1000;%训练次数=0.0001;%训练结束的目标=0.1;%学习率=20;net=train(net,TrainDataIn,TrainDataOut);out=sim(net,TestDataIn)。