MATLAB神经网络(2) BP神经网络的非线性系统建模——非线性函数拟合
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神经网络的非线性系统建模——非线性函数拟合的更多相关文章
- RBF神经网络和BP神经网络的关系
作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- 神经网络与BP神经网络
一.神经元 神经元模型是一个包含输入,输出与计算功能的模型.(多个输入对应一个输出) 一个神经网络的训练算法就是让权重(通常用w表示)的值调整到最佳,以使得整个网络的预测效果最好. 事实上,在神经网络 ...
- 简单易学的机器学习算法——神经网络之BP神经网络
一.BP神经网络的概念 BP神经网络是一种多层的前馈神经网络,其基本的特点是:信号是前向传播的,而误差是反向传播的.详细来说.对于例如以下的仅仅含一个隐层的神经网络模型: watermark/ ...
- 机器学习(一):梯度下降、神经网络、BP神经网络
这几天围绕论文A Neural Probability Language Model 看了一些周边资料,如神经网络.梯度下降算法,然后顺便又延伸温习了一下线性代数.概率论以及求导.总的来说,学到不少知 ...
- MATLAB神经网络(1) BP神经网络的数据分类——语音特征信号分类
1.1 案例背景 1.1.1 BP神经网络概述 BP神经网络是一种多层前馈神经网络,该网络的主要特点是信号前向传递,误差反向传播.在前向传递中,输入信号从输入层经隐含层逐层处理,直至输出层.每一层的神 ...
- BP神经网络原理及在Matlab中的应用
一.人工神经网络 关于对神经网络的介绍和应用,请看如下文章 神经网络潜讲 如何简单形象又有趣地讲解神经网络是什么 二.人工神经网络分类 按照连接方式--前向神经网络.反馈(递归)神经网络 按照 ...
- BP神经网络及其在教学质量评价中 的应用
本文学习笔记是自己的理解,如有错误的地方,请大家指正批评.共同进步.谢谢! 之前的教学质量评价,仅仅是通过对教学指标的简单处理.如求平均值或人为的给出各指标的权值来加权求和,其评价结果带有非常大主观性 ...
- BP神经网络
BP神经网络基本原理 BP神经网络是一种单向传播的多层前向网络,具有三层或多层以上的神经网络结构,其中包含输入层.隐含层和输出层的三层网络应用最为普遍. 网络中的上下层之间实现全连接,而每层神经元之 ...
- BP神经网络原理详解
转自博客园@编程De: http://www.cnblogs.com/jzhlin/archive/2012/07/28/bp.html http://blog.sina.com.cn/s/blog ...
随机推荐
- ambulance|severely|halt
N-COUNT 救护车An ambulance is a vehicle for taking people to and from hospital. very seriously 严重地 Thei ...
- Html 的生命周期
零.序言 vue 用多了,自然离不开生命周期.最近突发奇想,加上之前看过的文章中关于 script 标签中的 async 和 defer 的捣糨糊,决定整理一下,攻克这个模糊点. 当然,最多的还是与 ...
- 3DMAX卸载/完美解决安装失败/如何彻底卸载清除干净3DMAX各种残留注册表和文件的方法
在卸载3dmax重装3dmax时发现安装失败,提示是已安装3dmax或安装失败.这是因为上一次卸载3dmax没有清理干净,系统会误认为已经安装3dmax了.有的同学是新装的系统也会出现3dmax安装失 ...
- 虚拟网卡 TUN/TAP 驱动程序设计原理(经典)
盗用-收藏 简介 虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装.本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱 ...
- 吴裕雄--天生自然 R语言开发学习:回归(续一)
#------------------------------------------------------------# # R in Action (2nd ed): Chapter 8 # # ...
- 阿里巴巴-德鲁伊druid连接池配置
阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好,Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息全部配置给Data ...
- 算法笔记-Day_01(1001 害死人不偿命的(3n+1)猜想
卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...
- 理解 LinkedList
java -version :jdk 1.8.0_191 构造 类内参数,方法 实现 基于双向链表实现. 插入时间复杂度 O(1) 查找时间复杂度 O(n) 删除时间复杂度 O(1) 修改时间复杂度 ...
- 安卓权威编程指南 -笔记(19章 使用SoundPool播放音频)
针对BeatBox应用,可以使用SoundPool这个特别定制的实用工具. SoundPool能加载一批声音资源到内存中,并支持同时播放多个音频文件.因此所以,就算用户兴奋起来,狂按按钮播放全部音频, ...
- C++扬帆远航——19(斐波那契数列第20项)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:fib.cpp * 作者:常轩 * 微信公众号:Worldhel ...