首页 理论教育 精讲BP神经网络例程及网络训练与识别方法

精讲BP神经网络例程及网络训练与识别方法

时间:2023-06-20 理论教育 版权反馈
【摘要】:图5-24 创建一个BP网络这时,Network/Data管理窗口中就出现了三个新对象,如图5-25所示,分别是inputmodel输入样本、outputmode期望输出和net神经网络。图5-26所示即为网络结构,一个单隐含层的BP神经网络,隐含层含有20个神经元、7个输入量、3个输出量。goal为训练的误差限,也就是训练结果和期望结果之间的误差,选择0.00004,当误差小于0.00004时就停止训练。训练完成后,采用sim函数进行网络识别。

精讲BP神经网络例程及网络训练与识别方法

例程5-1:如何建立、训练并且仿真一个BP神经网络

方法1:通过MATLAB自带的GUI工具建立神经网络

这个例子中,使用MATLAB自带的神经网络GUI工具建立一个单隐含层的BP神经网络,其中隐含层包含20个神经元,输入变量7个,输出变量3个。

首先,启动GUI工具,在MATLAB工作区中输入:

978-7-111-42352-2-Chapter05-43.jpg

该命令将打开一个Network/Data管理窗口,界面如图5-21所示。

从图中可见,Network/Data管理窗口分为7个区域,下方有7个按钮。各个区域的作用如下。

(1)Input Data:用户指定输入样本。

(2)Target Data:用户指定期望目标响应。

(3)Input Delay States:设定输入延迟。

(4)Networks:神经网络。

(5)Output Data:仿真输出。

(6)Error Data:学习误差。

(7)Layer Delay States:网络各层的延迟状态。

978-7-111-42352-2-Chapter05-44.jpg

图5-21 Network/Data管理窗口

各个按钮作用如下。

(1)Import:从工作区或指定地址导入数据。

(2)New:新建网络或数据。

(3)Open:打开网络或数据,进而能够进行查看、编辑、训练、仿真等操作。

(4)Export:将数据导出到工作区或指定地址。

(5)Delete:删除所选项。

(6)Help:获取帮助。

(7)Close:关闭窗口。

由于训练数据是现成的,inputmodel将作为训练的输入,outputmodel则是期望响应,可直接从工作区中导入这两个数据。单击Import按钮后,在中间一栏选中inputmodel,在右边选中Input Data选项,如图5-22,将inputmodel作为输入样本。

978-7-111-42352-2-Chapter05-45.jpg

图5-22 导入输入样本

同样,如图5-23,将outputmodel导入,作为期望输出。

978-7-111-42352-2-Chapter05-46.jpg

图5-23 导入期望输出

之后,单击Network/Data管理窗口中的New按钮,创建一个神经网络。如图5-24所示,出现一个对话框,上面有两个选项卡,可以选择要创建网络还是数据,可根据自己的需求选择创建一个名叫net的BP神经网络,设定网络的层数、每层的神经元个数、每层的传递函数、训练算法、训练输入和期望输出等。单击下方的Create按钮,一个网络就创建好了。

978-7-111-42352-2-Chapter05-47.jpg

图5-24 创建一个BP网络

这时,Network/Data管理窗口中就出现了三个新对象,如图5-25所示,分别是inputmodel输入样本、outputmode期望输出和net神经网络。

978-7-111-42352-2-Chapter05-48.jpg

图5-25 创建完成的网络net

选中net,单击Open按钮,打开网络。图5-26所示即为网络结构,一个单隐含层的BP神经网络,隐含层含有20个神经元、7个输入量、3个输出量。

978-7-111-42352-2-Chapter05-49.jpg

图5-26 所建立的BP网络结构(www.xing528.com)

选中Train选项卡可以设置训练的输入输出,以及训练过程的各项参数。如图5-27和图5-28所示,当各项参数设置好后,单击下方的Train Network按钮即可训练。

978-7-111-42352-2-Chapter05-50.jpg

图5-27 设置训练输入和期望输出

978-7-111-42352-2-Chapter05-51.jpg

图5-28 设置训练的各项参数

训练结束后得到一个新的网络。新网络仍然存放在net中,选择Simulate选项卡,可以选择我们的测试数据。如图5-29所示,将inputmodeltest作为测试数据,单击Simulate Network按钮则开始仿真。网络训练的好坏就可通过仿真结果来判断。

978-7-111-42352-2-Chapter05-52.jpg

图5-29 设置仿真所用测试数据

方法2:使用函数建立、训练并仿真神经网络

使用函数来建立神经网络,这里使用newff函数来建立一个前馈网络,并存放到net这个结构中。在使用newff时,需要提供4个参数:

1)第一个参数是输入数据的范围,即训练输入中输入样本的最大值和最小值。通过minmax函数获得一个7×2的矩阵,“7”对应神经网络有7个输入,“2”存放该类输入的最大值和最小值。

2)第二个参数是神经网络的层数和每层的神经元的个数。由于神经网络输入层的神经元个数与输入一致,MATLAB中输入层就不算做一层,而从左到右依次写隐含层神经元个数和输出层神经元个数即可。这里建立的是一个单隐含层的网络,“20”表示隐含层含有20个神经元,“3”表示输出层有3个神经元。如果要建立包含N个隐含层的网络,则数组中元素个数为N+1个,每个元素的数值对应该层网络的神经元个数。

3)第三个参数用于设定每层所要用到的传递函数的类型,tansig为双曲正切S形函数,purelin为线性函数。

4)第四个函数为所要使用的训练函数,不同的函数训练速度不同,这里使用目前最快的收敛函数之一——Levenberg-Marquardt函数。

978-7-111-42352-2-Chapter05-53.jpg

当输入上面的这条语句后,BP网络就建立好了。建立好的网络并不能直接使用,需要先进行训练。但在训练之前,还应该给出训练的一些条件,具体的训练条件根据自己的使用需求来定,可以包括训练周期、训练步长、训练误差限等。

使用下面的三条语句设定训练的参数。

978-7-111-42352-2-Chapter05-54.jpg

➢epochs用于设定最大训练周期,此处由于要训练多个网络,设定为300,即如果训练误差限在不到300周期是就已达到指定值0.00004,则停止训练;而若到达300周期后还未达到指定误差,则在训练次数达到300次的时候,也停止网络的训练。

➢lr用于设定训练步长,也即每个训练周期中权重调整的大小,这里为0.1。

➢goal为训练的误差限,也就是训练结果和期望结果之间的误差,选择0.00004,当误差小于0.00004时就停止训练。

设置完成训练的参数以后,就可以对网络进行训练了。使用train函数对网络进行训练,该函数需要提供三个参数。第一个参数是刚才建立的网络,第二个参数是训练输入,第三个参数是期望输出。下面的语句中,我们对刚刚建立的net网络进行训练,所用的训练输入是inputmodel,期望输出是outputmodel,训练好的网络仍将会存放在net中。

978-7-111-42352-2-Chapter05-55.jpg

训练完成后,采用sim函数进行网络识别。将随机拍摄的测试输入inputmodeltest输入网络net中,得到的结果存放在an里面,an就是一个包含测试结果的矩阵。

978-7-111-42352-2-Chapter05-56.jpg

例程5-2:使用自适应分类器进行网络性能提升

上面的例子介绍了如何建立、训练并且仿真一个神经网络,所获得的网络即可以用来识别目标。下面介绍如何进一步提升网络性能。

首先,设置一个分布权值DD是一个掌管测试数据权重的因子,掌管数据的分布的权值,根据预测序列的权重ati)来调整下一轮训练样本的权重。

978-7-111-42352-2-Chapter05-57.jpg

然后,建立10个弱分类器,这里的一个弱分类器即为一个神经网络,具体程序如下所示。

978-7-111-42352-2-Chapter05-58.jpg

978-7-111-42352-2-Chapter05-59.jpg

接下来将得到的弱分类器组合成为一个强分类器,程序如下。

978-7-111-42352-2-Chapter05-60.jpg

得到强分类器和弱分类器之后,将它们的识别结果进行统计,程序如下。

978-7-111-42352-2-Chapter05-61.jpg

978-7-111-42352-2-Chapter05-62.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈