当前位置: 首页 > news >正文

【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视频读取

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • vite打包文件配置到IIS出现页面、图片加载不出来的问题
  • JavaScript Reference Type解读
  • git安装和使用(托管服务 分支 克隆)超细教程
  • AR 眼镜之-充电动画定制-实现方案
  • 安全编程的代码示例
  • libevent入门篇
  • MySQL中,除了使用LIKE进行模糊搜索外,还有其他几种方法可以执行搜索操作
  • 【CTFHub】文件上传漏洞详解!
  • java项目中添加SDK项目作为依赖使用(无需上传Maven)
  • C++基础知识:构造函数的分类和调用,有参构造和无参构造,有参构造和无参构造,三种调用方式:括号法,显示法,隐式转换法,以及相关代码演示和注意事项
  • 文件上传题目练习
  • 书生大模型实战营--L1关卡-Llamaindex RAG实践
  • 正则采集器之三——前端搭建
  • C#插件 调用存储过程(输出参数类型)
  • Ubuntu开机自启配置(基于service:以ROS和docker为例)
  • @jsonView过滤属性
  • Android优雅地处理按钮重复点击
  • C++入门教程(10):for 语句
  • ECS应用管理最佳实践
  • If…else
  • PaddlePaddle-GitHub的正确打开姿势
  • ReactNativeweexDeviceOne对比
  • Spring Boot快速入门(一):Hello Spring Boot
  • Tornado学习笔记(1)
  • Vue 动态创建 component
  • 安装python包到指定虚拟环境
  • 给Prometheus造假数据的方法
  • 回顾 Swift 多平台移植进度 #2
  • 理清楚Vue的结构
  • 爬虫模拟登陆 SegmentFault
  • 事件委托的小应用
  • 算法之不定期更新(一)(2018-04-12)
  • 问题之ssh中Host key verification failed的解决
  • 你对linux中grep命令知道多少?
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 函数计算新功能-----支持C#函数
  • # centos7下FFmpeg环境部署记录
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • # 透过事物看本质的能力怎么培养?
  • ### RabbitMQ五种工作模式:
  • #单片机(TB6600驱动42步进电机)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (C#)获取字符编码的类
  • (Java入门)学生管理系统
  • (Qt) 默认QtWidget应用包含什么?
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .form文件_SSM框架文件上传篇
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET/C# 使窗口永不获得焦点