BP神经网络参数总结,BP神经训练窗口详解,基于BP神经网络的火灾识别,1000案例之17

news/2024/5/2 5:38:56/文章来源:https://blog.csdn.net/abc991835105/article/details/129173903

目录

摘要
BP神经网络参数设置及各种函数选择
参数设置
训练函数
传递函数
学习函数
性能函数
显示函数
前向网络创建函数
BP神经网络训练窗口详解
训练窗口例样
训练窗口四部详解
基于B P神经网络的火灾识别
数据集
MATLAB编程BP神经网络代码,并附有GUI窗口
效果图

摘要

本文总结BP神经网络的参数设置,训练函数,传递函数,学习函数,画图函数,性能函数,创建函数,详解nntraintool训练窗口,以基于BP神经网络的火灾识别为例子,实现BP神经网络的编程

BP神经网络参数设置及各种函数选择

参数设置

1,最大迭代次数net.trainParam.epochs,一般先设置大,然后看训练收敛情况,如果提前收敛,最大迭代次数就改小,以到达训练目标为目的设置。
2,学习率net.trainParam.lr,一般设置0.01–0.5,数据越多,数据噪声越大,数据越难拟合,数值一般需要越小,设置太大,容易过早停止收敛。
3,学习目标net.trainParam.goal,根据训练测试的情况进行调整,过大容易过拟合,测试效果差,过小达不到想要的效果。

4,最大丢失次数net.trainParam.max_fail,既联系不收敛次数,达到这个次数后BP神经网络停止迭代,终止训练,主要目的是防止过拟合,太小容易过早停止迭代,太大容易过拟合,默认是6,需要依据训练测试情况和学习目标,妥协调整。
5,隐含层数,常见的是三个隐含层以内,再多也没有看到有明显的优势,数据好拟合,一个隐含层就足够,数据难拟合,更多层,收敛效果一般也没有明显改善。
6,隐含层神经元个数,按经验公式设置,试凑法调整。

训练函数

trainr 随机顺序递增更新训练函数

trainrp 带反弹的BP训练函数

trains 顺序递增BP训练函数

trainscg 量化连接梯度BP训练函数

trainbrBayes 规范化BP训练函数

trainc 循环顺序渐增训练函数

traincgb Powell-Beale连接梯度BP训练函数

traincgf Fletcher-Powell连接梯度BP训练函数

traincgp Polak-Ribiere连接梯度BP训练函数

traingda 自适应lrBP的梯度递减训练函数

traingdx 动量及自适应lrBP的梯度递减训练函数

trainlm Levenberg-Marquardt BP训练函数

trainoss 一步正切BP训练函数

传递函数:

logsig S型的对数函数

dlogsig logsig的导函数,有些MATALB版本不可用

tansig S型的正切函数

dtansig tansig的导函数,有些MATALB版本不可用

purelin 纯线性函数

dpurelin purelin的导函数,有些MATALB版本不可用

学习函数

learngdm 梯度下降栋梁学习函数

learngd 基于梯度下降法的学习函数

性能函数

mse 均方误差函数

msereg 均方误差规范化函数

显示函数

plotperf 绘制网络的性能

plotes 绘制一个单独神经元的误差曲面

plotep 绘制权值和阈值在误差曲面的位置

errsurf 计算单个神经元的误差曲面

前向网络创建函数

newffd 创建存在输入延迟的前向网络

newcf 创建级联前向网络

newff 创建前向BP网络

BP神经网络训练窗口详解

训练窗口例样

在这里插入图片描述

训练窗口详解

如根上图所示分为四个部分:   
1,Neural Network
    这里显示的是输入层神经元个数大小,中间层数量以及每层的神经元个数。

2,Algorithms
  Data Division:Random。这表示使用随机指数将目标分成三组,分别作为train,validation,test。
  Training:levenberg-Marquardt。这表示学习训练函数为trainlm。
  Performance:Mean Squared Error。这表示性能用均方误差来表示。
  Calculations: MEX。该网络保存为mex格式
3,Progress
  Epoch:该网络允许的迭代次数最大为500,实际迭代31次
  Time:运行时间。
  Performance:该网络的最大误差为1.96,目标误差为0.0001,实际误差为0.00475,可在Plots中的Performance中详细查看
  Gradient:该网络的最大梯度为1.83,阈值梯度为1e−7 1e^{-7}1e −7。
  Validation Checks:最大验证失败次数。(解释:比如默认是6,则系统判断这个验证集误差是否在连续6次检验后不下降,如果不下降或者甚至上升,说明training set训练的误差已经不再减小,没有更好的效果了,这时再训练就没必要了,就停止训练,不然可能陷入过拟合。)

4,Plots
  Performance:这里可以点进去,看train, validation和test的性能。
  在这里插入图片描述

Training State:记录Gradient和Validation Checks。
  在这里插入图片描述

Regression:通过绘制回归线来测量神经网络对应数据的拟合程度。
在这里插入图片描述
Plot Interval:训练窗口更新次数,等于10的时候,每迭代10次更新一次

基于B P神经网络的火灾识别

数据集

在这里插入图片描述

在这里插入图片描述

MATLAB编程BP神经网络代码,并附有GUI窗口

部位代码,如需要完整的,可以留言
clear all
% close allk
clc
global h_axes1;
% global h_axes2;
global edit2;
h_f=figure(‘name’,‘图像识别系统’,‘position’,[300,100,800,700]);
clf reset;
set(h_f, ‘defaultuicontrolfontsize’ ,12);
set(h_f, ‘defaultuicontrolfontname’ , ‘宋体’ );

h_axes1=axes(‘parent’,h_f,‘position’,[0.1 0.18 0.7 0.66],‘Unit’,‘normalized’,‘visible’,‘off’);
% h_axes2=axes(‘parent’,h_f,‘position’,[0.55 0.28 0.25 0.56],‘Unit’,‘normalized’,‘visible’,‘off’);

figcolor=get(h_f,‘color’);
edit2=uicontrol(h_f,‘style’,‘text’,‘position’,[1,620,200,40],‘backgroundcolor’,figcolor);
button_recg=uicontrol(h_f,‘style’,‘push’,‘string’,‘训练和测试’,‘position’,[20 50 150 50],‘callback’,‘train’);
button_open=uicontrol(h_f,‘style’,‘push’,‘string’,‘选择照片’,‘position’,[200 50 150 50],‘callback’,‘GUIopen’);
button_match
clc,clear
global edit2;
nclass=2;%图像类别数目
num_train=50;%选取每类50副图像训练

set(edit2,‘string’,‘加载训练数据…’)
drawnow
%load(‘traindata.mat’);
[train_data, test_data,realclass,num_test] = ReadColorData(nclass,num_train);

%构造训练目标集t
for y=1:nclass;
for m=1:num_train;
%构造训练集目标集
t(y,(y-1)num_train+m)=1;
end
end
mA=mean(train_data);
k=20;%降维至20维
[pcaface,V]=fastPCA(train_data,k,mA);
lowvec=min(pcaface);
upvec=max(pcaface);
scaledface = scaling( pcaface,lowvec,upvec);
pn = scaledface’;
%对测试集数据进行归一化处理
testface=test_data;
m=size(testface,1);
for i=1:m
testface(i,:)=testface(i,:)-mA;
end
pcatestface=testface
V;
scaledtestface = scaling( pcatestface,lowvec,upvec);
pnewn = scaledtestface’;
save(‘pca.mat’,‘upvec’, ‘lowvec’,‘mA’,‘V’);

set(edit2,‘string’,‘bp神经网络样本训练…’)
drawnow
net = createBP(pn,110,‘tansig’,‘purelin’,‘trainrp’,(1e-4),9000,0.005); %createBP
[net,tr] = trainBP(net,pn,t); %trainBP
save(‘net.mat’,‘net’,‘tr’);

set(edit2,‘string’,‘bp神经网络样本分类…’)
drawnow
accuracy= result(net,pnewn,pn,num_train,num_test);
set(edit2,‘string’,‘测试完成!’)
msgbox([‘识别准确率:’,num2str(accuracy*100),‘%。’])

%构建BP神经网络

%传入参数
%pn为归一化处理后的训练集 向量空间

%返回参数
%net 建立的BP神经网络

%函数声明
function[net] = createBP(pn,num_hidden,func_hidden,func_out,trainfunc,goal,epochs,learn_rate)

fprintf(‘开始构建BP神经网络\n\n’);

% %输入隐含层单元数,num_hidden储存该值的变量
% num_hidden = input(‘请输入隐含层神经元个数:(40:20:100)’);
%
% %输入输入层与隐含层之间的传递函数,func_hidden储存该字符串的变量
% func_hidden = input(‘请输入输入层与隐含层之间的传递函数:(tansig,purelin)’,‘s’);
%
% %输入隐含层与输出层之间的传递函数,func_out储存该字符串的变量
% func_out = input(‘请输入隐含层与输出层之间的传递函数:(tansig,purelin)’,‘s’);
%
% %输入BP训练函数,trainfunc储存该字符串的变量
% trainfunc = input(‘请输入BP网络训练函数:(trainrp)’,‘s’);
%
% %输入训练目标,goal储存该值的变量
% goal = input(‘请输入训练目标(<0.01)(1e-5):’);
%
% %输入训练次数,epochs储存该值的变量
% epochs = input(‘请输入训练次数:(8000)’);
%
% %输入学习速率,learn_rate储存该值的变量
% learn_rate = input(‘请输入学习速率(<0.1):(0.005)’);

fprintf(‘开始构建BP神经网络,请等待…\n\n’);
net = newff(minmax(pn),[num_hidden,2],{func_hidden,func_out},trainfunc); %调用MATLAB神经网络工具箱,构建BP神经网络
net.trainParam.goal=goal; %设置训练目标
net.trainParam.epochs=epochs; %训练迭代数
net.trainParam.lr = learn_rate; %设置学习速率
fprintf(‘BP神经网络搭建结束!\n\n’);

效果图

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python-项目实战--贪吃蛇小游戏-贪吃蛇功能实现(4)

5.贪吃蛇功能的实现在这一小节&#xff0c;我们就以完成的游戏框架为基础&#xff0c;加入贪吃蛇的功能&#xff0c;完成整个游戏的开发本小节的知识重点包括:贪吃蛇类的设计定义贪吃蛇类添加蛇身体绘制和移动身体改变贪吃蛇的方向贪吃蛇吃食物贪吃蛇的死亡5.1贪吃蛇类的设计我…

java -cp 错误:找不到或无法加载主类

java -cp 错误&#xff1a;找不到或无法加载主类 1.问题场景 在一个项目开发中&#xff0c;我需要写一个 windows的bat脚本&#xff0c;需要在里面 调用 SpringBoot项目生成的jar包&#xff0c;我在调用 classes下面的 jar时 通过 调用 jar包 去调用 jar包中的某个 .java类 …

吃鸡用什么蓝牙耳机效果好?手游吃鸡公认最好的几款蓝牙耳机

蓝牙耳机的作用很多&#xff0c;几乎每个人都需要一副很棒的耳机在通勤或锻炼途中使用&#xff0c;并且玩游戏也少不了它&#xff0c;手游近几年十分的流行&#xff0c;下面整理了几款性能不错的蓝牙耳机。 第一款&#xff1a;南卡小音舱蓝牙耳机 蓝牙版本&#xff1a;5.3 发…

树莓派CM4基础设置

安装系统1.1 软件和硬件准备硬件&#xff1a;CM4&#xff08;4GB DDR32GB EMMC 板载WIFI和蓝牙&#xff09;CM4-to-Pi4-Adapter软件&#xff1a;Raspberry Pi或者 Win32DiskImagerRaspberry Pi下载链接&#xff1a;点击直接下载Win32DiskImager下载链接&#xff1a;链接&#x…

JSP 在线学习管理系统myeclipse定制开发sqlserver数据库网页模式java编程jdbc

一、源码特点 JSP 在线学习管理系统是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为SQLServer2008&#x…

第09章_MySQL子查询

第09章_子查询 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 子查询指一个查询语句嵌套在另一个查询语句内部的查询&#xff0c;这个特性从MySQL 4.1开始引入。 SQL 中子查询的使用大大增强了…

2023年你应该关注的JavaScript趋势

本文翻译者系360 奇舞团前端开发工程师原文标题&#xff1a;Top JavaScript (JS) Trends You Should Follow in 2023原文作者&#xff1a;yevheniia原文地址&#xff1a;https://www.codica.com/blog/top-javascript-trends/#top-java-script-frameworks-and-libraries-to-watc…

【python】考前复习,python基础语法知识点整理

文章目录1.常量与表达式2.变量和数据类型创建变量数据类型动态类型数据类型的转换3.注释4.字符串字符串的定义方式字符串的拼接字符串的格式化①字符串格式化的精度控制字符串的格式化②对表达式进行格式化5.从控制台输入(input)6.运算符算术运算符赋值运算符布尔类型和比较运算…

顶象APP加固的“蜜罐”技术有什么作用

目录 蜜罐有很多应用模式 蜜罐技术让App加固攻守兼备 顶象端加固的三大功能 为了捕获猎物&#xff0c;猎人会在设置鲜活的诱饵。被诱惑的猎物去吃诱饵时&#xff0c;就会坠入猎人布置好的陷阱&#xff0c;然后被猎人擒获&#xff0c;这是狩猎中常用的一种手段。在业务安全防…

【华为OD机试真题】用 C++ 实现 - 最小施肥机能效

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

关于《How to Learn to Code Get a Developer Job in 2023》的经验学习

1. Who is This Book For ? for Anyone who is considering a career in software development. 2. Can Anyone Learn to Code? Any sufficiently motivated person can learn to code. 3.Executive Summary Learning to code is hard.Getting a job as a software devel…

jupyter的安装步骤

1.安装python文件 首先去官网python去下载python的安装包&#xff0c;点击donwload,选择合适的系统。这里我是windown系统&#xff0c;点击进去&#xff0c;如图找到有installer的去下载。不建议下载最新版本的&#xff0c;会有兼容问题。 2.安装python 点击第二个选项是自己配…

JavaScript 进阶--charater3

文章目录前言一、编程思想1.1 面向过程介绍1.2 面向对象编程 (oop)对比二、构造函数三、原型3.1原型3.2 constructor 属性3.3 对象原型3.4 原型继承3.5 原型链总结前言 &#x1f191;学习目标 理解面向对象思想&#xff0c;掌握函数原型对象运用面向对象封装继承特点&#xf…

Docker之路(5.Docker镜像学习、镜像加载原理、镜像分层原理、通过commit提交镜像)

1.镜像是什么 镜像是一种轻量级&#xff0e;可执行的独立软件包&#xff0c;用来打包软件运行环境和基于运行环境开发的软件&#xff0c;它包含运行某个软件所需的所有内客&#xff0c; 包活代码、运行时、库、环境变量和配置文件。 所有的应用&#xff0c;直接打包docker镜像&…

UE4 手把手教你做插件(4)做一个可以拖入场景的小方块插件

0&#xff0c;前言 学习一下如何编写一个有actor的插件&#xff0c;能够将它拖入场景里面。 1&#xff0c;创建插件 &#xff08;1&#xff09;创建一个空白插件 添加之后vs里面就会多出一个目录&#xff1a; &#xff08;2&#xff09;给插件添加一个actor 创建完actor之后&am…

ubuntu本地访问nas

需求 本地磁盘空间太小&#xff0c;本地网络里有个nas&#xff0c;希望将nas作为数据盘挂载到本地使用。 方法1 基于sftp访问nas 首先nas设置时要打开sftp访问功能。 然后用ubuntu桌面访问服务器的功能登录sftp&#xff0c;类似如下指令 sftp://user192.168.0.100 ubuntu下…

DevData Talks | 对谈谷歌云 DORA 布道师,像谷歌一样度量 DevOps 表现

本期 DevData Talks 我们请到来自 Google Cloud 谷歌云的 DORA 研究团队的嘉宾 Nathen Harvey与 Apache DevLake、CNCF DevStream 的海外社区负责人 Maxim 进行对谈。如果您关注 DevOps 的话&#xff0c;也许对这个团队有所耳闻。 DORA 的全称是 DevOps Research and Assessme…

【运动控制】CNC三轴小线段路径规划

CNC三轴小线段路径规划 文章目录CNC三轴小线段路径规划一、项目说明二、具体实现1、速度规划2、小线段插补3、运动学逆解刀轴插补点4、差分处理得到实际的速度和加速度5、加速度滑动平均6、实现的效果如图所示三、Reference写在前面&#xff0c;本文是作为一个练手小项目的总结…

论文浅尝 | Deep Reinforcement Learning for Entity Alignment

笔记整理&#xff1a;陈鹏&#xff0c;天津大学硕士链接&#xff1a;https://aclanthology.org/2022.findings-acl.217.pdf动机实体对齐(Entity Alignment&#xff09;的基本目标在于发现两个知识图谱间指向同一现实对象的实体对&#xff0c;以便将不同知识图谱连接起来&#x…

Interview系列 - 06 Java | ArrayList底层源码分析 | 遍历集合时如何删除集合中的元素

文章目录1. 底层源码分析01. 属性02. 构造方法03. 在数组的末尾添加元素 add(E e)04. 在数组的指定位置添加元素 add(int index, E element)05. 替换指定位置的元素 set(int index, E element)06. 获取指定索引位置处的元素 get(int index)07. 删除指定位置的元素 remove(int i…