。
建立BP神经网络预测模型,可按下列步骤进行:1、提供原始数据2、训练数据预测数据提取及归一化3、BP网络训练4、BP网络预测5、结果分析现用一个实际的例子,来预测2015年和2016年某地区的人口数。
已知2009年——2014年某地区人口数分别为3583、4150、5062、4628、5270、5340万人执行BP_main程序,得到[2015, 5128.呵呵3946380615234375][2016,5100.5797325642779469490051269531]代码及图形如下。
谷歌人工智能写作项目:神经网络伪原创
提问:bp神经网络为什么要采用非线性函数来进行预测?回答:简单的讲,主要是复杂的bp神经网络的行为动态及神经元之间的相互作用是无法用简单的线性函数来描述的!
一般来讲,用数学函数模拟一个系统输入与输出的关系(系统函数)时,设其函数为f(x),则它可以表征为一个输入变量x的多项式,即f(x)=∑an*x^n∣n=0->∞.;当n≥2时,f(x)就成为非线性函数了。
an是每个x高次项的系数。可以用具体的实际实验数据来确定。
bp神经网络是有一定缺陷的,比如容易陷入局部极小值,还有训练的结果依赖初始随机权值,这就好比你下一个山坡,如果最开始的方向走错了,那么你可能永远也到不了正确的山脚。
可以说bp神经网络很难得到正确答案,也没有唯一解,有些时候只能是更多次地尝试、修改参数,这个更多依赖自己的经验,通俗点说就是“你觉得行了,那就是行了”,而不像1+1=2那样确切。
如果有耐心,确定方法没问题,那么接下来需要做的就是不停地尝试、训练,得到你想要的结果。另外,我不知道你预测的是什么,是时间序列么?比如证券?
这种预测,比较重要的就是输入参数是否合适,这个直接决定了结果精度。
地面沉降是多种自然和人为因素共同作用的结果。
各种要素发生作用的时空序列、影响强度和方向以及它们之间的关系处于不断变化之中,同时各因素的变化及其影响并不是单方面的,各变量之间相互形成制约关系,这使得地面沉降过程极具复杂性。
因此,要求预测模型能以在现有资料、信息基础,准确反映研究区的自然背景条件、地下水开采行为与地面沉降过程之间的复杂联系,并能识别和适应不同影响因素随时间发生的改变。
BP神经网络作为一个非线性系统,可用于逼近非线性映射关系,也可用于逼近一个极为复杂的函数关系,是解释和模拟地面沉降等高度复杂的非线性动力学系统问题的一种较好的方法。
8.4.1.1训练样本的确定根据第4章的分析,影响研究区域地面沉降过程的变量包含着复杂的自然和人为因素,超采深层地下水是造成研究区1986年以后地面沉降的主要原因,深层地下水的开采量和沉降监测点附近的各含水层组水位均与地面沉降有着很好的相关性。
本区第四系浅层地下水系统(第Ⅰ含水层组)除河漫滩地段,一般为TDS都高于2g/L的咸水,因此工农业用途较少,水位一般保持天然状态,在本次模型研究中不予考虑。
由于区内各地面沉降监测点的地面高程每年测量一次,为了保持与地面沉降数据的一致性,使神经网络模型能准确识别地下水开采与地面沉降之间的关系,所有数据均整理成年平均的形式。
本章选择了控沉点处深层地下水系统的年均水位和区域地下水开采量作为模型的输入变量,考虑到水位和开采量的变化与沉降变形并不同步,有明显的滞后性存在,本章将前一年的开采量和年均水位也作为输入,故模型的输入变量为四个。
以收集到的区内每个地面沉降监测点的年沉降量作为模型的输出变量,通过选择适合的隐含层数和隐层神经单元数构建BP模型,对地面沉降的趋势进行预测。
本次收集到的地面沉降监测点处并未有常观孔的水位数据,如果根据历年实测等水位线推算,会产生很大的误差,导致预测结果的不稳定性。
基于已经建立好的Modflow数值模型,利用ProcessingModflow软件里的水井子程序包,在控沉点处设置虚拟的水位观测井,通过软件模拟出的不同时期的水位,作为地面沉降神经网络模型的输入层,从而避免了以往的将各含水层组平均水位作为模型输入所带来的误差[55]。
考虑到深层地下水系统各含水层组的水力联系较为密切,本次在每个地面沉降监测点处只设置一个水位观测井,来模拟深层地下水系统的水位。
水井滤水管的起始位置与该点含水层的位置相对应,即滤水管的长度即为含水层的厚度。观测井在模型中的位置如8.31所示,绿色的点即为虚拟水位观测井。
从图中可以看出6个沉降点在研究区内分布均匀,处于不同的沉降区域,有一定的代表性,通过对这6个点的地面沉降进行预测,可以反映出不同区域的沉降趋势。数值模型模拟得到的各沉降点年均水位如图8.32所示。
图8.31控沉点虚拟水井在Modflow数值模型中的分布示意图图8.32模拟得到的各沉降点处虚拟水井年均水位动态8.4.1.2样本数据的预处理由于BP网络的输入层物理量及数值相差甚远(不属于一个数量级),为了加快网络收敛的速度,在训练之前须将各输入物理量进行预处理。
数据的预处理方法主要有标准化法、重新定标法、变换法和比例放缩法等等。
本章所选用的是一种最常用的比例压缩法,公式为[56]变环境条件下的水资源保护与可持续利用研究式中:X为原始数据;Xmax、Xmin为原始数据的最大值和最小值;T为变换后的数据,也称之为目标数据;Tmax、Tmin为目标数据的最大值和最小值。
由于Sigmoid函数在值域[0,0.1]和[0.9,1.0]区域内曲线变化极为平坦,因此合适的数据处理是将各输入物理量归至[0.1,0.9]之间。
本章用式(8.7)将每个样本输入层的4个物理量进行归一化处理变环境条件下的水资源保护与可持续利用研究处理后的数据见表8.14。
表8.14BP神经网络模型数据归一化表续表8.4.1.3网络结构的确定BP神经网络的建立,其重点在于网络结构的设计,只要隐层中有足够多的神经元,多层前向网络可以用来逼近几乎任何一个函数。
一般地,网络结构(隐层数和隐层神经元数)和参数(权值和偏置值)共同决定着神经网络所能实现的函数的复杂程度的上限。结构简单的网络所能实现的函数类型是非常有限的,参数过多的网络可能会对数据拟合过度。
本章将输入样本的个数定为4个,输出样本为1个。
但是对于隐含层数及隐含层所含神经元个数的选择,到目前为止还没有明确的方法可以计算出实际需要多少层或多少神经元就可以满足预测精度的要求,在选择时通常是采用试算的方法[56,57]。
为了保证模型的预测精度和范化能力,根据收集到的资料的连续性,本次研究利用1988~2002年15组地面沉降历史观测数据和对应的当年及前一年的开采量、年均水位组织训练,以2003年和2004年的实测地面沉降数据校验模型的预测能力,尝试多种试验性网络结构,其他模型参数的选择采取保守方式,以牺牲训练速度换取模型稳定性。
以2003年和2004年的平均相对误差均小于20%作为筛选标准,最终选择三层BP网络作为模型结构,隐层神经元的个数设置为3。网络结构如图8.33所示,参数见表8.15。
表8.15BP网络模型参数一览表图8.33神经网络模型结构图8.4.1.4网络的训练与预测采用图8.33确定的网络结构对数据进行训练,各个沉降点的训练过程和拟合效果如图8.34、图8.35所示。
从图8.35可以看出,训练后的BP网络能很好地逼近给定的目标函数。说明该模型的泛化能力较好,模拟的结果比较可靠。
通过该模型模拟了6个沉降点在2003和2004年的沉降量(表8.16),可以看出2003年和2004年模拟值和实际拟合较好,两年的平均相对误差均小于20%,说明BP神经网络可以用来预测地面沉降的趋势。
表8.16监测点年沉降量模拟误差表图8.34各沉降点训练过程图8.4.1.5模型物理意义探讨虽然现今的BP神经网络还是一个黑箱模型,其参数没有水文物理意义[58]。
但从结构上分析,本章认为地面沉降与ANN是同构的。
对于每个控沉点来说,深层地下水系统的开采量和含水层组的水位变化,都会引起地层应力的响应,从而导致整体的地面标高发生变化,这一过程可以与BP神经网络结构进行类比。
其中,深层地下水系统的3个含水层组相当于隐含层中的3个神经元,各含水层组对地面沉降的奉献值相当于隐含层中人工神经元的阈值,整体上来说,本次用来模拟地面沉降的BP神经网络结构已经灰箱化(表8.17)。
图8.35各监测点年沉降量神经网络模型拟合图表8.17BP神经网络构件物理意义一览表。
预测数据的话BP不是特别好用,最好用Elman反馈神经网络或者RNN循环神经网络,这些有记忆功能的网络比较好用。bp主要和你选择的隐含层数,和误差范围,学习率有关。
你可以调节相关参数来改变神经网络,获得更精确的结果。
。
基坑降水引起地面沉降的BP神经网络预测模型建模过程如下:(1)样本选择因基坑降水引起的地面沉降量和距离基坑的距离关系密切,因此建模选用“基坑降水引起沉降工程数据(第二类)”(见表4.1)中的相关数据作为样本进行学习训练和检验。
(2)BP神经网络结构设计对于BP网络,对于任何在闭区间内的一个连续函数都可以用单隐层的BP网络逼近,因而一个三层BP网络就可以完成任意的n维到m维的映射。
根据网络结构简单化的原则,确定采用三层BP网络结构,即输入层为沉降点距基坑的距离L(m)、等效压缩模量E(MPa)、水位降深H(m)和支护刚度n四个参数,输出层为地面累积沉降量(mm),隐层层数为1层。
隐层的神经元数目选择是一个十分复杂的问题,往往需要根据设计者的经验和多次实验来确定,因而不存在一个理想的解析式来表示。隐单元的数目与问题的要求,与输入、输出单元的数目有直接的关系。
隐单元数目太多会导致学习时间过长,误差不一定最佳,也会导致容错性差、不能识别以前没有看到的样本,因此一定存在一个最佳的隐单元数。
研究通过一次编程比较了隐层神经元个数分别为5、10、15、20、25、30、40时训练速度及检验精度。
图4.2BP神经网络程序框图(3)网络训练及检验BP网络采用梯度下降法来降低网络的训练误差,考虑到基坑降水地面沉降范围内沉降量变化幅度较小的特点,训练时以训练目标取0.001为控制条件,考虑到网络的结构比较复杂,神经元个数比较多,需要适当增加训练次数和学习速率,因此初始训练次数设为10000次,学习速率取0.1,中间层的神经元传递函数采用S型正切函数tansig,传输函数采用logsig,训练函数采用trainlm,选用38组数据中的33组作为训练样本,5组作为检验样本。
(4)网络实现及检验效果使用MATLAB6.0编程建立基于BP神经网络的基坑降水地面沉降预测模型(程序代码见附件1),其训练误差及检验效果如下:图4.3训练误差曲线图4.4预测误差曲线由图4.3、图4.4可见:样本数据收敛,训练误差较小,中间层神经单元个数为10时预测精度较好,误差小于20%,误差满足工程需求。
。
clearall;closeall;clc;%p=[205623952600229816341600183714781900239526002298163416001873147819001500260022981634160018731478190015002046];t=[187314781900150020461556];p=[205623952600229816341600];%--归一化输入输出--映射到[0,1]--%pmax=max(p);pmin=min(p);P=(p-pmin)./(pmax-pmin);tmax=max(t);tmin=min(t);T=(t-tmin)./(tmax-tmin);net=newff(P,T,5,{'tansig','purelin'},'traingdx');%--设置训练参数--%=50;=0.05;net.trainParam.epochs=1000;=1e-3;net.divideFcn='';[net,tr]=train(net,P,T);A=sim(net,P);a=A.*(tmax-tmin)+tmin;x=7:12;figureplot(x,t,'+');holdon;plot(x,a,'or');holdoff;xlabel('month');ylabel('**')legend('实际','预测')。