BP神经网络实用性操作(四步模板)和主要网络参数介绍
一.推荐
本文不再介绍神经网络的基本概念和推到过程,博主还是会给出推荐:
1.MATLAB方面 ——(1)BP神经网络计算原理: 推荐CSDN的博主:奔跑的Yancy,网址如下:https://blog.csdn.net/lyxleft/article/details/82840787
(备注: 这篇博客中的BP推到过程中输入的正向传递,反向误差传递写的都挺好)
(2)BP公式推导方面:博主:zhiyong_will,网址:https://blog.csdn.net/google19890102/article/details/32723459
2.C语言方面——推荐博客:博主:一朝英雄拔剑起,网址:https://blog.csdn.net/qq_39545674/article/details/82495569
3.Python方面——推荐博主:liu_coding,网址:https://blog.csdn.net/net_wolf_007/article/details/52055718
(备注: 当然,也可以完全忽略以上推荐的内容,以上是博主为自己记下的几个还可以的BP方面的相关博客,方便更加全面了解)
二.正文
因为,BP神经网络方面不管还是原理还是推到过程亦或是MATLAB、C语言或是Python都已经被大量介绍过了,但是几乎很少有快速上手的指导内容,本文 (1)基于MATLAB工具箱,给出 (2)具体四步骤实现使用操作,并主要介绍 (3)设置参数的具体意义。
1.加载数据
%% 1.加载训练数据
data=xlsread('。。。。.xlsx');
exercise=[]'
tagret=data()';
2.建立BP神经网络,MATLAB中神经网络使用newff函数
%2.net = newff(minmax(p),[隐含层的神经元个数,输出层的神经元个数],{隐层神经元的传输函数TF1,输出层的传输函数TF2},'反向传播的训练函数')
%一般在这里还有其他的传输的函数一般的如下,如果预测出来的效果不是很好,可以调节
%TF1 = 'tansig';TF2 = 'logsig';
%TF1 = 'logsig';TF2 = 'purelin';
%TF1 = 'logsig';TF2 = 'logsig';
%TF1 = 'purelin';TF2 = 'purelin';
% 指定训练参数
% net.trainFcn = 'traingd'; % 梯度下降算法
% net.trainFcn = 'traingdm'; % 动量梯度下降算法
% net.trainFcn = 'traingda'; % 变学习率梯度下降算法
% net.trainFcn = 'traingdx'; % 变学习率动量梯度下降算法
% (大型网络的首选算法)
% net.trainFcn = 'trainrp'; % RPROP(弹性BP)算法,内存需求最小
% 共轭梯度算法
% net.trainFcn = 'traincgf'; %Fletcher-Reeves修正算法
% net.trainFcn = 'traincgp'; %Polak-Ribiere修正算法,内存需求比Fletcher-Reeves修正算法略大
% net.trainFcn = 'traincgb'; % Powell-Beal复位算法,内存需求比Polak-Ribiere修正算法略大
% (大型网络的首选算法)
%net.trainFcn = 'trainscg'; % ScaledConjugate Gradient算法,内存需求与Fletcher-Reeves修正算法相同,计算量比上面三种算法都小很多
% net.trainFcn = 'trainbfg'; %Quasi-Newton Algorithms - BFGS Algorithm,计算量和内存需求均比共轭梯度算法大,但收敛比较快
% net.trainFcn = 'trainoss'; % OneStep Secant Algorithm,计算量和内存需求均比BFGS算法小,比共轭梯度算法略大
% (中型网络的首选算法)
%net.trainFcn = 'trainlm'; %Levenberg-Marquardt算法,内存需求最大,收敛速度最快
% net.trainFcn = 'trainbr'; % 贝叶斯正则化算法
% 有代表性的五种算法为:'traingdx','trainrp','trainscg','trainoss', 'trainlm'
%在这里一般是选取'trainlm'函数来训练,其算对对应的是Levenberg-Marquardt算法
3.网络参数的设置
这里的参数主要为以下内容:
(1)隐含层层数:一般为一层,最基础实用简单计算量少;
(2)各层神经元个数:输入层和输出层有时随着系统的确定神经元个数差不多就已确定,例如电池BMS系统,如果使用BP那么输入信号一般两个(电流和电压)或者三个(电流电压温度),输出信号一般一个(SOC数值);另外隐含层神经元个数我推荐不要少于5个;
(3)设置训练目标误差:根据系统设置,比如输出值为0-1之间的数,精度要求预测值和实际值误差在0.01以内,那目标误差理论上只要你设置小于这个误差一个数量级以下,为了尽量改善收敛效果,加大收敛力度还是目标误差设置较小一点比较恰当,不然容易提前中断训练。
(4)显示训练结果的时间间隔步数:这个跟你输入数据的时间间隔有关,训练时间间隔是输入采样时间的整数倍即可,我推荐就等于输入数据的采样时间;
(5)训练次数设置:离线情况下,训练次数要小于输入总的采样次数(总的采样次数=总的采样时间/采样时间),但训练次数又不能太小,否者造成训练不充分,训练结果没有收敛,应该是总的采样次数的后20%区间。
(6)训练允许时间,默认值INF:这个采取默认值即可;
(7)学习率,默认值为0.01:学习率和误差反向传播修正权值的步长关系很大;
(8)动力因子,缺省为0.9:下面详细介绍;
(9)最小性能梯度:下面详细介绍。
%3网络参数的设置
net.trainparam.goal=; %设置训练目标误差
net.trainparam.show=; %显示训练结果的时间间隔步数
net.trainparam.epochs=; %训练次数设置
% net.trainParam.time=; %训练允许时间,默认值INF
% net.trainParam.Lr=; %学习率,默认值0.01
% net.trainParam.mc=; %动量因子,缺省为0.9
trainParam.min_grad=; %最小性能梯度[net,tr]=train(net,exercise,tagret);
4.计算仿真,一般采用sim函数
Y=sim(net,exercise);
5.进入MATLAB的工具箱界面
第一部分,即Neural Network,图形显示的是神经网络的结构图,可知有一个隐层一个输出层;
第二部分,即Algorithms,显示的是训练算法,这里为学习率自适应的梯度下降BP算法;误差指标为MSE;
第三部分,即Progress,显示训练进度:
Epoch:训练次数;在其右边显示的是最大的训练次数,可以设定,上面例子中设为300;而进度条中显示的是实际训练的次数,上面例子中实际训练次数为146次。
Time:训练时间,也就是本次训练中,使用的时间
Performance:性能指;本例子中为均方误差(mse)的最大值。精度条中显示的是当前的均方误差;进度条右边显示的是设定的均方误差(如果当前的均方误差小于设定值,则停止训练),这个指标可以用用.trainParam.goal参数设定。
Gradiengt:梯度;进度条中显示的当前的梯度值,其右边显示的是设定的梯度值。如果当前的梯度值达到了设定值,则停止训练。
validation check为泛化能力检查(若连续6次训练误差不降反升,则强行结束训练)
第四部分,即Plots,为作图。分别点击三个按钮能看到误差变化曲线,分别用于绘制当前神经网络的性能图,训练状态和回归分析。
6.几个参数介绍
(1)动力因子: 这个参数常常没有被很好的重视,其是BP批处理训练时会陷入局部最小,也就是误差本身基本上已不变化,其返回的信号对权值调整很小,但总误差大于训练设定条件。动力因子有助于其反馈的误差信号使神经元权值重新振荡起来,一定程度上避免算法局部收敛,整体仍然发散,就结束训练结束学习过程。
参考文档
BP神经网络实用性操作(四步模板)和主要网络参数介绍相关推荐
- 使用pytorch构建一个神经网络、损失函数、反向传播、更新网络参数
关于torch.nn: 使用Pytorch来构建神经网络, 主要的工具都在torch.nn包中. nn依赖于autograd来定义模型, 并对其自动求导. 构建神经网络的典型流程: 定义一个拥有可学习 ...
- linux编程参数列表,Linux编程 14 文件权限(用户列表passwd,用户控制shadow,useradd模板与useradd命令参数介绍)...
一. 概述 linux安全系统的核心是用户账户. 创建用户时会分配用户ID(UID). UID是唯一的,但在登录系统时不是用UID,而是用登录名.在讲文件权限之之前,先了解下linux是怎样处理用户账 ...
- matlab利用训练好的BP神经网络来预测新数据(先保存网络,再使用网络)
1,保存网络. save ('net') % net为已训练好的网络,这里把他从workspace保存到工作目录,显示为net.mat文档. 2,使用网络. load ('net') % net为上面 ...
- 基于GA优化BP神经网络的传感器故障诊断算法matlab仿真
目录 一.理论基础 二.核心程序 三.仿真测试结果 一.理论基础 1.做优化要先明白优化的结果是什么? 使得网络参数配置最优,测试集预测误差最小--适应度函数 2.可以通过改变什么来使得网络结果不同? ...
- BP神经网络预测回归MATLAB代码(代码完整可直接用,注释详细,可供学习)
BP神经网络预测回归MATLAB代码(代码完整可直接用,注释详细,可供学习) 一.前言 二.代码部分 2.1 初始化 2.2 读取数据 2.3 设置训练集和测试集 2.4 数据归一化 2.5 求解最佳 ...
- 基于遗传算法优化的BP神经网络
文章目录 BP神经网络和遗传算法 算法用途 实例分析 BP神经网络 GA-BP神经网络 遗传算法的步骤: GA-BP神经网络MATLAB源码 实现形式(一) 实现形式(二) 实现形式(三) BP神经网 ...
- bp神经网络算法的优缺点,bp神经网络与bp算法区别
前馈神经网络.BP神经网络.卷积神经网络的区别与联系 一.计算方法不同1.前馈神经网络:一种最简单的神经网络,各神经元分层排列.每个神经元只与前一层的神经元相连.接收前一层的输出,并输出给下一层.各层 ...
- 一文看懂BP神经网络的基础数学知识
看懂本文需要的基础知识有: 能够理解最基本的最优化问题(例如最小二乘法优化) 学习过高数和线性代数,对数学符号有概念 一定的编程基础 最好明白感知器的概念 神经网络的基本知识 1.0 历史与发展 线性 ...
- bp神经网络应用实例_预测方法合集——BP神经网络
首先来说说神经网络,生物的大脑神经元,细胞,触点等组成了网络,用于产生生物的意识,帮助生物进行思考和行动,可以干很多很多事情的,虽然说现在科技迅猛进步,但是目前来讲人脑依旧是最发达的,有的这些科学家啊 ...
最新文章
- 黄聪:Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)...
- android sd卡列目录文件_Android正确获取SD卡目录及使用SD卡目录
- 互联网协议 — BGP 边界网关协议 — Router(路由器)
- Hive2.1.0集成Tez
- 继承和多态的区别[发现记混了,区别下]
- oracle中如何创建dblink
- C# JsonHelper类
- 漫步数学分析十三——路径连通
- 铁乐学Python_day09_函数
- impala查询数据与hive的查询数据比对(数据的校验)
- vue中 点击二维码刷新图片(src不变)
- 使用D3绘制图表(6)--竖直柱状图表
- 导入JasperReports坐标时无法下载com.lowagie:itext:jar:2.1.7.js6
- 后台网站首页设计过程
- HTML 常用选择框
- 前端如何在本地启动一个服务,跑打包后的项目
- F28335舵机控制器(3)——第三版PCB
- PaddingError: Placeholder of length ‘30‘ too short in package
- 气体灭火系统和自动喷水灭火系统之区别
- 为什么谷歌不起诉华为的鸿蒙系统?
热门文章
- Android 音视频开发(三) -- Camera2 实现预览、拍照功能
- SSL数字证书认证的过程
- 亚德诺半导体收购竞争对手美信;凯西与拜耳将在华共同推广宝丽亚和启尔畅 | 美通企业日报...
- 计算机应用技术教程计应吗,计算机应用技术教程
- 网页防篡改技术发展趋势
- 中标麒麟+QT+达梦数据库
- 元宇宙是骗局,还是人类的未来?
- VUE项目获取微信二维码 (返回了的是一个html)
- 上银驱动器使用手册_上银伺服电机调试说明书.ppt
- 汇编——32位汇编基础框架