导航:首页 > 编程大全 > bp神经网络动量因子程序

bp神经网络动量因子程序

发布时间:2023-03-30 17:43:21

1. BP神经网络原理

人工神经网络有很多模型,但是日前应用最广、基本思想最直观、最容易被理解的是多层前馈神经网络及误差逆传播学习算法(Error Back-Prooaeation),简称为BP网络。

在1986年以Rumelhart和McCelland为首的科学家出版的《Parallel Distributed Processing》一书中,完整地提出了误差逆传播学习算法,并被广泛接受。多层感知网络是一种具有三层或三层以上的阶层型神经网络。典型的多层感知网络是三层、前馈的阶层网络(图4.1),即:输入层、隐含层(也称中间层)、输出层,具体如下:

图4.1 三层BP网络结构

(1)输入层

输入层是网络与外部交互的接口。一般输入层只是输入矢量的存储层,它并不对输入矢量作任何加工和处理。输入层的神经元数目可以根据需要求解的问题和数据表示的方式来确定。一般而言,如果输入矢量为图像,则输入层的神经元数目可以为图像的像素数,也可以是经过处理后的图像特征数。

(2)隐含层

1989年,Robert Hecht Nielsno证明了对于任何在闭区间内的一个连续函数都可以用一个隐层的BP网络来逼近,因而一个三层的BP网络可以完成任意的n维到m维的映射。增加隐含层数虽然可以更进一步的降低误差、提高精度,但是也使网络复杂化,从而增加了网络权值的训练时间。误差精度的提高也可以通过增加隐含层中的神经元数目来实现,其训练效果也比增加隐含层数更容易观察和调整,所以一般情况应优先考虑增加隐含层的神经元个数,再根据具体情况选择合适的隐含层数。

(3)输出层

输出层输出网络训练的结果矢量,输出矢量的维数应根据具体的应用要求来设计,在设计时,应尽可能减少系统的规模,使系统的复杂性减少。如果网络用作识别器,则识别的类别神经元接近1,而其它神经元输出接近0。

以上三层网络的相邻层之间的各神经元实现全连接,即下一层的每一个神经元与上一层的每个神经元都实现全连接,而且每层各神经元之间无连接,连接强度构成网络的权值矩阵W。

BP网络是以一种有教师示教的方式进行学习的。首先由教师对每一种输入模式设定一个期望输出值。然后对网络输入实际的学习记忆模式,并由输入层经中间层向输出层传播(称为“模式顺传播”)。实际输出与期望输出的差即是误差。按照误差平方最小这一规则,由输出层往中间层逐层修正连接权值,此过程称为“误差逆传播”(陈正昌,2005)。所以误差逆传播神经网络也简称BP(Back Propagation)网。随着“模式顺传播”和“误差逆传播”过程的交替反复进行。网络的实际输出逐渐向各自所对应的期望输出逼近,网络对输入模式的响应的正确率也不断上升。通过此学习过程,确定下各层间的连接权值后。典型三层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)。

2. BP神经算法是什么能给点既通俗易懂又比较详细的回答吗

BP(Back Propagation)网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。

BP神经网络算法是在BP神经网络现有算法的基础上提出的,是通过任意选定一组权值,将给定的目标输出直接作为线性方程的代数和来建立线性方程组,解得待求权,不存在传统方法的局部极小及收敛速度慢的问题,且更易理解。
1 传统的BP算法简述
BP算法是一种有监督式的学习算法,其主要思想是:输入学习样本,使用反向传播算法对网络的权值和偏差进行反复的调整训练,使输出的向量与期望向量尽可能地接近,当网络输出层的误差平方和小于指定的误差时训练完成,保存网络的权值和偏差。具体步骤如下: (1)初始化,随机给定各连接权[w],[v]及阀值θi,rt。 (2)由给定的输入输出模式对计算隐层、输出层各单元输出 bj=f(■wijai-θj) ct=f(■vjtbj-rt) 式中:bj为隐层第j个神经元实际输出;ct为输出层第t个神经元的实际输出;wij为输入层至隐层的连接权;vjt为隐层至输出层的连接权。 dtk=(ytk-ct)ct(1-ct) ejk=[■dtvjt] bj(1-bj) 式中:dtk为输出层的校正误差;ejk为隐层的校正误差。 (3)计算新的连接权及阀值,计算公式如下: vjt(n+1)=vjt(n)+?琢dtkbj wij(n+1)=wij(n)+?茁ejkaik rt(n+1)=rt(n)+?琢dtk θj(n+1)=θj(n)+?茁ejk 式中:?琢,?茁为学习系数(0<?琢<1,0<?茁<1)。 (4)选取下一个输入模式对返回第2步反复训练直到网络设输出误差达到要求结束训练。 传统的BP算法,实质上是把一组样本输入/输出问题转化为一个非线性优化问题,并通过负梯度下降算法,利用迭代运算求解权值问题的一种学习方法,但其收敛速度慢且容易陷入局部极小,为此提出了一种新的算法,即高斯消元法。
2 改进的BP网络算法
2.1 改进算法概述 此前有人提出:任意选定一组自由权,通过对传递函数建立线性方程组,解得待求权。本文在此基础上将给定的目标输出直接作为线性方程等式代数和来建立线性方程组,不再通过对传递函数求逆来计算神经元的净输出,简化了运算步骤。没有采用误差反馈原理,因此用此法训练出来的神经网络结果与传统算法是等效的。其基本思想是:由所给的输入、输出模式对通过作用于神经网络来建立线性方程组,运用高斯消元法解线性方程组来求得未知权值,而未采用传统BP网络的非线性函数误差反馈寻优的思想。 2.2 改进算法的具体步骤 对给定的样本模式对,随机选定一组自由权,作为输出层和隐含层之间固定权值,通过传递函数计算隐层的实际输出,再将输出层与隐层间的权值作为待求量,直接将目标输出作为等式的右边建立方程组来求解。 现定义如下符号(见图1):x (p)输入层的输入矢量;y (p)输入层输入为x (p)时输出层的实际输出矢量;t (p)目标输出矢量;n,m,r分别为输入层、隐层和输出层神经元个数;W为隐层与输入层间的权矩阵;V为输出层与隐层间的权矩阵。具体步骤如下: (1)随机给定隐层和输入层间神经元的初始权值wij。 (2)由给定的样本输入xi(p)计算出隐层的实际输出aj(p)。为方便起见将图1网络中的阀值写入连接权中去,令:隐层阀值θj=wnj,x(n)=-1,则: aj(p)=f(■wijxi(p)) (j=1,2…m-1)。 (3)计算输出层与隐层间的权值vjr。以输出层的第r个神经元为对象,由给定的输出目标值tr(p)作为等式的多项式值建立方程,用线性方程组表示为: a0(1)v1r+a1(1)v2r+…+am(1)vmr=tr(1)a0(2)v1r+a1(2)v2r+…+am(2)vmr=tr(2) ……a0(p)v1r+a1(p)v2r+…+am(p)vmr=tr(p) 简写为: Av=T 为了使该方程组有唯一解,方程矩阵A为非奇异矩阵,其秩等于其增广矩阵的秩,即:r(A)=r(A┊B),且方程的个数等于未知数的个数,故取m=p,此时方程组的唯一解为: Vr=[v0r,v2r,…vmr](r=0,1,2…m-1) (4)重复第三步就可以求出输出层m个神经元的权值,以求的输出层的权矩阵加上随机固定的隐层与输入层的权值就等于神经网络最后训练的权矩阵。
3 计算机运算实例
现以神经网络最简单的XOR问题用VC编程运算进行比较(取神经网络结构为2-4-1型),传统算法和改进BP算法的误差(取动量因子α=0.001 5,步长η=1.653)

3. 关于BP神经网络出现的问题

p和t后面加个‘!你的p和t维数不对,这样输入不对了!

4. matlab BP神经网络训练程序求解释

楼主解决没?这是我知道的

[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); %归一化数据,方便后面的预测

net.trainParam. show = 100; %这里的show是显示步数,每100步显示一次
net.trainParam.goal=0.0001; %目标误差,训练得到的数据和原始输入
net.trainParam.lr = 0.01; %lr是学习动量,一般越小越好
y1=sim(net,pn); %sim用来预测的

xlswrite('testdata6',tnew1); ?这里的testdata6是excel表格的名称

你可以看看书的,书上都有介绍

5. 伤寒、副伤寒流行预测模型(BP神经网络)的建立

由于目前研究的各种数学模型或多或少存在使用条件的局限性,或使用方法的复杂性等问题,预测效果均不十分理想,距离实际应用仍有较大差距。NNT是Matlab 中较为重要的一个工具箱,在实际应用中,BP 网络用的最广泛。神经网络具有综合能力强,对数据的要求不高,适时学习等突出优点,其操作简便,节省时间,网络初学者即使不了解其算法的本质,也可以直接应用功能丰富的函数来实现自己的目的。因此,易于被基层单位预防工作者掌握和应用。以下几个问题是建立理想的因素与疾病之间的神经网络模型的关键:

(1)资料选取

应尽可能地选取所研究地区系统连续的因素与疾病资料,最好包括有疾病高发年和疾病低发年的数据。在收集影响因素时,要抓住主要影响伤寒、副伤寒的发病因素。

(2)疾病发病率分级

神经网络预测法是按发病率高低来进行预测,在定义发病率等级时,要结合专业知识及当地情况而定,并根据网络学习训练效果而适时调整,以使网络学习训练达到最佳效果。

(3)资料处理问题

在实践中发现,资料的特征往往很大程度地影响网络学习和训练的稳定性,因此,数据的应用、纳入、排出问题有待于进一步研究。

6.3.1 人工神经网络的基本原理

人工神经网络(ANN)是近年来发展起来的十分热门的交叉学科,它涉及生物、电子、计算机、数学和物理等学科,有着广泛的应用领域。人工神经网络是一种自适应的高度非线性动力系统,在网络计算的基础上,经过多次重复组合,能够完成多维空间的映射任务。神经网络通过内部连接的自组织结构,具有对数据的高度自适应能力,由计算机直接从实例中学习获取知识,探求解决问题的方法,自动建立起复杂系统的控制规律及其认知模型。

人工神经网络就其结构而言,一般包括输入层、隐含层和输出层,不同的神经网络可以有不同的隐含层数,但他们都只有一层输入和一层输出。神经网络的各层又由不同数目的神经元组成,各层神经元数目随解决问题的不同而有不同的神经元个数。

6.3.2 BP神经网络模型

BP网络是在1985年由PDP小组提出的反向传播算法的基础上发展起来的,是一种多层次反馈型网络(图6.17),它在输入和输出之间采用多层映射方式,网络按层排列,只有相邻层的节点直接相互连接,传递之间信息。在正向传播中,输入信息从输入层经隐含层逐层处理,并传向输出层,每层神经元的状态只影响下一层神经元的状态。如果输出层不能得到期望的输出结果,则转入反向传播,将误差信号沿原来的连同通路返回,通过修改各层神经元的权值,使误差信号最小。

BP网络的学习算法步骤如下(图6.18):

图6.17 BP神经网络示意图

图6.18 BP算法流程图

第一步:设置初始参数ω和θ,(ω为初始权重,θ为临界值,均随机设为较小的数)。

第二步:将已知的样本加到网络上,利用下式可算出他们的输出值yi,其值为

岩溶地区地下水与环境的特殊性研究

式中:xi为该节点的输入;ωij为从I到j的联接权;θj为临界值;yj为实际算出的输出数据。

第三步:将已知输出数据与上面算出的输出数据之差(dj-yj)调整权系数ω,调整量为

ΔWij=ηδjxj

式中:η为比例系数;xj为在隐节点为网络输入,在输出点则为下层(隐)节点的输出(j=1,2…,n);dj为已知的输出数据(学习样本训练数据);δj为一个与输出偏差相关的值,对于输出节点来说有

δjj(1-yj)(dj-yj

对于隐节点来说,由于它的输出无法进行比较,所以经过反向逐层计算有

岩溶地区地下水与环境的特殊性研究

其中k指要把上层(输出层)节点取遍。误差δj是从输出层反向逐层计算的。各神经元的权值调整后为

ωij(t)=ωij(t-1)+Vωij

式中:t为学习次数。

这个算法是一个迭代过程,每一轮将各W值调整一遍,这样一直迭代下去,知道输出误差小于某一允许值为止,这样一个好的网络就训练成功了,BP算法从本质上讲是把一组样本的输入输出问题变为一个非线性优化问题,它使用了优化技术中最普遍的一种梯度下降算法,用迭代运算求解权值相当于学习记忆问题。

6.3.3 BP 神经网络模型在伤寒、副伤寒流行与传播预测中的应用

伤寒、副伤寒的传播与流行同环境之间有着一定的联系。根据桂林市1990年以来乡镇为单位的伤寒、副伤寒疫情资料,伤寒、副伤寒疫源地资料,结合现有资源与环境背景资料(桂林市行政区划、土壤、气候等)和社会经济资料(经济、人口、生活习惯等统计资料)建立人工神经网络数学模型,来逼近这种规律。

6.3.3.1 模型建立

(1)神经网络的BP算法

BP网络是一种前馈型网络,由1个输入层、若干隐含层和1个输出层构成。如果输入层、隐含层和输出层的单元个数分别为n,q1,q2,m,则该三层网络网络可表示为BP(n,q1,q2,m),利用该网络可实现n维输入向量Xn=(X1,X2,…,Xn)T到m维输出向量Ym=(Y1,Y2,…,Ym)T的非线性映射。输入层和输出层的单元数n,m根据具体问题确定。

(2)样本的选取

将模型的输入变量设计为平均温度、平均降雨量、岩石性质、岩溶发育、地下水类型、饮用水类型、正规自来水供应比例、集中供水比例8个输入因子(表6.29),输出单元为伤寒副伤寒的发病率等级,共一个输出单元。其中q1,q2的值根据训练结果进行选择。

表6.29 桂林市伤寒副伤寒影响因素量化表

通过分析,选取在伤寒副伤寒有代表性的县镇在1994~2001年的环境参评因子作为样本进行训练。利用聚类分析法对疫情进行聚类分级(Ⅰ、Ⅱ、Ⅲ、Ⅳ),伤寒副伤寒发病最高级为Ⅳ(BP网络中输出定为4),次之的为Ⅲ(BP网络中输出定为3),以此类推,最低为Ⅰ(BP网络中输出定为1)

(3)数据的归一化处理

为使网络在训练过程中易于收敛,我们对输入数据进行了归一化处理,并将输入的原始数据都化为0~1之间的数。如将平均降雨量的数据乘以0.0001;将平均气温的数据乘以0.01;其他输入数据也按类似的方法进行归一化处理。

(4)模型的算法过程

假设共有P个训练样本,输入的第p个(p=1,2,…,P)训练样本信息首先向前传播到隐含单元上。

经过激活函数f(u)的作用得到隐含层1的输出信息:

岩溶地区地下水与环境的特殊性研究

经过激活函数f(u)的作用得到隐含层2的输出信息:

岩溶地区地下水与环境的特殊性研究

激活函数f(u)我们这里采用Sigmoid型,即

f(u)=1/[1+exp(-u)](6.5)

隐含层的输出信息传到输出层,可得到最终输出结果为

岩溶地区地下水与环境的特殊性研究

以上过程为网络学习的信息正向传播过程。

另一个过程为误差反向传播过程。如果网络输出与期望输出间存在误差,则将误差反向传播,利用下式来调节网络权重和阈值:

岩溶地区地下水与环境的特殊性研究

式中:Δω(t)为t次训练时权重和阈值的修正;η称为学习速率,0<η<1;E为误差平方和。

岩溶地区地下水与环境的特殊性研究

反复运用以上两个过程,直至网络输出与期望输出间的误差满足一定的要求。

该模型算法的缺点:

1)需要较长的训练时间。由于一些复杂的问题,BP算法可能要进行几小时甚至更长的时间的训练,这主要是由于学习速率太小造成的,可采用变化的学习速率或自适应的学习速率加以改进。

2)完全不能训练。主要表现在网络出现的麻痹现象上,在网络的训练过程中,当其权值调的过大,可能使得所有的或大部分神经元的加权总和n偏大,这使得激活函数的输入工作在S型转移函数的饱和区,从而导致其导数f′(n)非常小,从而使得对网络权值的调节过程几乎停顿下来。

3)局部极小值。BP算法可以使网络权值收敛到一个解,但它并不能保证所求为误差超平面的全局最小解,很可能是一个局部极小解。这是因为BP算法采用的是梯度下降法,训练从某一起点沿误差函数的斜面逐渐达到误差的最小值。

考虑到以上算法的缺点,对模型进行了两方面的改进:

(1)附加动量法

为了避免陷入局部极小值,对模型进行了改进,应用了附加动量法。附加动量法在使网络修正及其权值时,不仅考虑误差在梯度上的作用,而且考虑在误差曲面上变化趋势的影响,其作用如同一个低通滤波器,它允许网络忽略网络上的微小变化特性。在没有附加动量的作用下,网络可能陷入浅的局部极小值,利用附加动量的作用则有可能滑过这些极小值。

该方法是在反向传播法的基础上在每一个权值的变化上加上一项正比于前次权值变化量的值,并根据反向传播法来产生心的权值变化。促使权值的调节向着误差曲面底部的平均方向变化,从而防止了如Δω(t)=0的出现,有助于使网络从误差曲面的局部极小值中跳出。

这种方法主要是把式(6.7)改进为

岩溶地区地下水与环境的特殊性研究

式中:A为训练次数;a为动量因子,一般取0.95左右。

训练中对采用动量法的判断条件为

岩溶地区地下水与环境的特殊性研究

(2)自适应学习速率

对于一个特定的问题,要选择适当的学习速率不是一件容易的事情。通常是凭经验或实验获取,但即使这样,对训练开始初期功效较好的学习速率,不见得对后来的训练合适。所以,为了尽量缩短网络所需的训练时间,采用了学习速率随着训练变化的方法来找到相对于每一时刻来说较差的学习速率。

下式给出了一种自适应学习速率的调整公式:

岩溶地区地下水与环境的特殊性研究

通过以上两个方面的改进,训练了一个比较理想的网络,将动量法和自适应学习速率结合起来,效果要比单独使用要好得多。

6.3.3.2 模型的求解与预测

采用包含了2个隐含层的神经网络BP(4,q1,q2,1),隐含层单元数q1,q2与所研究的具体问题有关,目前尚无统一的确定方法,通常根据网络训练情况采用试错法确定。在满足一定的精度要求下一般认小的数值,以改善网络的概括推论能力。在训练中网络的收敛采用输出值Ykp与实测值tp的误差平方和进行控制:

岩溶地区地下水与环境的特殊性研究

1)将附加动量法和自适应学习速率结合应用,分析桂林市36个乡镇地质条件各因素对伤寒副伤寒发病等级的影响。因此训练样本为36个,第一个隐含层有19个神经元,第二个隐含层有11个神经元,学习速率为0.001。

A.程序(略)。

B.网络训练。在命令窗口执行运行命令,网络开始学习和训练,其学习和训练过程如下(图6.19)。

图6.19 神经网络训练过程图

C.模型预测。

a.输入未参与训练的乡镇(洞井乡、两水乡、延东乡、四塘乡、严关镇、灵田乡)地质条件数据。

b.预测。程序运行后网络输出预测值a3,与已知的实际值进行比较,其预测结果整理后见(表6.30)。经计算,对6个乡镇伤寒副伤寒发病等级的预测符合率为83.3%。

表6.30 神经网络模型预测结果与实际结果比较

c.地质条件改进方案。在影响疾病发生的地质条件中,大部分地质条件是不会变化的,而改变发病地区的饮用水类型是可以人为地通过改良措施加以实施的一个因素。因此,以灵田乡为例对发病率较高的乡镇进行分析,改变其饮用水类型,来看发病等级的变化情况。

表6.31显示,在其他地质条件因素不变的情况下,改变当地的地下水类型(从原来的岩溶水类型改变成基岩裂隙水)则将发病等级从原来的最高级4级,下降为较低的2级,效果是十分明显的。因此,今后在进行伤寒副伤寒疾病防治的时候,可以通过改变高发区饮用水类型来客观上减少疫情的发生。

表6.31 灵田乡改变饮用水类型前后的预测结果

2)选取桂林地区1994~2000年月平均降雨量、月平均温度作为输入数据矩阵,进行样本训练,设定不同的隐含层单元数,对各月份的数据进行BP网络训练。在隐含层单元数q1=13,q2=9,经过46383次数的训练,误差达到精度要求,学习速率0.02。

A.附加动量法程序(略)。

B.网络训练。在命令窗口执行运行命令,网络开始学习和训练,其学习和训练过程如下(图6.20)。

C.模型预测。

a.输入桂林市2001年1~12月桂林市各月份的平均气温和平均降雨量。预测程度(略)。

b.预测。程序运行后网络输出预测值a2,与已知的实际值进行比较,其预测结果整理后见(表6.32)。经计算,对2001年1~12月伤寒副伤寒发病等级进行预测,12个预测结果中,有9个符合,符合率为75%。

图6.20 神经网络训练过程图

表6.32 神经网络模型预测结果与实际值比较

6.3.3.3 模型的评价

本研究采用BP神经网络对伤寒、副伤寒发病率等级进行定量预测,一方面引用数量化理论对不确定因素进行量化处理;另一方面利用神经网络优点,充分考虑各影响因素与发病率之间的非线性映射。

实际应用表明,神经网络定量预测伤寒、副伤寒发病率是理想的。

其主要优点有:

1)避免了模糊或不确定因素的分析工作和具体数学模型的建立工作。

2)完成了输入和输出之间复杂的非线性映射关系。

3)采用自适应的信息处理方式,有效减少人为的主观臆断性。

虽然如此,但仍存在以下缺点:

1)学习算法的收敛速度慢,通常需要上千次或更多,训练时间长。

2)从数学上看,BP算法有可能存在局部极小问题。

本模型具有广泛的应用范围,可以应用在很多领域。从上面的结果可以看出,实际和网络学习数据总体较为接近,演化趋势也基本一致。说明选定的气象因子、地质条件因素为神经单元获得的伤寒、副伤寒发病等级与实际等级比较接近,从而证明伤寒、副伤寒流行与地理因素的确存在较密切的相关性。

6. BP神经网络如何把训练后的权值输入至MATLAB 建立网络 完成预测

这个就只能自己编M文件实现了,给个例子你看看

% script: main_batch.m
% 批量方式训练BP网络,实现性别识别

%% 清理
clear all
clc

%% 读入数据
% xlsfile='student.xls';
[data,label]=getdata();

%% 划分数据
[traind,trainl,testd,testl]=divide(data,label);

%% 设置参数

rng('default')
rng(0)
nTrainNum = 60; % 60个训练样本
nSampDim = 2; % 样本是2维的

%% 构造网络
net.nIn = 2; % 输入层2个神经元,分别输入身高、体重
net.nHidden = 3; % 3个隐含层节点
net.nOut = 1; % 1个输出层节点
w = 2*(rand(net.nHidden,net.nIn)-1/2); % nHidden * 3 一行代表一个隐含层节点
b = 2*(rand(net.nHidden,1)-1/2);
net.w1 = [w,b];
W = 2*(rand(net.nOut,net.nHidden)-1/2);
B = 2*(rand(net.nOut,1)-1/2);
net.w2 = [W,B];

%% 训练数据归一化
mm=mean(traind);
% 均值平移
for i=1:2
traind_s(:,i)=traind(:,i)-mm(i);
end
% 方差标准化
ml(1) = std(traind_s(:,1));
ml(2) = std(traind_s(:,2));
for i=1:2
traind_s(:,i)=traind_s(:,i)/ml(i);
end

%% 训练
SampInEx = [traind_s';ones(1,nTrainNum)];
expectedOut=trainl;

eb = 0.01; % 误差容限
eta = 0.6; % 学习率
mc = 0.8; % 动量因子
maxiter = 2000; % 最大迭代次数
iteration = 0; % 第一代

errRec = zeros(1,maxiter);
outRec = zeros(nTrainNum, maxiter);
NET=[]; % 记录
% 开始迭代
for i = 1 : maxiter
hid_input = net.w1 * SampInEx; % 隐含层的输入
hid_out = logsig(hid_input); % 隐含层的输出

ou_input1 = [hid_out;ones(1,nTrainNum)]; % 输出层的输入
ou_input2 = net.w2 * ou_input1;
out_out = logsig(ou_input2); % 输出层的输出

outRec(:,i) = out_out'; % 记录每次迭代的输出

err = expectedOut - out_out; % 误差
sse = sumsqr(err);
errRec(i) = sse; % 保存误差值
fprintf('第 %d 次迭代 误差: %f\n', i, sse);
iteration = iteration + 1;
% 判断是否收敛
if sse<=eb
break;
end

% 误差反向传播
% 隐含层与输出层之间的局部梯度
DELTA = err.*dlogsig(ou_input2,out_out);
% 输入层与隐含层之间的局部梯度
delta = net.w2(:,1:end-1)' * DELTA.*dlogsig(hid_input,hid_out);

% 权值修改量
dWEX = DELTA*ou_input1';
dwex = delta*SampInEx';

% 修改权值,如果不是第一次修改,则使用动量因子
if i == 1
net.w2 = net.w2 + eta * dWEX;
net.w1 = net.w1 + eta * dwex;
else
net.w2 = net.w2 + (1 - mc)*eta*dWEX + mc * dWEXOld;
net.w1 = net.w1 + (1 - mc)*eta*dwex + mc * dwexOld;
end
% 记录上一次的权值修改量
dWEXOld = dWEX;
dwexOld = dwex;

end

%% 测试
% 测试数据归一化
for i=1:2
testd_s(:,i)=testd(:,i)-mm(i);
end

for i=1:2
testd_s(:,i)=testd_s(:,i)/ml(i);
end

% 计算测试输出
InEx=[testd_s';ones(1,260-nTrainNum)];
hid_input = net.w1 * InEx;
hid_out = logsig(hid_input); % output of the hidden layer nodes
ou_input1 = [hid_out;ones(1,260-nTrainNum)];
ou_input2 = net.w2 * ou_input1;
out_out = logsig(ou_input2);
out_out1=out_out;

% 取整
out_out(out_out<0.5)=0;
out_out(out_out>=0.5)=1;
% 正确率
rate = sum(out_out == testl)/length(out_out);

%% 显示
% 显示训练样本
train_m = traind(trainl==1,:);
train_m=train_m';
train_f = traind(trainl==0,:);
train_f=train_f';
figure(1)
plot(train_m(1,:),train_m(2,:),'bo');
hold on;
plot(train_f(1,:),train_f(2,:),'r*');
xlabel('身高')
ylabel('体重')
title('训练样本分布')
legend('男生','女生')

figure(2)
axis on
hold on
grid
[nRow,nCol] = size(errRec);
plot(1:nCol,errRec,'LineWidth',1.5);
legend('误差平方和');
xlabel('迭代次数','FontName','Times','FontSize',10);
ylabel('误差')

fprintf(' ----------------错误分类表----------\n')
fprintf(' 编号 标签 身高 体重\n')
ind= find(out_out ~= testl);
for i=1:length(ind)
fprintf(' %4d %4d %f %f \n', ind(i), testl(ind(i)), testd(ind(i),1), testd(ind(i),2));
end

fprintf('最终迭代次数\n %d\n', iteration);
fprintf('正确率:\n %f%%\n', rate*100);

7. BP神经网络动量因子不理解

BP神经网络在批处理训练时会陷入局部最小,也就是说误差能基本不变化其返回的信号对权回值调整很小但是总答误差能又大于训练结果设定的总误差能条件。这个时候加入一个动量因子有助于其反馈的误差信号使神经元的权值重新振荡起来。可以参看一些专门介绍神经网络的书籍。

8. BP神经网络的神经网络

在人工神经网络发展历史中,很长一段时间里没有找到隐层的连接权值调整问题的有效算法。直到误差反向传播算法(BP算法)的提出,成功地解决了求解非线性连续函数的多层前馈神经网络权重调整问题。
BP (Back Propagation)神经网络,即误差反传误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化能力的需求,中间层可以设计为单隐层或者多隐层结构;最后一个隐层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结果。当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通过输出层,按误差梯度下降的方式修正各层权值,向隐层、输入层逐层反传。周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。
BP神经网络模型BP网络模型包括其输入输出模型、作用函数模型、误差计算模型和自学习模型。
(1)节点输出模型
隐节点输出模型:Oj=f(∑Wij×Xi-qj) (1)
输出节点输出模型:Yk=f(∑Tjk×Oj-qk) (2)
f-非线形作用函数;q -神经单元阈值。
(2)作用函数模型
作用函数是反映下层输入对上层节点刺激脉冲强度的函数又称刺激函数,一般取为(0,1)内连续取值Sigmoid函数: f(x)=1/(1+e乘方(-x)) (3)
(3)误差计算模型
误差计算模型是反映神经网络期望输出与计算输出之间误差大小的函数:
(4)
tpi- i节点的期望输出值;Opi-i节点计算输出值。
(4)自学习模型
神经网络的学习过程,即连接下层节点和上层节点之间的权重矩阵Wij的设定和误差修正过程。BP网络有师学习方式-需要设定期望值和无师学习方式-只需输入模式之分。自学习模型为
△Wij(n+1)= h ×Фi×Oj+a×△Wij(n) (5)
h -学习因子;Фi-输出节点i的计算误差;Oj-输出节点j的计算输出;a-动量因子。

9. 求用matlab通过BP神经网络做预测的源程序

load data3_1.txt;
[m,n]=size( data3_1);
tsx = data3_1(1:m-1,1);
tsx=tsx';
ts = data3_1(2:m,1);
ts=ts';
[TSX,TSXps]=mapminmax(tsx,1,2);
[TS,TSps]=mapminmax(ts,1,2);
TSX=TSX';

figure;
plot(ts,'LineWidth',2);
title('到杭旅游总人数(1999.01.01-2009.12.31)','FontSize',12);
xlabel('统计年份(1990.12.19-2009.08.19)','FontSize',12);
ylabel('归一化后的总游客数/万人','FontSize',12);
grid on;

% 生成BP网络、利用minmax函数求输入样本范围
net_1=newff(minmax(TS),[10,1],{'tansig','purelin'},'traincgf')
% 设置训练参数
net_1.trainParam.show = 50; %显示训练迭代过程(NaN表示不显示,缺省25)
net_1.trainParam.lr = 0.025; %学习率(缺省0.01)
net_1.trainParam.mc = 0.9; %动量因子(缺省0.9)
net_1.trainParam.epochs = 10000; %最大训练次数
net_1.trainParam.goal = 0.001; %训练要求精度

inputWeights=net_1.IW{1,1} %输入层权值
inputbias=net_1.b{1} %输入层阈值
layerWeights=net_1.LW{2,1} %输出层权值
layerbias=net_1.b{2} %输出层阈值

TS',TSX
% 网络训练
[net_1,tr]=train(net_1,TS,TSX);

10. 神经网络预测程序

我一直用这个程序,觉得还可以,你试试吧,不过需要你自己根据数据来设置相应的参数~~
close all ;
clear ;
echo on ;
clc ;
% NEWFF——生成一个新的前向神经网络
% TRAIN——对 BP 神经网络进行训练
% SIM——对 BP 神经网络进行仿真
pause
% 敲任意键开始
clc
% 定义训练样本
% P 为输入矢量
p=[ ];
% T 为目标矢量
t= [];
%训练样本的归一化
for i=1:(训练样本的指标数)
P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end
pause
clc

% 创建一个新的前向神经网络
net=newff(minmax(P),[15,2],{'tansig','purelin'},'traingda'); %这些参数要自己设置
% 当前输入层权值和阈值
inputWeights=net.IW{1,1};
inputbias=net.b{1} ;
% 当前网络层权值和阈值
layerWeights=net.LW{2,1} ;
layerbias=net.b{2} ;
pause
clc

% 设置训练参数 也要自己设置
net.trainParam.show = 50;
net.trainParam.lr = 0.05;
%net.trainParam.mc = 0.9; % 附加动量因子
net.trainParam.epochs =5000;
net.trainParam.goal = 1e-4;
pause
clc

% 调用 TRAINGDM 算法训练 BP 网络
[net,tr]=train(net,P,t);
pause
clc
% 对 BP 网络进行仿真
p_test=[];
for i=1:6
P_test(i,:)=(p_test(i,:)-min(p_test(i,:)))/(max(p_test(i,:))-min(p_test(i,:)));
end
t_test=[];
A = sim(net,P_test)
% 计算仿真误差
E = t - A
error=mse(E)
pause
clc
echo off

%反归一化
for i=1:2
predict(i,:)=A(i,:)*(max(t(i,:))-min(t(i,:)))+ min(t(i,:));
end
predict %即仿真结果
pause

阅读全文

与bp神经网络动量因子程序相关的资料

热点内容
截图保存为哪个文件夹 浏览:101
微云文件无法打开 浏览:373
越狱文件管理器哪个好用 浏览:947
桌面文件可以保存在哪里 浏览:136
世界之窗修改密码 浏览:555
系统文件巨大 浏览:138
重点毕业生数据采集有什么用 浏览:341
手机抖音上的app在哪里 浏览:215
thinkpad装win7教程 浏览:793
2012文件服务器资源管理器 浏览:459
纯净版win1032位改64 浏览:413
农产品行业融资主要分析哪些数据 浏览:601
华为微信不上网络设置 浏览:727
查看qq聊天记录 浏览:931
nih是什么意思网络用语 浏览:456
网络营销课程设计公众号论文 浏览:902
淘宝低价海关扣押苹果 浏览:335
javadouble和float 浏览:303
atmega8下载程序 浏览:819
飞鸽传输文件和qq哪个快 浏览:519

友情链接