(转载)BP神经网络的非线性系统建模(matlab实现)

news2025/1/24 14:53:47

1案例背景

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

        该函数的图像如图2-1所示:

图2-1 函数图像

2模型建立

        基于BP神经网络的非线性函数拟合算法流程可以分为BP神经网络构建,BP神经网络训练和 BP神经网络预测三步,如图2-2所示。


        BP神经网络构建根据拟合非线性函数特点确定BP神经网络结构,由于该非线性函数有两个输入参数,一个输出参数,所以BP神经网络结构为2--5—1,即输入层有2个节点,隐含层有5个节点,输出层有1个节点。
        BP神经网络训练用非线性函数输入输出数据训练神经网络,使训练后的网络能够预测非线性函数输出。从非线性函数中随机得到2000组输入输出数据,从中随机选择1900组作为训练数据,用于网络训练,100组作为测试数据,用于测试网络的拟合性能。
        神经网络预测用训练好的网络预测函数输出,并对预测结果进行分析。

3 MATLAB实现

        根据BP神经网络理论,用 MATLAB 软件编程实现基于BP神经网络的非线性拟合算法。

3.1 BP神经网络工具箱函数

        MATLAB软件中包含MATLAB神经网络工具箱。它是以人工神经网络理论为基础,用MATLAB 语言构造出了该理论所涉及的公式运算、矩阵操作和方程求解等大部分子程序以用于神经网络的设计和训练。用户只需根据自己的需要调用相关的子程序,即可以完成包括网络结构设计,权值初始化,网络训练及结果输出等在内的一系列工作,免除编写复杂庞大程序的困扰。目前,MATLAB神经网络工具箱包括的网络有感知器、线性网络、BP神经网络,径向基网络、自组织网络和回归网络等。BP神经网络主要用到newff,sim和 train 3个神经网络函数,各函数解释如下。

3.1.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个参数采用系统默认参数。

3.1.2.train: BP神经网络训练函数

函数功能:用训练数据训练BP神经网络。
函数形式:[net,tr] =train(NET,X,T,Pi,Ai)NET:待训练网络。
X:输入数据矩阵。

T:输出数据矩阵。
Pi:初始化输入层条件。

Ai:初始化输出层条件。

net:训练好的网络。

tr:训练过程记录。
一般在使用过程中设置前面3个参数,后面2个参数采用系统默认参数。

3.1.3. sim:BP神经网络预测函数

函数功能:用训练好的BP 神经网络预测函数输出。

函数形式:y=sim(net,x)
net:训练好的网络。
x:输入数据。
y:网络预测数据。

3.1.4完整matlab代码

        首先,根据非线性函数方程随机得到该函数的2000组输人输出数据,将数据存储在 data.mat文件中, input 是函数输入数据,output是函数输出数据。从输入输出数据中随机选取1900组数据作为网络训练数据,100组数据作为网络测试数据,并对训练数据进行归一化处理。

        其次,用训练数据训练BP 神经网络,使网络对非线性函数输出具有预测能力。

        最后,用训练好的BP神经网络预测非线性函数输出,并通过神经网络预测输出和期望输出

分析BP神经网络的拟合能力。
%% 该代码为基于BP神经网络的预测算法
%% 清空环境变量
clc
clear

%% 训练数据预测数据提取及归一化
%下载输入输出数据
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 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((output_test-BPoutput)./BPoutput,'-*');
title('神经网络预测误差百分比')

errorsum=sum(abs(error));

4结果分析

        用训练好的 BP 神经网络预测函数输出,预测结果、BP 神经网络预测输出和期望输出的误差如下图 所示。

        从上图可以看出,虽然BP神经网络具有较高的拟合能力,但是网络预测结果仍有一定误差,某些样本点的预测误差较大。后面案例中将讨论BP神经网络优化算法,以期得到更好的预测结果。

5案例扩展

5.1多隐含层 BP神经网络

        BP神经网络由输入层、隐含层和输出层组成,隐含层根据层数又可以分为单隐含层和多隐含层。多隐含层由多个单隐含层组成,同单隐含层相比,多隐含层泛化能力强、预测精度高,但是训练时间较长。隐含层层数的选择要从网络精度和训练时间上综合考虑,对于较简单的映射关系,在网络精度达到要求的情况下,可以选择单隐含层,以求加快速度;对于复杂的映射关系,则可以选择多隐含层,以期提高网络的预测精度。
        MATLAB神经网络工具箱中的newff函数可以方便地构建包含多个隐含层的BP神经网络,其调用函数如下:

net = newff(inputn,outputn,[5,5]);
        从运行时间和预测精度两个方面比较单隐含层BP神经网络和双隐含层BP神经网络的性能,网络结构相同,训练迭代都为100次,比较10次预测结果平均值,比较结果如表2-1 所列。

 

        从表2-1可以看出,双隐含层BP神经网络同单隐含层BP神经网络相比,预测精度有所提高,但是运行时间有所增加。

5.2 隐含层节点数

        BP神经网络构建时应注意隐含层节点数的选择,如果隐含层含节点数太少,BP神经网络不能建立复杂的映射关系,网络预测误差较大。但是如果节点数过多,网络学习时间增加,并且可能出现“过拟合”现象,就是训练样本预测准确,但是其他样本预测误差较大。不同隐含层节点数BP神经网络预测误差如表2-2所列。

        由于本案例拟合的非线性函数较为简单,所以BP神经网络预测误差随着节点数的增加而不断减少,但是对于复杂问题来说﹐网络预测误差随节点数增加一般呈现先减少后增加的趋势。

5.3训练数据对预测精度影响

        神经网络预测的准确性和训练数据的多少有较大的关系,尤其对于一个多输人多输出的网络,如果缺乏足够多的网络训练数据,网络预测值可能存在较大的误差。
        笔者曾经做过一个 BP神经网络预测实例,该实例通过建立一个4输入、5输出BP 神经网络预测实验结果。网络训练数据来自于真实实验﹐由于实验过程复杂,故只取到84组数据,选择其中80组数据作为BP神经网络训练数据,其余4组数据作为测试数据,训练后的BP神经网络预测结果如表2-3所列。
        从表2-3可以看出,由于缺乏训练数据,BP神经网络没有得到充分训练,BP神经网络预测值和期望值之间误差较大。
        笔者曾经做过一个类似的预测问题,该问题的目的是构建一个4输入4输出的 BP神经网络预测系统输出,训练数据来自于模型仿真结果。由于该模型可以通过软件模拟﹐所以得到多组数据,选择1500组数据训练网络,最后网络预测值同期望值比较接近。

5.4节点转移函数

MATLAB神经网络工具箱中newff函数提供了几种节点转移函数,主要包括以下三种。

        在网络结构和权值,阈值相同的情况下,BP神经网络预测误差和均方误差、输出层节点转移函数的关系如表2-4所列。

        从表2-4可以看出,隐含层和输出层函数的选择对BP神经网络预测精度有较大影响。一般隐含层节点转移函数选用logsig函数或tansig函数,输出层节点转移函数选用tansig或purelin函数。

5.5网络拟合的局限性

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

        其函数图形 如图 2-6 所示。

        随机选取该函数2000组输入输出数据,从中取1900组数据训练网络,100组数据测试网络拟合能力。采用单隐含层BP神经网络,网络结构为2—5—1,网络训练100次后预测函数输出,预测结果如图2-7所示。从图2-7可以看出,对于复杂的非线性系统,BP神经网络预测误差较大。该例说明BP神经网络的拟合能力具有局限性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/767444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【外卖系统】环境的搭建

搭建数据库 1.创建数据库,名字叫reiggie 2.导入数据库 创建Maven项目 1.创建项目 2.检查项目新建的是否有问题 3.导入pom.xml文件 4.导入application.yml文件 在从gittee上down的代码的基础上,修改一下端口号,数据库的名称什么的 …

(数组与矩阵) 剑指 Offer 29. 顺时针打印矩阵 ——【Leetcode每日一题】

❓ 剑指 Offer 29. 顺时针打印矩阵 难度:简单 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2: 输…

DP转HDMI方案芯片-CS5218/CS5263/CS5363/CS5463详细参数对比说明

CS5218/CS5263/CS5363/CS5463都可用于设计DP转HDMI转接线方案,但几者间不管封装还是功能参数都有差异,如下介绍对比下: CS5218 DP to HDMI(4K30HZ) ,CS5218管脚定义参数说明和设计电路图: ​ ​ CS5263 DP to HDMI 4…

Kubernetes_1.27.3_Harbor结合Nacos实战

Nacos 实战 作者:行癫(盗版必究) 一:Nacos简介 1.简介 ​ Nacos是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台;Nacos 致力于帮助您发现、配置和管理微服务;Nacos 提供了一组简单易用的特…

计讯物联5G千兆网关TG463在电力智能巡检机器人的应用功能解析

项目背景 随着国家智能电网建设加速推进,投资规模持续扩大,我国电网智能化、信息化不断提高,传统的电力运维与管理模式早已不能满足智能电网快速发展的需求。因此,在5G无线通信、人工智能、物联网、云计算、大数据、电力等前沿技术…

Error: The client is unauthorized due to authentication failure.解决办法

进入到neo4j的安装目录 修改neo4j.conf配置文件 把红框的注释#去掉保存后,重新运行neo4j,问题解决

【Python统计与数据分析实战_01】位置与分散程度的度量

数据描述性分析 1.描述统计量1.1 位置与分散程度的度量1.1.1 例子一 单维数组1.1.2 例子二 多维数组 1.2 关系度量1.3 分布形状的度量1.3.1 统计量:偏度和峰度 1.4 数据特性的总括 1.描述统计量 数据的统计分析分为统计描述和统计推断两部分。前者通过绘制统计图、…

Vue3.0的设计目标是什么?做了哪些优化?

一、设计目标 不以解决实际业务痛点的更新都是耍流氓,下面我们来列举一下Vue3之前我们或许会面临的问题 随着功能的增长,复杂组件的代码变得越来越难以维护 缺少一种比较「干净」的在多个组件之间提取和复用逻辑的机制 类型推断不够友好 bundle的时间太久了 而 Vue3 经过长达…

RuoYi-Vue/vue项目访问 webpack 中定义的变量

前言 RuoYi-Vue 3.8.4 webpack 中定义的变量 vue.config.js 中定义的 webpack 的变量 在html页面中&#xff0c;如何访问 webpack 的变量 <title><% webpackConfig.name %></title>参考&#xff1a;ruoyi-ui/public/index.html 文件

【分布式训练】基于Pytorch的分布式数据并行训练

基于Pytorch的分布式数据并行训练 动机为什么要并行分布数据&#xff1f;现有资料的不足 Outline整体框架图带解释的最小demo示例没有multiprocessing开启multiprocessing 分布式训练启动方式混合精度训练&#xff08;采用apex&#xff09; 参考资料 简介&#xff1a; 在PyTorc…

一则 MySQL 参数设置不当导致复制中断的故障案例

本文分享了一个数据库参数错误配置导致复制中断的问题&#xff0c;以及对参数配置的建议。 作者&#xff1a;秦福朗 爱可生 DBA 团队成员&#xff0c;负责项目日常问题处理及公司平台问题排查。热爱互联网&#xff0c;会摄影、懂厨艺&#xff0c;不会厨艺的 DBA 不是好司机&…

Linux学习之运算符

是赋值运算符&#xff0c;可以把一个变量设置上特定的值&#xff0c;而算术运算符就包括加减乘除&#xff08;、-、*、/&#xff09;&#xff0c;需要使用expr这个命令进行运算。 expr 5 7可以计算出来5与7的和&#xff0c;使用echo $?可以看到expr 5 7这个命令的返回值是0&…

神经网络正则化之BN/LN/GN的原理

1. BN层原理 torch.nn.BatchNorm2d(num_features, eps1e-05, momentum0.1, affineTrue, track_running_statsTrue,deviceNone,dtypeNone) 为什么用BN? 加速训练。之前训练慢是因为在训练过程中&#xff0c;整体分布逐渐往非线性函数的取值区间的上下限端靠近(参考sigmoid函数…

10.6.5 【Linux】分区命令: split

如果你有文件太大&#xff0c;导致一些携带式设备无法复制的问题&#xff0c;split可以将一个大文件&#xff0c;依据文件大小或行数来分区&#xff0c;可以将大文件分区成为小文件&#xff0c;快速有效。 将文件分区的话&#xff0c;使用-b size来将一个分区的文件限制其大小&…

软件测试岗位之我所思我所见

从业以来&#xff0c;见过很多人&#xff0c;看过很多事。唯独“测试”我觉得是我自己选的路。所以现在这个时间点&#xff0c;我想分享下我对测试的看法&#xff1a; 1、测试 &#xff1a;“轻松” “劳累” 作为一个测试&#xff0c;你可以轻松的没有下限&#xff0c;也可…

重写equals为什么要重写hashCode(配合源码分析)

目录 一、hashCode的概念 二、为什么要有hashCode 三、为什么重写equals要重写hashCode 四、HashSet源码分析 五、容易记混的点 一、hashCode的概念 hashCode()是Object定义的方法&#xff0c;它将返回一个整型值&#xff0c;这个方法通常用来将对象的内存地址转换为整数之…

postman批量执行请求,通过json传参

1、创建请求 "authUid":"{{authUid}}", 加粗为需要替换的参数 2、组装JSON 可通过Excel自动填充功能构造数据 [ {"authUid":"18700000001"}, {"authUid":"18725929202"} ] 3、批量执行请求配置 4、然后start r…

「网络编程」传输层协议_ UDP协议学习_及原理深入理解

「前言」文章内容大致是传输层协议&#xff0c;UDP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、传输层二、UDP协议2.1 再谈端口号2.2.1 端口号范围划分2.2.2 认识知名端口号2.2.3 端口号注意问题2.2.4 netstat命令和pidof命令 2.2 UD…

实时数据集成的完美搭档:CDC技术与Kafka集成的解决方案

目录 一、实时数据同步 二、可靠的数据传输 三、灵活的数据处理 四、解耦数据系统 五、主流免费CDC工具介绍 六、Flink CDC安装使用步骤&#xff1a; 七、ETL CDC安装使用步骤 八、写在最后 一、实时数据同步 随着企业数据不断增长&#xff0c;如何高效地捕获、同步和…

如何将视频音频提取出来?这几个方法真的实用!

在视频制作和后期处理中&#xff0c;有时我们需要将视频中的音频提取出来&#xff0c;以便单独处理&#xff0c;如剪辑、增强声音等&#xff0c;而不影响视频内容。为了帮助您实现这一目标&#xff0c;下面将介绍几种常用的方法来提取视频音频。 方法一&#xff1a;记灵在线工…