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

news2024/9/22 15:32:20

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

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:9
    b(:,z) = a(:,z) - a0(z);
end
a1 = max(b);
for z = 2:9
    b(:,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.coloradmin.cn/o/1964640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python:plotly 网页交互式数据可视化工具

pip install plotly plotly-5.22.0-py3-none-any.whl pip install plotly_express 包含:GDP数据、餐厅的订单流水数据、鸢尾花 Iris数据集 等等 pip show plotly Name: plotly Version: 5.22.0 Summary: An open-source, interactive data visualization librar…

每日OJ_牛客HJ60 查找组成一个偶数最接近的两个素数

目录 牛客HJ60 查找组成一个偶数最接近的两个素数 解析代码 牛客HJ60 查找组成一个偶数最接近的两个素数 查找组成一个偶数最接近的两个素数_牛客题霸_牛客网 解析代码 首先需要判断素数,素数表示除过1和本身,不能被其它数整除。通过循环遍历来判断一…

飞致云开源社区月度动态报告(2024年7月)

自2023年6月起,中国领先的开源软件公司FIT2CLOUD飞致云以月度为单位发布《飞致云开源社区月度动态报告》,旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况,以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大屏…

pycharm怎么使用Anaconda和配置

打开Anaconda Prompt 要删除 Conda 环境 yolov5sconda,你可以使用以下命令: conda remove --name yolov5sconda --all这个命令会删除名为 yolov5sconda 的整个环境,包括其中安装的所有包和依赖项。请在命令提示符或终端中运行此命令。执行此…

Java线程池的设计与使用

Java线程池的设计与使用 多线程情景引入 情景分析 请求积压的情况 系统资源受限: 当大量用户请求同时到来时,服务器受限于内存、CPU、和网络带宽等资源,导致用户长时间等待。后端处理能力限制: 如频率限制措施(每秒或每几秒的访问限制&…

嵌入式day15

数组指针 能够指向整个数组 一维数组: &a,考察a的数据类型 int(*p)[10]:表示一个指向长度为10的一维整型数组的指针 二维数组: 指向函数的指针 函数的函数名,即为函数的入口地址&#x…

亲测推荐!PixPin便捷高效,让你的截图工作轻松搞定,还在等什么?

前言 如果你经常使用电脑,是不是也经常遇到这样的烦恼:需要频繁地截图、标注、编辑图片,可是手里的截图工具却总是那么不给力?要么功能单一,要么操作复杂,让人头疼不已;今天咱们的小江湖就要给大…

企业邮箱收发垃圾邮件拦截吗?

企业邮箱如何拦截垃圾邮件呢?企业邮箱拦截垃圾邮件是采用用户定制化和多层防御机制,确保信息安全。用户参与改进系统,提供技术支持。本文详细介绍了企业邮箱过滤垃圾邮件的机制以及企业邮箱的注册流程。 一、企业邮箱面临的垃圾邮件挑战 1、…

对 vllm 与 ollama 的一些研究

今天咱们来聊聊 vllm 和 ollama 这两个听起来就挺酷的玩意儿。这俩都是现在 AI 圈子里的大明星,专门用来让那些超大型的 AI 模型跑得更顺溜。 先说说 vllm 吧,这家伙的绝活儿是剪枝。啥叫剪枝呢?想象一下,你有个花园,…

OpenCV学习笔记 比较基于RANSAC、最小二乘算法的拟合

一、RANSAC算法 https://skydance.blog.csdn.net/article/details/134887458https://skydance.blog.csdn.net/article/details/134887458 二、最小二乘算法 https://skydance.blog.csdn.net/article/details/115413982

基于cubeMX的STM32的模拟SPI驱动的OLED显示

1、OLED的型号为7针SPI接口 2、cubeMX的设置 (1)GPIO设置 需要注意的是,OLED的五个引脚是普通的IO口来模拟SPI通信,而不是真的用到了单片机的SPI模块。 (2)时钟设置 最后生成代码。 3、打开工程代码 &a…

如何调节超声驱动的功率和频率

超声波驱动板的功率调节是一个关键的技术操作,它直接影响到超声波设备的运行效果和性能。通过适当的功率调整,可以确保超声波设备在最佳状态下工作,从而提高其效率和应用效果。以下是具体的分析: 理解功率调节基础: 超…

Linux 系统下载 wgent

目录 1. yum 命令 2. 下载 wget 操作系统安装软件的方式有很多种,一般分为: (1)下载安装包自行安装; (2)系统的应用商店内安装; Linux 系统同样支持这两种方式: 另…

ShardingSphere实战(3)- 快速实现分库分表

上篇博客,我们讲了 ShardingSphere实战(2)- 水平分表 ,这篇博客,我们继续实现分库以及解决前面遗留的问题。 一、绑定表 基于上篇博客配置的前提下(上篇博客的最后放上了完整的配置,需要的可以…

PCI-e(篇一):科普——PCI-e到底是什么?PCI-e的前世今生

一、什么是PCIE接口? PCI-e接口的全称是Peripheral Component Interconnect Express,是一种高速串行计算机扩展总线标准。它原来的名字是“3GIO”,是由Intel在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。 PC…

SpringBoot使用泛型出入参+策略模式+反射+缓存实现统一POST接口入口

简介 某些情况下需要统一入口,如:提供给第三方调用的接口等。减少接口对接时的复杂性。 代码实现 GenericController.java 统一入口,通过bean name进行调用service层invoke方法 import com.fasterxml.jackson.databind.ObjectMapper; imp…

Python爬虫入门(结合网站代码演示)

原理 第一步发送请求 与浏览器请求访问服务器地址一样,python程序向服务器发送访问请求,服务器返回数据。 在python中我们可以使用 第二步解析网页内容 浏览器在接收到服务器返回的数据后,会自行解析内容最后呈现出我们所看到的界面。但是在程…

Centos7.6安装Nginx(yum安装和源码安装)

Centos7.6安装Nginx(yum安装和源码安装) 简介 yum安装 源码安装 安装后的事情 常见问题 简介 Nginx(发音为“engine X”)是一个高性能的HTTP和反向代理服务器,也可以作为邮件代理服务器使用。它被广泛应用于高流量…

linux进程控制——进程等待——wait、waitpid

前言:本节内容仍然是进程的控制,上一节博主讲解的是进程控制里面的进程创建、进程退出、终止。本节内容将讲到进程的等待——等待是为了能够将子进程的资源回收,是父进程等待子进程。 我们前面的章节也提到过等待, 那里的等待是进…

《C++基础入门与实战进阶》专栏介绍

🚀 前言 本文是《C基础入门与实战进阶》专栏的说明贴(点击链接,跳转到专栏主页,欢迎订阅,持续更新…)。 专栏介绍:以多年的开发实战为基础,总结并讲解一些的C/C基础与项目实战进阶内…