一.推荐

本文不再介绍神经网络的基本概念和推到过程,博主还是会给出推荐:
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神经网络实用性操作(四步模板)和主要网络参数介绍相关推荐

  1. 使用pytorch构建一个神经网络、损失函数、反向传播、更新网络参数

    关于torch.nn: 使用Pytorch来构建神经网络, 主要的工具都在torch.nn包中. nn依赖于autograd来定义模型, 并对其自动求导. 构建神经网络的典型流程: 定义一个拥有可学习 ...

  2. linux编程参数列表,Linux编程 14 文件权限(用户列表passwd,用户控制shadow,useradd模板与useradd命令参数介绍)...

    一. 概述 linux安全系统的核心是用户账户. 创建用户时会分配用户ID(UID). UID是唯一的,但在登录系统时不是用UID,而是用登录名.在讲文件权限之之前,先了解下linux是怎样处理用户账 ...

  3. matlab利用训练好的BP神经网络来预测新数据(先保存网络,再使用网络)

    1,保存网络. save ('net') % net为已训练好的网络,这里把他从workspace保存到工作目录,显示为net.mat文档. 2,使用网络. load ('net') % net为上面 ...

  4. 基于GA优化BP神经网络的传感器故障诊断算法matlab仿真

    目录 一.理论基础 二.核心程序 三.仿真测试结果 一.理论基础 1.做优化要先明白优化的结果是什么? 使得网络参数配置最优,测试集预测误差最小--适应度函数 2.可以通过改变什么来使得网络结果不同? ...

  5. BP神经网络预测回归MATLAB代码(代码完整可直接用,注释详细,可供学习)

    BP神经网络预测回归MATLAB代码(代码完整可直接用,注释详细,可供学习) 一.前言 二.代码部分 2.1 初始化 2.2 读取数据 2.3 设置训练集和测试集 2.4 数据归一化 2.5 求解最佳 ...

  6. 基于遗传算法优化的BP神经网络

    文章目录 BP神经网络和遗传算法 算法用途 实例分析 BP神经网络 GA-BP神经网络 遗传算法的步骤: GA-BP神经网络MATLAB源码 实现形式(一) 实现形式(二) 实现形式(三) BP神经网 ...

  7. bp神经网络算法的优缺点,bp神经网络与bp算法区别

    前馈神经网络.BP神经网络.卷积神经网络的区别与联系 一.计算方法不同1.前馈神经网络:一种最简单的神经网络,各神经元分层排列.每个神经元只与前一层的神经元相连.接收前一层的输出,并输出给下一层.各层 ...

  8. 一文看懂BP神经网络的基础数学知识

    看懂本文需要的基础知识有: 能够理解最基本的最优化问题(例如最小二乘法优化) 学习过高数和线性代数,对数学符号有概念 一定的编程基础 最好明白感知器的概念 神经网络的基本知识 1.0 历史与发展 线性 ...

  9. bp神经网络应用实例_预测方法合集——BP神经网络

    首先来说说神经网络,生物的大脑神经元,细胞,触点等组成了网络,用于产生生物的意识,帮助生物进行思考和行动,可以干很多很多事情的,虽然说现在科技迅猛进步,但是目前来讲人脑依旧是最发达的,有的这些科学家啊 ...

最新文章

  1. 黄聪:Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)...
  2. android sd卡列目录文件_Android正确获取SD卡目录及使用SD卡目录
  3. 互联网协议 — BGP 边界网关协议 — Router(路由器)
  4. Hive2.1.0集成Tez
  5. 继承和多态的区别[发现记混了,区别下]
  6. oracle中如何创建dblink
  7. C# JsonHelper类
  8. 漫步数学分析十三——路径连通
  9. 铁乐学Python_day09_函数
  10. impala查询数据与hive的查询数据比对(数据的校验)
  11. vue中 点击二维码刷新图片(src不变)
  12. 使用D3绘制图表(6)--竖直柱状图表
  13. 导入JasperReports坐标时无法下载com.lowagie:itext:jar:2.1.7.js6
  14. 后台网站首页设计过程
  15. HTML 常用选择框
  16. 前端如何在本地启动一个服务,跑打包后的项目
  17. F28335舵机控制器(3)——第三版PCB
  18. PaddingError: Placeholder of length ‘30‘ too short in package
  19. 气体灭火系统和自动喷水灭火系统之区别
  20. 为什么谷歌不起诉华为的鸿蒙系统?

热门文章

  1. Android 音视频开发(三) -- Camera2 实现预览、拍照功能
  2. SSL数字证书认证的过程
  3. 亚德诺半导体收购竞争对手美信;凯西与拜耳将在华共同推广宝丽亚和启尔畅 | 美通企业日报...
  4. 计算机应用技术教程计应吗,计算机应用技术教程
  5. 网页防篡改技术发展趋势
  6. 中标麒麟+QT+达梦数据库
  7. 元宇宙是骗局,还是人类的未来?
  8. VUE项目获取微信二维码 (返回了的是一个html)
  9. 上银驱动器使用手册_上银伺服电机调试说明书.ppt
  10. 汇编——32位汇编基础框架