【MATLAB源码】机器视觉与图像识别技术(7)续---BP神经网络

系列文章目录在最后面,各位同仁感兴趣可以看看!

BP神经网络

  • 第一节、BP网络定义
  • 第二节、BP网络结构及其特点
  • 第三节、信息传播方式
    • 信息的正向传播:实质是计算网络的输出
    • 误差的反向传播:实质是学习过程
  • 第四节、 BP网络的算法流程图及设计
  • 第五节、 BP网络的局限与不足
  • 第八节、BP网络主要应用及其MATLAB代码
  • 最后:总结
  • 系列文章目录


第一节、BP网络定义

BP网络,即反向传播网络(Backpropagation Network),是一种单向传播的多层前向网络。它能够实现从输入到输出的任意非线性映射,具有强大的建模能力。BP网络的核心在于其权值调整方法,采用反向传播的学习算法,即δ学习算法。这种有导师的学习算法通过计算输出误差,并将误差反向传播到每一层,从而调整网络权值,以最小化误差函数。BP网络在众多应用领域中表现优异,是神经网络研究和应用的基础模型之一。

第二节、BP网络结构及其特点

下面用一幅图进行表示BP神经网络模型结构,如下图所示。

在这里插入图片描述

由上图BP网络模型结构图可知,其特点为:
第一是:网络连接的特点
(1)是多层前馈网络,包括输入层、若干隐层以及输出层。它可以拥有两个或更多的隐层,通过这些层的组合实现复杂的非线性映射。
(2)层与层之间采用全互连方式,即每一层的神经元与下一层的所有神经元都有连接,而同一层的神经元之间则不直接相连。
第二是:层接关系: 层与层之间的连接是单向的,即从输入层到输出层的信息传递是沿着前向路径进行的。同时,信息传播过程包括两个方向:正向传播和误差的反向传播。正向传播将输入信号传递至输出层,产生网络预测值;而反向传播则通过计算误差梯度,将误差从输出层反向传递至各个隐层,用于调整网络权值以优化模型性能。

第三节、信息传播方式

从BP神经网络模型结构图可以看出,信息传播主要包括两种方式:其一是信息的正向传播,即输入通过各层神经元进行逐层传递,生成网络的输出;其二是误差的反向传播,通过计算输出误差并将其反向传递至各隐层,用于调整网络权值以最小化误差。

信息的正向传播:实质是计算网络的输出

(1)输入层单元没有激活函数,直接接收输入信号并传递给下一层,因此在某些书籍中,输入层可能不被视为一个实际的网络层。它主要作用是将输入数据格式化为网络可以处理的形式,而不参与任何计算或非线性变换。

在这里插入图片描述


(2) 隐层神经元的输出:采用S函数激发:它将输入信号映射到0和1之间,使得网络能够引入非线性特性,从而提高其对复杂模式的建模能力。

在这里插入图片描述


(3)只有在需要将网络的输出限制在0和1之间时,输出层才使用S型激活函数(Sigmoid函数)。在其他情况下,输出层通常采用线性激活函数,以便生成连续值并适应不同的回归任务或多类别分类任务。

在这里插入图片描述

误差的反向传播:实质是学习过程

BP网络输出与理想输出误差计算公式为:

在这里插入图片描述


认为BP网络好坏,常用误差性能指标函数为(误差均方值最小)来甄别,如下图所示公式:

在这里插入图片描述


基本小总节:

  1. BP网络具有一层或多层隐含层,用于捕捉输入数据的复杂特征。
  2. BP网络中的隐含层到输出层的激活函数必须是处处可微的,常见的选择包括S型函数(Sigmoid函数)或正切函数(Tanh函数)。
  3. 当需要将网络的输出限制在0和1之间时,输出层应使用S型激活函数。在一般情况下,隐含层采用S型激活函数,而输出层则使用线性激活函数以适应不同的任务需求。
  4. 网络的输入输出关系由各层连接的权因子决定,这些权因子对网络的表现起到关键作用。
  5. 权因子通过学习算法进行调节,随着学习的深入,网络能够逐渐提高其智能和准确性。
  6. 隐含层数量越多,网络能够提供更高的输出精度,并且个别权因子的损坏对网络输出的影响较小。

第四节、 BP网络的算法流程图及设计

BP网络算法流程图如下:

在这里插入图片描述


设计方案如下:

  1. 网络的层数
    理论上,具有偏差和至少一个S型隐含层以及一个线性输出层的BP网络,可以逼近任何有理函数。增加层数可以进一步降低误差和提高精度,但也会增加网络的复杂性和训练时间。因此,通常优先考虑增加隐含层中的神经元数量,而不是增加层数。
  2. 隐含层的神经元数
    提高网络训练精度的有效方法是通过增加一个隐含层的神经元数。相比增加隐含层数,这种方法在结构实现上更为简单。具体设计时,可以通过对不同神经元数进行训练对比,并适当增加一些余量来确定最优神经元数。
  3. 初始权值的选取
    初始权值通常选取在(-1, 1)之间的随机数。由于每次训练时权值随机初始化,每次训练得到的网络权值都会有所不同。
  4. 学习速率
    学习速率决定每次循环训练中权值变化的幅度。较大的学习速率可能导致系统不稳定,而较小的学习速率则会延长训练时间,虽然能保证网络误差逐渐趋于最小。为了保证系统稳定性,通常选择较小的学习速率,范围在0.01到0.8之间。
  5. 期望误差的选取
    设计网络训练过程中,期望误差值应通过对比训练来确定。较小的期望误差值通常需要更多的隐含层节点和更长的训练时间。因此,可以对比两个不同期望误差值的网络,通过综合考虑来确定最优方案。

这些方法和策略有助于优化BP网络的设计,提高网络的精度和稳定性,适应不同的应用需求。

第五节、 BP网络的局限与不足

BP网络的挑战与应对策略

  1. 需要较长的训练时间
    由于涉及到复杂的求导运算,BP网络的训练时间通常较长。随着网络规模和复杂性的增加,这一问题变得更加显著。
  2. 训练瘫痪问题
    训练过程中可能会出现训练瘫痪现象。为避免这种现象,可以采取以下措施:
    (1)选取较小的初始权值。
    (2)采用较小的学习速率。
    虽然这些方法可以减小训练瘫痪的风险,但也会增加训练时间。
  3. 局部极小值
    BP算法可以使网络权值收敛到一个解,但无法保证该解是误差超平面的全局最小值,可能会陷入局部极小值。为应对这一问题,可以采用以下策略:
    (1)多次训练,初始权值随机化。
    (2)使用动量项来帮助网络跳出局部极小值。
    (3)结合其他优化算法,如遗传算法或模拟退火算法,以提高全局搜索能力。
    这些挑战和对应策略需要在设计和训练BP网络时予以考虑,以优化网络性能和训练效率。

    在这里插入图片描述


    如上图所示,W初始值不合适的时候,误差性能指标e可能落入局部极小值。

第八节、BP网络主要应用及其MATLAB代码

BP网络的主要应用及构建步骤:
(1)主要应用
1.函数逼近: 通过输入矢量和相应的输出矢量训练网络,以逼近一个函数。
2.模式识别:利用特定的输出矢量将其与输入矢量联系起来,实现模式识别。
3.分类:按照定义的方式对输入矢量进行分类。
4.数据压缩:减少输出矢量的维数,以便于传输或存储。
(2)构建网络的步骤
6. 明确输入、输出变量,确定样本数据:定义网络的输入和输出变量,并收集相应的样本数据。
7. 构建初始网络:设计网络结构,包括层数和每层的神经元数量。
8. 确定网络参数:设置训练的最长步数和目标误差。
9. 神经网络训练(调整权值、阈值):通过反向传播算法调整权值和阈值,实现神经网络的学习。
10. 网络输出计算(网络模拟仿真):计算网络输出,进行模拟仿真。
11. 仿真误差评估:评估仿真结果的误差。
12. 测试检验数据的仿真和误差评估(泛化能力):使用测试数据检验网络的仿真结果和误差,评估网络的泛化能力。通过这些步骤,可以有效地构建和优化BP网络,适应不同的应用需求。
代码示例:应用于拟合曲线,模拟预测结果。

clc 
clear all 
close all
a = xlsread('d:\花生特征提取数据.xlsx');
b = a;
a0 = min(a);
for z = 2:9b(:,z) = a(:,z) - a0(z);
end
a1 = max(b);
for z = 2:9b(:,z) = b(:,z) / a1(z);
end
P = b(1:40, 2)';
T = b(1:40, 4)';
net = newff(minmax(P), [10, 1], {'tansig', 'purelin'}, 'trainlm');
net.trainParam.epochs = 500;
net.trainParam.goal = 0.000001;
net = train(net, P, T);
X = b(1:40, 2)';
Y = sim(net, X)';
figure; 
plot(P, T, '.'); 
hold on; 
plot(X, Y, 'r');

这个代码第一次出现在我的文章 【MATLAB源码】机器视觉与图像识别技术(5)—BP神经网络和视觉标定这里,里面也有数据集,解释啥的都有了,所以大家可以去看看。


最后:总结

通过上面大介绍,大概BP网络的原理和构建步骤就是这样,我也是从基础跟大家讲起,算法比较简单易懂,如果有什么讲的不好的希望大佬们指正,谢谢!最后哈哈哈哈哈,还是希望,能给我点赞收藏关注一下,真的非常谢谢咯,最后后续看看还有什么可以讲解的,后续进行分享。别忘了点赞!!!!!!哈哈哈哈哈哈,下期见


系列文章目录

第一篇文章:【MATLAB源码】机器视觉与图像识别技术—视觉系统的构成(视频与图像格式转换代码及软件下载)
第二篇文章:【MATLAB源码】机器视觉与图像识别技术(2)—图像分割基础
第三篇文章:【MATLAB源码】机器视觉与图像识别技术(2)续—图像分割算法
第四篇文章:【MATLAB源码】机器视觉与图像识别技术(3)—数字形态学处理以及图像特征点提取
第五篇文章: 【MATLAB源码】机器视觉与图像识别技术(4)—模式识别与视觉计数
第六篇文章: 【MATLAB源码】机器视觉与图像识别技术(5)—BP神经网络和视觉标定
第七篇文章:【MATLAB源码】机器视觉与图像识别技术实战示例文档—鱼苗面积预测计数
第八篇文章:【MATLAB源码】机器视觉与图像识别技术(6)—帧差法和videoinput视频读取

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

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

相关文章

视频怎么在尽量不损害画质的前提下压缩?试试这4款视频压缩神器

4个视频压缩神器,帮你在不损画质的前提下满足压缩需求: 1、嗨格式压缩大师 关键词:高效、批量 直达链接>>yasuo.hgs.cn 嗨格式压缩大师是一款免费的文件压缩工具,支持视频、图片、PDF、PPT等文件快速、批量压缩&#xff…

代码随想录 day 28 贪心

第八章 贪心算法 part02 贪心 局部最优解推出全局最优 ,而且想不到反例,那么就试一试贪心 将问题分解为若干个子问题 找出适合的贪心策略 求解每一个子问题的最优解 将局部最优解堆叠成全局最优解 只要想清楚 局部最优 是什么,如果推导出全局…

XR-Frame 计算相机与场景物体的距离

如下哦 const cameraTransform this.scene.getElementById(camera).getComponent(transform)const modelTransform this.scene.getElementById(yourNodeId).getComponent("transform");if (cameraTransform.worldPosition.distanceTo(modelTransform.worldPosition…

pip install albumentations安装下载遇19kB/s超级慢细水管解决办法

albumentations 是一个用于图像增强的 Python 库,它提供了丰富的图像变换功能,可以用于数据增强,从而提高深度学习模型的泛化能力。 直接安装命令: pip install albumentations但是如果半夜遇到这种19kB/s的下载速度 为头发着想&…

【C++】C++11新增语法(右值引用、完美转法)

文章目录 1.C11新增常用语法1.1 统一的列表初始化1.2 initializer_list初始化1.3 声明相关1.4 继承与多态相关 2. 右值引用与移动语义2.1 左值引用与右值引用2.2 右值引用与移动语义的使用场景2.3 右值引用引用左值(move) 3. 完美转发4. 新的类功能4.1 新增两个默认成员函数4.2…

记录两道关于编码解码的问题

环境&#xff1a;php环境即可&#xff0c;也可使用phpstudy。 参考文章: 深入理解浏览器解析机制和XSS向量编码-CSDN博客(很重要) HTML 字符编码&#xff08;自我复习&#xff09;-CSDN博客 例题1&#xff1a; <?php header("X-XSS-Protection: 0"); $xss …

Jangow-1.0.1靶机漏洞复现(未完成)

首先&#xff0c;这个靶机只能使用VirtualBox打开&#xff0c;靶机下载地址为 https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova 虚拟机软件下载地址为 Download_Old_Builds – Oracle VM VirtualBox 开启靶机后访问ip进入如下页面&#xff0c;点击site进入到一个…

昇思25天学习打卡营第16天|Diffusion扩散模型,DCGAN生成漫画头像

Diffusion扩散模型 关于扩散模型&#xff08;Diffusion Models&#xff09;有很多种理解&#xff0c;本文的介绍是基于denoising diffusion probabilistic model &#xff08;DDPM&#xff09;&#xff0c;DDPM已经在&#xff08;无&#xff09;条件图像/音频/视频生成领域取得…

MySQL:GROUP BY 分组查询

分组查询是SQL中一个非常强大的功能&#xff0c;它允许我们将数据按照一个或多个字段进行分组&#xff0c;并对每个分组进行聚合计算&#xff08;如求和、平均值、最大值、最小值等&#xff09;。在MySQL中&#xff0c;我们使用 GROUP BY 关键字来实现分组查询。 核心语法 SE…

Vue3自研开源Tree组件:人性化的拖拽API设计

针对Element Plus Tree组件拖拽功能API用的麻烦&#xff0c;小卷开发了一个API使用简单的JuanTree组件。拖拽功能用起来非常简单&#xff01; 文章目录 使用示例allowDragallowDrop支持节点勾选支持dirty检测后台API交互 源码实现 使用示例 组件的使用很简单&#xff1a; 通过…

4.1.2、操作系统-概述及进程管理-状态管理和前趋图

进出的组成和状态 进程是计算机中正在运行的程序的实例。它是操作系统进行资源分配和管理的基本单位,包括代码、数据和执行状态等信息。 进程的组成:进程控制块PCB(唯一标志)、程序(描述进程要做什么)、数据(存放进程执行时所需数据)。 我们电脑中的QQ影音和网易云音乐可以并…

小米手机怎么查看电池剩余容量

最近发现自己的小米11pro的待机时间越来越短了&#xff0c;怀疑是电池剩余容量太小了&#xff0c;希望测下电池剩余容量好打算是否要更换下电池。 1.抓取bug测试 首先打开拨号界面&#xff0c;输入*#*#284#*#*然后开始抓取日志。 等待bug报告生成完毕&#xff0c;然后点击就…

Git原理与用法系统总结

目录 Reference前言版本控制系统Git的诞生配置Git配置用户名和邮件配置颜色配置.gitignore文件 Git的基础用法初始化仓库克隆现有的仓库添加暂存文件提交变动到仓库比较变动查看日志Git回退Git重置暂存区 Git版本管理重新提交取消暂存撤销对文件的修改 Git分支Git分支的优势Git…

5、注册字符类设备

字符设备 cdev结构体 Linux中使用cdev结构体描述一个字符设备。结构体定义在include/linux/cdev.h 文件中&#xff0c; struct cdev{struct kobject kobj;struct module *owner; //所属模块const struct file_operations *ops; //文件操作结构体struct list_head lis…

《Java初阶数据结构》----5.<二叉树的概念及使用>

前言 大家好&#xff0c;我目前在学习java。之前也学了一段时间&#xff0c;但是没有发布博客。时间过的真的很快。我会利用好这个暑假&#xff0c;来复习之前学过的内容&#xff0c;并整理好之前写过的博客进行发布。如果博客中有错误或者没有读懂的地方。热烈欢迎大家在评论区…

综合点评!史上最强开源大模型Llama 3.1

在人工智能领域&#xff0c;开源模型一直是推动技术进步和创新的重要力量。 北美时间7月23日&#xff0c;Meta公司&#xff08;原Facebook&#xff09;宣布了一项重大突破&#xff1a;开源模型Llama 3.1的正式发布。这一举措预示着AI技术的又一次飞跃&#xff0c;Llama 3.1有望…

虚拟化数据恢复—XenServer VPS不可用如何恢复数据?

虚拟化数据恢复环境&#xff1a; 某品牌R720服务器&#xff0c;4块STAT硬盘通过H710P阵列卡组建了一组raid10磁盘阵列。服务器上部署XenServer虚拟化平台&#xff0c;虚拟机安装Windows Server系统&#xff0c;作为Web服务器使用&#xff0c;运行SQL Server数据库。共有2个虚拟…

【数据结构】——堆的实现与算法

目录 一、堆的实现 1.1堆数据的插入 1.2堆数据的删除 二、建堆算法 2.1向上调整建堆 2.2向下调整建堆 三、堆的应用 3.1堆排序 3.2Top—K问题 一、堆的实现 1.1堆数据的插入 插入一个数据后不再是小堆需要将新数据调整到合适的位置&#xff0c;所以堆的插入就是在数组…

类和对象(中 )C++

默认成员函数就是用户不显示实现&#xff0c;编译器会自动实现的成员函数叫做默认成员函数。一个类&#xff0c;我们在不写的情况下&#xff0c;编译器会自动实现6个默认成员函数&#xff0c;需要注意&#xff0c;最重要的是前4个&#xff0c;其次就是C11以后还会增加两个默认成…

onlyoffice用nginx反向代理

我对于onlyoffice的需求就是当个在线编辑器使用。在集成react的时候之前都是写的绝对路径的地址&#xff0c;这样在需要迁移应用的时候就造成了巨大的麻烦&#xff0c;所以我决定用nginx做反向代理&#xff0c;这样我集成的时候就不用每次都修改源码中的地址了。 一开始写的代…