2.1 案例背景

在工程应用中经常会遇到一些复杂的非线性系统,这些系统状态方程复杂,难以用数学方法准确建模。在这种情况下,可以建立BP神经网络表达这些非线性系统。该方法把未知系统看成是一个黑箱,首先用系统输入输出数据训练BP神经网络,使网络能够表达该未知函数,然后用训练好的BP神经网络预测系统输出。

本章拟合的非线性函数为\[y = {x_1}^2 + {x_2}^2\]该函数的图形如下图所示。

t=-5:0.1:5;
[x1,x2] =meshgrid(t);
y=x1.^2+x2.^2;
surfc(x1,x2,y);
shading interp
xlabel('x1');
ylabel('x2');
zlabel('y');
title('非线性函数');

2.2 模型建立

神经网络结构:2-5-1

从非线性函数中随机得到2000组输入输出数据,从中随机选择1900 组作为训练数据,用于网络训练,100组作为测试数据,用于测试网络的拟合性能。

2.3 MATLAB实现

2.3.1 BP神经网络工具箱函数

newff

BP神经网络参数设置函数。

net=newff(P, T, S, TF, BTF, BLF, PF, IPF, OPF, DDF)

  • P:输入数据矩阵;
  • T:输出数据矩阵;
  • S:隐含层节点数;
  • TF:结点传递函数。包括硬限幅传递函数hardlim、对称硬限幅传递函数hardlims、线性传递函数purelin、正切 型传递函数tansig、对数型传递函数logsig;
x=-5:0.1:5;
subplot(2,6,[2,3]);
y=hardlim(x);
plot(x,y,'LineWidth',1.5);
title('hardlim');
subplot(2,6,[4,5]);
y=hardlims(x);
plot(x,y,'LineWidth',1.5);
title('hardlims');
subplot(2,6,[7,8]);
y=purelin(x);
plot(x,y,'LineWidth',1.5);
title('purelin');
subplot(2,6,[9,10]);
y=tansig(x);
plot(x,y,'LineWidth',1.5);
title('tansig');
subplot(2,6,[11,12]);
y=logsig(x);
plot(x,y,'LineWidth',1.5);
title('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个参数采用系统默认参数。

train

用训练数据训练BP神经网络。

[net, tr]=train(NET, X, T, Pi, Ai)

  • NET:待训练网络;
  • X:输入数据矩阵;
  • T输出数据矩阵;
  • Pi:初始化输入层条件;
  • Ai:初始化输出层条件;
  • net:训练好的网络;
  • 训练过程记录。

sim

BP神经网络预测函数。

y=sim(net, x)

  • net:训练好的网络;
  • x:输入数据;
  • y:网络预测数据。

2.3.2 数据选择和归一化

%% 基于BP神经网络的预测算法

%% 清空环境变量
clc
clear %% 训练数据预测数据提取及归一化
input=10*randn(2,2000);
output=sum(input.*input); %从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);

2.3.3 BP神经网络训练

%% 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);

2.3.4 BP神经网络预测

%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps); %网络预测输出
an=sim(net,inputn_test); %网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);

2.3.5 结果分析

%% 结果分析
figure(1)
plot(BPoutput,':og')
hold on
plot(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((BPoutput-output_test)./output_test,'-*');
title('神经网络预测误差百分比')

% 计算平均绝对百分比误差(mean absolute percentage error)
MAPE=mean(abs(BPoutput-output_test)./output_test)

2.4 扩展

2.4.1 多隐含层BP神经网络

net=newff(P, T, S, TF, BTF, BLF, PF, IPF, OPF, DDF)

S可为向量,如[5,5]表示该BP神经网络为双层,每个隐含层的节点数都是5。

  • Neural Network:神经网络结构,输入、中间层、输出维度。
  • Data Division:数据划分算法;
  • Training:训练算法;
  • Performance:误差算法;
  • Calculations:编译算法。
  • Epoch:迭代次数;
  • Time:训练时间;
  • Performance:误差;
  • Gradient:梯度;
  • Mu:阻尼因子;
  • Validation Checks:泛化能力检查。
  • Performance:误差图示;
  • Training State:训练状况图示;
  • Regression:回归曲线图示;
  • Plot Interval:绘图刻度。

2.4.2 隐含层节点数

对复杂问题来说,网络预测误差随节点数增加一般呈现先减少后增加的趋势。

2.4.3 训练数据对预测精度的影响

缺乏训练数据可能使BP神经网络得不到充分训练,预测值和期望值之间误差较大。

2.4.4 节点转移函数

一般隐含层选择logsig或tansig,输出层选择tansig或purelin。

2.4.5 网络拟合的局限性

BP神经网络虽然具有较好的拟合能力,但其拟合能力不是绝对的,对于一些复杂系统,BP 神经网络预测结果会存在较大误差。

2.5 MATLAB doc

Feedforward networks consist of a series of layers. The first layer has a connection from the network input. Each subsequent layer has a connection from the previous layer. The final layer produces the network’s output.

Feedforward networks can be used for any kind of input to output mapping. A feedforward network with one hidden layer and enough neurons in the hidden layers, can fit any finite input-output mapping problem.

  • feedforwardnet(hiddenSizes,trainFcn)

This following example loads a dataset that maps anatomical measurements x to body fat percentages t. A feedforward network with 10 neurons is created and trained on that data, then simulated.

[x,t] =  bodyfat_dataset;
net = feedforwardnet([10,10]);
view(net);
net = train(net,x,t);
y = net(x);
plot((y-t))

MATLAB神经网络(2) BP神经网络的非线性系统建模——非线性函数拟合的更多相关文章

  1. RBF神经网络和BP神经网络的关系

    作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  2. 神经网络与BP神经网络

    一.神经元 神经元模型是一个包含输入,输出与计算功能的模型.(多个输入对应一个输出) 一个神经网络的训练算法就是让权重(通常用w表示)的值调整到最佳,以使得整个网络的预测效果最好. 事实上,在神经网络 ...

  3. 简单易学的机器学习算法——神经网络之BP神经网络

    一.BP神经网络的概念     BP神经网络是一种多层的前馈神经网络,其基本的特点是:信号是前向传播的,而误差是反向传播的.详细来说.对于例如以下的仅仅含一个隐层的神经网络模型: watermark/ ...

  4. 机器学习(一):梯度下降、神经网络、BP神经网络

    这几天围绕论文A Neural Probability Language Model 看了一些周边资料,如神经网络.梯度下降算法,然后顺便又延伸温习了一下线性代数.概率论以及求导.总的来说,学到不少知 ...

  5. MATLAB神经网络(1) BP神经网络的数据分类——语音特征信号分类

    1.1 案例背景 1.1.1 BP神经网络概述 BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播.在前向传递中,输入信号从输入层经隐含层逐层处理,直至输出层.每一层的神 ...

  6. BP神经网络原理及在Matlab中的应用

    一.人工神经网络 关于对神经网络的介绍和应用,请看如下文章 ​ 神经网络潜讲 ​ 如何简单形象又有趣地讲解神经网络是什么 二.人工神经网络分类 按照连接方式--前向神经网络.反馈(递归)神经网络 按照 ...

  7. BP神经网络及其在教学质量评价中 的应用

    本文学习笔记是自己的理解,如有错误的地方,请大家指正批评.共同进步.谢谢! 之前的教学质量评价,仅仅是通过对教学指标的简单处理.如求平均值或人为的给出各指标的权值来加权求和,其评价结果带有非常大主观性 ...

  8.  BP神经网络

     BP神经网络基本原理 BP神经网络是一种单向传播的多层前向网络,具有三层或多层以上的神经网络结构,其中包含输入层.隐含层和输出层的三层网络应用最为普遍. 网络中的上下层之间实现全连接,而每层神经元之 ...

  9. BP神经网络原理详解

    转自博客园@编程De: http://www.cnblogs.com/jzhlin/archive/2012/07/28/bp.html  http://blog.sina.com.cn/s/blog ...

随机推荐

  1. TPO1-1 Groundwater

    If the pores are large,the water in them will exist as drops too heavy for surface tension to hold,a ...

  2. SHELL用法一(基本概念)

    1. SHELL 编程概念入门 1)一个完整 Linux 操作系统(Linux 内核),默认用户是不能直接操作 Linux 内核,需要借助第三方的程序或者软件去操作,例如桌面工具.命令行工具(SHEL ...

  3. stress命令安装

    一.stress(cpu) stress是一个linux下的压力测试工具,专门为那些想要测试自己的系统,完全高负荷和监督这些设备运行的用户. 下载地址http://people.seas.harvar ...

  4. Tmux 速成教程:技巧和调整

    本文转自:http://blog.jobbole.com/87584/ 简介 有些开发者经常要使用终端控制台工作,导致最终打开了过多的标签页.如果你也是他们当中的一员,或者你正在实践结对编程,那么我推 ...

  5. 吴裕雄--python学习笔记:爬虫基础

    一.什么是爬虫 爬虫:一段自动抓取互联网信息的程序,从互联网上抓取对于我们有价值的信息. 二.Python爬虫架构 Python 爬虫架构主要由五个部分组成,分别是调度器.URL管理器.网页下载器.网 ...

  6. 极力推荐大佬的java项目的博客

    此次说明:这是我从码云上拉取下来的java项目,仅供试验说明,不做任何获利渠道,若是发现有人拿此做其他用处,需像码云上这位大佬说明,特此感谢!!! 准备工作:     安装 maven,jdk1.8, ...

  7. <JZOJ4269>挑竹签

    emm一开始将++cnt敲成cnt++ 就很委屈 一个拓扑排序而已 Description 挑竹签——小时候的游戏 夏夜,早苗和诹访子在月光下玩起了挑竹签这一经典的游戏.挑竹签,就是在桌上摆上一把竹签 ...

  8. SWUST OJ Delete Numbers(0700)

    Delete Numbers(0700) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 1731 Accepted: 373   D ...

  9. 不同环境下的mvn运行指令

    ///////////////// 研发环境 //////////////////////////////////////// 清空环境: mvn clean -DAPP_ENV=dev 建立Ecli ...

  10. java虚拟机的运行原理

    一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入 javac YourClassNam ...