Matlab在BP神经网络上的应用

使用了Matlab里的神经网络工具箱来实现BP神经网络的应用

Posted by LJJ on September 7, 2019

Matlab工具箱BP神经网络应用实例

  • 运行环境:Matlab2018b
  • 工具箱名称:Neural Networks Toolbox for Matlab
  • 写作背景:快速掌握BP神经网络编码

前述:本文就是以简单的几个例子来记录如何使用Matlab工具箱来实现BP神经网络解决实际问题的应用过程,本部分内容对神经网络的理论部分介绍较少,注重对matlab工具箱的应用。

BP神经网络求解过程

  1. 原始数据的输入
  2. 数据归一化
  3. 网络建立以及训练
  4. 对原始数据进行仿真
  5. 将原始数据方针的结果与已知样本进行对比
  6. 对新数据进行仿真

newff()函数

  • 作用:创建BP网络
  • 语法格式:net = newff(P,T,[S1 S2 … S(Nl)],{TF1 TF2 …TFNl},BTF,BLF,PF,IPF,OPF,DDF)
P Q1样本R元素输入向量的R x Q1矩阵
T Q2样本SN元素目标向量的SN x Q2矩阵
Si 第i层的大小,对于N-1层,默认=[](输出层大小SN由T确定)
TFi 第i层的传递函数(默认= 隐藏图层的’tansig’ 和输出图层的’purelin’。)
BTF 反向传播网络训练功能(默认=’trainlm’)
BLF 反向传播权重/偏见学习功能(默认=’learngdm’)
IPF 输入处理功能的行单元阵列(默认={‘fixunknowns’,’removeconstantrows’,’mapminmax’})
OPF 行单元阵列的输出处理功能(默认= {‘removeconstantrows’,’mapminmax’})
DDF 数据分割功能(默认=’dividerand’)

演示示例

一个简单的演示例子,对每个模块都进行了说明:

%%  定义训练样本 
P=[-1,  -2,    3,    1;       -1,    1,    5,  -3]; % P 为输入矢量 
T=[-1, -1, 1, 1]; % T 为输出(目标)矢量 
%% 定义检验样本
Pn=[1 2;4 3];%输入
Tn=[-1 1];%输出
%%  创建一个新的前向神经网络 
net=newff(minmax(P),[3,1],{'tansig','purelin'},'trainlm');
%%  设置训练参数 
net.trainParam.show = 50; %两次显示之间的训练步数
net.trainParam.lr = 0.05; %训练速率或者学习率
net.trainParam.mc = 0.9; %动量因子
net.trainParam.epochs = 100; %训练次数,最大值为100
net.trainParam.goal = 0.1;%训练目标,默认为0
%%  调用 TRAINLM 算法训练 BP 网络 
[net,tr]=train(net,P,T); 
%%  仿真,分析网络的性能(逼近能力)
A = sim(net,P); %  计算仿真误差 (训练样本的)
E = T - A ;MSE = mse(E); %训练样本的误差 
An=sim(net,Pn); %对检验样本仿真
En = Tn - An;MSEn = mse(En); %检验样本的误差
err=[MSE MSEn]%对比训练样本的误差和检验样本的误差
%% 显示网络的权值和阈值 
inputWeights=net.IW{1,1} ; %  当前输入层权值inputbias=net.b{1} ; %  当前输入层阈值 
layerWeights=net.LW{2,1}; % 当前隐含层权值
layerbias=net.b{2} % 当前隐含层阈值
%% 图形可视化显示结果
X=[1 2 3 4  5 6];
T=[T Tn];A=[A Tn-En];
plot(X,T,‘r-’,X,A,‘b-o’); 

应用实例:蚊子的分类

已知两类蚊子的数据如下图,如果抓到三只新的蚊子,它们的触角长和翼长分别为(l.24,1.80); (l.28,1.84);(1.40,2.04).问它们应分别属于哪一个种类?

.

  • 代码:

      clear
      p1=[1.24,1.72;1.36,1.74;1.38,1.64; 1.38,1.82; 1.38,1.90; 1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
      p2=[1.14,1.78;1.18,1.96;1.20,1.86; 1.26,2.00; 1.28,2.00; 1.30,1.96];
      p=[p1;p2]'; 
       pr=mapminmax(p);
       goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)];
      plot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o');
       net=newff(pr,goal,5,{'logsig','logsig'});
       net.trainParam.show = 10;
      net.trainParam.lr = 0.05;
      net.trainParam.goal = 1e-10;
      net.trainParam.epochs = 50000;
      net = train(net,p,goal);
      x=[1.24 1.80;1.28 1.84;1.40 2.04]';
      y0=sim(net,pr)
      xn=mapminmax(x);
      y=sim(net,xn)
    

应用实例:污水处理

下图为某污水处理厂的污水处理情况,请根据样本表中的20条数据,建立一个BT神经网络预测模型,并利用检验样本表中的5条数据,来检测你所建立的神经网络模型,给出你的预测值与真实值之间的相对误差,使得相对误差最大值不超过2%,并对第6条,第七条数据作出预测。

.
.

  • 代码:

      clc;
      w=[1.16 1.35 1.72 1.86 1.97 2.15 2.23 2.48 2.79 2.85 3.07 3.45 3.59 3.80 3.93 4.14 4.46 4.55 4.84 5.03];
      r=[0.116 0.104 0.078 0.107 0.136 0.082 0.125 0.076 0.122 0.092 0.081 0.068 0.077 0.108 0.128 0.063 0.135 0.070 0.126 0.087];
      y=[50.2 59.5 58.8 66.2 65.5 64.5 73.6 76.4 78.5 79.2 81.4 90.3 93.1 98.2 97.3 98.1 97.3 98.8 96.9 98.6];
      p=[w;r];
      t=[y];
      [pn,minp,maxp,tn,mint,maxt]=premnmx(p,t);
        dx=[0,1;0,1];
      net=newff(dx,[2,8,1],{'tansig','tansig','purelin'},'trainlm');
      net.trainParam.show=1000;
      net.trainParam.lr=0.01;
      net.trainParam.goal=0.0001;
      net.trainParam.epochs=20000;
      [net,tr]=train(net,pn,tn);
      an=sim(net,pn);
      a=postmnmx(an,mint,maxt);
      x=1:20;
      figure(1);
      plot(x,a,'r--o',x,y,'b--+');
      legend('网络去除率','实际去除率');
      xlabel('实验号');ylabel('去除率');
      title('去除率学习和测试对比图');
      pnew=[1.42 2.51 3.21 4.29 5.24 2.53 3.79;0.086 0.071 0.107 0.096 0.65 0.093 0.131];
      pnewn=tramnmx(pnew,minp,maxp);
      anewn=sim(net,pnewn);
      anew=postmnmx(anewn,mint,maxt);
      kyl=anew
    

代码文件见:LJJ的Github