BP神经网络的非线性系统建模以及matlab神经网络工具箱的使用

来源:互联网 发布:js 12.7mm 编辑:程序博客网 时间:2024/05/22 07:56

在所有的关系中,数学公式的线性表达是对那些规律性数据的预测统计、而非线性关系的数据,数学方程式只能通过多个参数尽可能模拟数据曲线,神经网络的非线性拟合能力不仅在于参数多还在于激活函数的非线性表达。以拟合拟合的非线性函数为:为例:BP神经网络的任务就是构建训练一个黑盒子,通过输入数据的有监督训练将盒子里的组机制结构能得到优化。模型结构2-5-1;输入2个隐层5个输出1个。过程分为建模-训练-预测。

Matlab下的神经网络工具箱省去了一系列自我去完成的工作,此工具箱里有用于神经网络的设计和训练、权值初始化,训练及输出等一系列工作可以完成性完成。工具箱里包含感知器、线性网络、BP神经网络、径向基网络、自组织网络和回归网络。BP用到了下面3个函数:newff :前馈网络创建函数,train:训练一个神经网络,sim :使用网络进行仿真。1)newff:BP神经网络参数设置函数。
函数功能:构建一个BP神经网络。  函数形式:net= newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF) 
P:输入数据矩阵。  T:输出数据矩阵。 S:隐含层节点数。 TF:节点传递函数,包括硬限幅传递函数hardlim,对称硬限幅传递函数hardlims,线性传 递函数purelin,正切S型传递函数tansig,对数S型传递函数logsig。 
BTF:训练函数,包括梯度下降BP算法训练函数traingd,动量反传的梯度下降BP算法训练函数traingdm,动态自适应学习率的梯度下降BP算法训练函数traingda,动量反传和动态自适应学习率的梯度下降BP算法训练函数traingdx, Levenberg_Marquardt的BP算法训 练函数trainlm。 
BLF:网络学习函数,包括BP学习规则learngd,带动量项的BP学习规则learngdm。  
PF:性能分析函数,包括均值绝对误差性能分析函数mae,均方差性能分析函数mse。 
IPF:输入处理函数。  OPF:输出处理函数。 DDF:验证数据划分函数。 
一般在使用过程中设置前面6个参数,后面4个参数采用系统默认参数。
2)train:BP神经网络训练函数
函数功能:用训练数据训练BP神经网络。  函数形式:[net,tr]=train(NET,X,T,Pi,Ai) 
NET:待训练网络。  X:输入数据矩阵。 T:输出数据矩阵。 Pi:初始化输入层条件。 Ai:初始化输出层条件。 
net:训练好的网络。  tr:训练过程记录。 一般在使用过程中设置前面3个参数,后面2个参数采用系统默认参数。
3)sim:BP神经网络预测函数。函数功能:用训练好的BP神经网络预测函数输出。  函数形式:y=sim(net,x) 
net:训练好的网络。  x:输入数据。 y:网络预测数据。(单隐层拟合代码)

clcclear%% 训练数据预测数据提取及归一化%下载输入输出数据load data input output%从1到2000间随机排序k=rand(1,2000);[m,n]=sort(k);%找出训练数据和预测数据input_train=input(n(1:1900),:)';output_train=output(n(1:1900));input_test=input(n(1901:2000),:)';output_test=output(n(1901:2000));%选连样本输入输出数据归一化[inputn,inputps]=mapminmax(input_train);[outputn,outputps]=mapminmax(output_train);%% BP网络训练% %初始化网络结构net=newff(inputn,outputn,5);net.trainParam.epochs=100;net.trainParam.lr=0.1;net.trainParam.goal=0.00004;%网络训练net=train(net,inputn,outputn);%% BP网络预测%预测数据归一化inputn_test=mapminmax('apply',input_test,inputps); %网络预测输出an=sim(net,inputn_test); %网络输出反归一化BPoutput=mapminmax('reverse',an,outputps);%% 结果分析figure(1)plot(BPoutput,':og')hold onplot(output_test,'-*');legend('预测输出','期望输出')title('BP网络预测输出','fontsize',12)ylabel('函数输出','fontsize',12)xlabel('样本','fontsize',12)%预测误差error=BPoutput-output_test;figure(2)plot(error,'-*')title('BP网络预测误差','fontsize',12)ylabel('误差','fontsize',12)xlabel('样本','fontsize',12)figure(3)plot((output_test-BPoutput)./BPoutput,'-*');title('神经网络预测误差百分比')errorsum=sum(abs(error))
书中还列举的隐含层数量不同以及激活函数不用的情况下的效果对比;MATLAB神经网络工具箱中newff函数提供了几种节点转移函数,主要包括以下三种。1)logsig函数:      y =1/[1-exp(-x)]                        
2)tansig函数:               y =2/[1-exp(-2x)]-1              3)purelin函数:                 y =x       

隐藏层含节点数太少,BP神经网络不能建立复杂的映射关系,网络预测误差较大。但是如果节点数过多,网络学习时间增加,并且可能出现“过拟合”现象,就是训练样本预测准确,但是其他样本预测误差较大,隐含层和输出层函数的选择对BP神经网络预测精度有较大影响。一般隐含层节点转移函数选用logsig函数或tansig函数,输出层节点转移函数选用tansig或purelin函数。

网络拟合的局限性:BP神经网络虽然具有较好的拟合能力,但其拟合能力不是绝对的,对于一些复杂系统,BP神经网络预测结果会存在较大误差。比如对于以下函数拟合效果较差: 
matlab神经网络工具箱的使用:在输入命令里面输入nntool,就可以开始了。

然后选择训练数据,这里尽量处理好否则会出现两个目标数据维数不一致的错误报告;

选择完Import导入对应训练数据就可以点creat一个网络了,然后就是各个参数的设置包括名称,神经网络的类型以及隐含层的层数和节点数,还有隐含层及输出层的训练函数等

点击View可以看到网络结构的可视化表达点击open可以看到详细的网络结构界面化窗口


选择好数据后就可以点击训练等待结果,你可以在训练参数界面设置你想要的参数。

下面三个图形则是点击performance(均方误差效果性能展示),均方误差,regression(回归分析),MATLAB采用的方法是把数据划分成三分,training(训练),validation(验证),test(测试)。只有training数据参加训练,其他两部分数据不参加训练,用于检验。训练进行时,目标和训练(test)数据目标之间的误差会越来越小(因为网络就是根据这些数据训练的),刚开始时validation和validation目标之间的误差也会变小,可随着训练的增加,test的误差继续变小,validation的误差反而会有所上升。当validation的误差连续上升6次时(默认设置)训练就停止了(因为这时有过拟合的倾向)。横坐标为你的目标值,纵坐标为你的网络的输出,这图就是做了个回归,完美时四幅都曲线应该在对角线上。以及training state(训练中参数变化)以及而出现的


原创粉丝点击