CNN卷积神经网络

一、概述

卷积神经网络(CNN)是深度学习领域的重要算法,特别适用于处理具有网格结构的数据,比如说图像和音频。它起源于二十世纪80至90年代,但真正得到快速发展和应用是在二十一世纪,随着深度学习理论的兴起和计算能力的提升。CNN通过模拟生物的视知觉机制,利用卷积核的参数共享和层间连接的稀疏性,实现了对图像等数据的平移不变分类和特征学习,而无需进行繁琐的特征工程。这些特性使得CNN在计算机视觉、自然语言处理等领域取得了显著成果,成为现代人工智能应用的关键技术之一。

什么是卷积?

在泛函分析中,卷积是一种重要的数学运算,用于通过两个函数f和g生成第三个函数。它的本质是一种特殊的积分变换(两个变量在某个范围内相乘后求和的结果),具体地,它表示函数f与g经过翻转和平移后的重叠部分函数值的乘积对重叠长度的积分。这种运算提供了一种方式来研究函数之间的相互作用和重叠情况。

进一步地,如果将参与卷积的一个函数视为区间的指示函数,卷积运算可以视为“滑动平均”的推广。在滑动平均中,我们考虑一个函数在某一区间内的平均值,而在卷积运算中,我们则通过积分来计算函数在重叠区间上的加权平均值,其中权重由另一个函数给出。因此,卷积运算提供了一种更为灵活和强大的工具来分析函数之间的相互作用和关系。

简单定义:设:f(x),g(x)是R1上的两个可积函数,作积分:

                                                        

什么是神经网络?

人工神经网络(ANN)自20世纪80年代起已成为人工智能领域的研究热点。它基于对人脑神经元网络的抽象,通过构建由大量节点(神经元)和它们之间的连接(代表加权值或权重)组成的网络模型来模拟人脑的信息处理方式。每个节点通过一个特定的输出函数(激励函数)来处理信息,而网络的输出则取决于节点间的连接方式、权重值和激励函数。

近年来,人工神经网络的研究取得了显著进展,已成功应用于模式识别、智能机器人、自动控制、预测估计、生物、医学、经济等多个领域,解决了许多现代计算机难以处理的复杂问题,展示了其卓越的智能特性。这一技术不仅模拟了人脑的基本结构和功能,还在多个领域实现了对复杂问题的有效处理,展现了广阔的应用前景。

 

二、卷积神经网络(CNN) 

在使用全连接神经网络处理大尺寸图像具有几个明显的缺点:
(1)首先将图像展开为向量会丢失空间信息
(2)其次参数过多效率低下,训练困难
(3)同时大量的参数也很快会导致网络过拟合
(4)忽略了图像中的空间结构信息,因此不能充分利
用图像中的相关特征,导致模型效果不佳。

使用卷积神经网络能够很好地解决这些问题,尤其是大尺寸图像的处理。

  一个完整的CNN(卷积神经网络)结构通常包括输入层卷积层激活层池化层全连接层输出层。

输入层

数据格式

  • 对于彩色图像,常见的输入数据格式为三维矩阵,通常表示为高度(H)×宽度(W)×颜色通道(C)。例如,对于一张32×32像素的RGB彩色图像,其输入数据将是一个32×32×3的三维矩阵。(32x32是高度x宽度,而后面的三代表的是三种不同的颜色,也就是三原色红(R)、绿(G)、蓝(B)。)
  • 对于灰度图像,输入数据为二维矩阵,即高度(H)×宽度(W)。

输入范围:

  • 输入图像的像素值通常需要被归一化到一个特定的数值范围内,以便于模型进行训练和推理。常见的归一化方式是将像素值缩放到[0, 1]或[-1, 1]的范围内。

假设我们有一张32×32像素的RGB彩色图像作为输入。首先,我们将这张图像转换为一个32×32×3的三维矩阵。然后,我们将每个像素值归一化到[0, 1]的范围内(即将像素值除以255,因为RGB图像的像素值范围是0-255)。最后,我们将这张归一化后的图像作为输入数据传递给CNN的输入层。

卷积层

卷积是CNN的核心操作,它通过模拟人眼对图像的局部感知特性,使用一定大小的卷积核在输入图像上滑动,并计算卷积核与对应位置图像像素的乘积之和,从而得到新的特征图。不同的卷积核可以提取不同的特征,如边缘、纹理等。通过堆叠多个卷积层,可以逐渐提取出更高层次的抽象特征。在实际应用中,通常会对输入图像进行填充(Padding)操作,以保证卷积后特征图的大小与输入图像相同或按一定比例缩小。

卷积核的初始化

卷积核是用来特征提取的关键参数。在初始化阶段,卷积核通常是随机设定的,并且在训练中根据学习到的数据进行自适应。

卷积运算

卷积运算是卷积层的核心操作。卷积运算将卷积核与输入数据局部区域进行逐点相乘并求和,来提取数据中的局部特征。卷积核会在输入数据的区域上滑动(步长通常为1),每次滑动都与当前位置与卷积核相同维度数量的区域进行卷积运算。卷积运算的结果是一个新的二维矩阵,其大小取决于卷积核的大小、步长和输入数据的填充方式。

激活层

激活层通过将前一层的线性输出通过非线性激活函数处理,从而模拟任意函数,进而增强网络的表征能力。激活层可选的激活函数有很多,不同的激活函数在不同的场景下可能表现出不同的性能。

下面举例几个常用的激活函数:

Sigmoid函数

  • 激活方式:对每个输入数据,利用sigmoid函数执行操作。函数形式为 f(x) = 1 / (1 + e^-x)
  • 特点:输出值在0到1之间,常用于二分类问题的输出层。但sigmoid函数在深度神经网络中可能导致梯度消失问题。

ReLU(Rectified Linear Unit)函数

  • 激活方式:标准的ReLU函数为 f(x) = max(0, x)。当输入x大于0时,输出x;当x小于或等于0时,输出0。
  • 特点:ReLU是目前使用最多的激活函数,因为它收敛更快,并且在一定程度上缓解了梯度消失问题。

Tanh(Hyperbolic Tangent)函数

  • 激活方式:利用双曲正切函数对数据进行变换,函数形式为 f(x) = (e^x - e^-x) / (e^x + e^-x)
  • 特点:输出值在-1到1之间,可以看作sigmoid函数的缩放版本。

池化层

池化层主要用于降低特征图的维度和参数数量,同时保留关键信息。它通过对特征图进行下采样来实现这一目的。常见的池化操作包括最大池化和平均池化。池化层有助于模型对输入数据的微小变化(如平移、旋转等)具有鲁棒性。

最大池化(Max Pooling)

假设有一个4x4特征图,将其进行2x2最大池化操作。

定义池化窗口

定义一个池化窗口,这里选择一个2x2的池化窗口(也称为滤波器或核),这个窗口将在特征图上滑动,每次滑动都会覆盖一个2x2的区域。

滑动窗口并选取最大值

 池化窗口在滑动的过程中,它会选取当前窗口所有值中的最大值作为输出。假设一个窗口覆盖了特征图左上角4个值[1,2,3,4],那么最大池操作将选择4作为其输出。

重复上述过程,直到将整个特征图遍历完成。(每次的滑动都会得到一个输出的值)   

生成池化后的特征图

将所有输出值按照它们在特征图上的相对位置排列,假设从左上方开始滑动窗口,向右下方移动,那么最后会获得一个2x2的矩阵,这个矩阵中的每个值都是由原始特征图中2x2区域中的最大值。

全连接层

  • 全连接层位于CNN的尾部,用于对前面提取的特征进行分类或回归。
  • 在这一层中,每个神经元都与前一层的所有神经元相连,通过计算加权和并应用激活函数来产生输出。
  • 对于分类任务,全连接层的输出通常会通过softmax函数进行归一化,得到每个类别的概率分布。

为什么全连接层也需要使用到激活函数?

  • 神经网络主要依赖于非线性激活函数来学习和表示复杂的非线性模式。没有激活函数,神经网络将只能学习线性函数,这极大地限制了其建模能力。通过在每一层(包括全连接层)之后应用激活函数,神经网络可以学习并逼近任何复杂的非线性函数。
  • 激活函数将神经元的加权输入映射到新的特征空间,这有助于网络学习更高层次的抽象特征。对于全连接层来说,这种特征空间转换特别重要,因为它需要基于前面层提取的特征来做出最终的分类或回归决策。
  • 某些激活函数(如ReLU)具有稀疏性,这意味着它们可以将一些神经元的输出设置为零,从而保留重要的特征信息并过滤掉不相关的特征。这种稀疏性有助于提高神经网络的泛化能力。(过滤信息和保留信息)

输出层

输出层是模型的最后一层,负责产生最终的预测结果。对于分类任务,输出层可能包含多个神经元,每个神经元对应一个类别;对于回归任务,输出层可能只有一个神经元。



三、总结:

传统的神经网络在处理高维数据的时候容易出现过拟合的现象,而卷积神经网络可以通过扩充数据集以及一定规则的变换来增加模型的泛化能力,从而减少过拟合的风险。此外,卷积神经网络层次分明,较低层次处理基础数据,较高层次的层则组合这些基础特征以表示更抽象的概念。这种层次化也使得卷积神经网络在处理复杂问题时表现出色。

(学习笔记,侵删。)

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

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

相关文章

【ai】phc:安装issac环境且fix libstdc++.so 版本报错

Pycharm远程连接服务器(2023-11-9) 大神分享了pycharm远程连接ubuntu工作站的方法。 https://github.com/ZhengyiLuo/PHC 给出的操作同样适用: 参考 Pycharm远程连接服务器(2023-11-9) :前提是一样的 PHC的要求:isaac 创建 conda activate isaac

【Vue】scoped解决样式冲突

默认情况下写在组件中的样式会 全局生效 → 因此很容易造成多个组件之间的样式冲突问题。 全局样式: 默认组件中的样式会作用到全局,任何一个组件中都会受到此样式的影响 局部样式: 可以给组件加上scoped 属性,可以让样式只作用于当前组件 一、代码示例 BaseOne…

RocketMQ可视化界面安装

RocketMQ可视化界面安装 **起因:**访问rocketmq-externals项目的git地址,下载了源码,在目录中并没有找到rocketmq-console文件夹。 git下面文档提示rocketMQ的仪表板转移到了新的项目中,点击仪表板到新项目地址; 下载…

搜索与图论:宽度优先搜索

搜索与图论&#xff1a;宽度优先搜索 题目描述参考代码 题目描述 输入样例 5 5 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0输出样例 8参考代码 #include <iostream> #include <algorithm> #include <cstring> using namespace std;const int N …

VsQt单元测试目录的管理方式

正常项目的文件管理方式 正常项目的目录&#xff0c;是由文件系统中实际的文件夹进行分类管理的。 但是如果单元测试用实际文件夹管理的话&#xff0c;会出现问题&#xff0c;就是被测类太多了&#xff0c;用文件系统管理的话&#xff0c;不太方面查看&#xff0c;如下图所示。…

contentType 与 dataType

contentType 与 dataType contentType contentType&#xff1a;发送的数据格式&#xff08;请求方发送给服务器的数据格式&#xff09;&#xff0c;这个内容会放在请求方的 请求头中 application/x-www-form-urlencoded 这个是默认的请求格式。 提交给后台的数据会按照 KV&am…

创新实训2024.06.06日志:部署web服务

1. 运行web项目前后端服务 首先我们要先在服务器上运行客户端以及服务端的应用程序。随后再考虑如何通过公网/局域网访问的问题。 如何启动服务在仓库对应分支下的Readme文件中已经有详细描述了。 1.1. 启动服务端 对于服务端&#xff0c;即&#xff08;要求你在服务端子项…

SCARA机器人中旋转花键的维护和保养方法!

作为精密传动元件的一种&#xff0c;旋转花键在工作过程中承受了较大的负荷。在自动化设备上运用广泛&#xff0c;如&#xff1a;水平多关节机械手臂&#xff08;SCARA&#xff09;、产业用机器人、自动装载机、雷射加工机、搬运装置、机械加工中心的ATC装置等&#xff0c;最适…

如何在Windows 10和11上修复DISM错误87?这里提供办法

​在电脑上运行DISM命令时&#xff0c;是否收到“错误代码87”消息&#xff1f;这是一个非常常见的错误&#xff0c;你可以轻松地修复它。我们将向你展示在Windows 11或Windows 10计算机上解决此问题的多种方法。 确保键入正确的命令 运行DISM命令时出现错误代码87的最常见原…

优雅谈大模型10:MoE

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

应对800G以太网挑战:数据中心迁移

在过去几年中&#xff0c;云基础设施和服务的大规模使用推动了对更多带宽、更快速度和更低延迟性能的需求。交换机和服务器技术的改进要求布线和架构随之调整。因此&#xff0c;800G以太网对数据中心迁移的需求&#xff0c;特别是对速率&#xff08;包括带宽、光纤密度和通道速…

进程和计划任务以及步骤

进程 进程和程序有关&#xff0c;把该文件放到内存里&#xff0c;进程是动态的&#xff0c;不同时刻的状态不一样 内存&#xff1a;放置正在运行的程序和所需数据的位置 程序启动 ——》将相关文件和数据放到内存里 ——》进程&#xff08;processes&#xff09; 进程相关命令 …

【Python】教你彻底认识Python中的Web开发

​​​​ 文章目录 一、Web开发的基本概念1. Web服务器2. 客户端-服务器模型3. HTTP协议4. 前端与后端 二、常用的Web开发框架1. Django1.1 安装Django1.2 创建Django项目1.3 定义模型1.4 定义视图1.5 定义URL路由1.6 模板 2. Flask2.1 安装Flask2.2 创建Flask应用2.3 模板2.4…

达梦8 并行查询

达梦数据库可以通过在查询语句加/* parallel */ HINT并行执行。下面以一个排序语句为例 我们通过一条监控语句查询排序区的使用情况。 最初没有查询结果&#xff08;no rows&#xff09; 伴随着语句insert /* parallel(4) */ into d select * from a order by 2执行&#xff…

计算机组成结构—总线

目录 一、总线的基本概念 1.分散连接和总线连接 2.总线的特点和组成 二、总线的分类 1. 片内总线 2. 系统总线 3. 通信总线 三、总线结构 1. 单总线结构 2. 双总线结构 3. 三总线结构 四、总线的性能指标 五、总线标准 六、总线判优&#xff08;总线仲裁&#xf…

【List,ArrayList与顺序表】

目录 1&#xff0c;什么是List 2&#xff0c;List的使用 3&#xff0c;线性表 4&#xff0c;顺序表 4.1 接口的实现 5&#xff0c; ArrayList简介 6&#xff0c;ArrayList的使用 6.1 ArrayList的构造方法 6.2 ArrayList的常见操作 6.3 ArrayList的遍历 7&#xff0c;…

解决CSDN 导入Markdown图片失效不显示问题

每次将MarkDown文件导入CSDN的时候&#xff0c;有些图片总是由于防盗链的问题导致图片加载不出来&#xff0c;还得手动再导一遍&#xff0c;极其不方便。所以我们能不能建立一个属于自己的图片服务器或者说在线图库呢&#xff0c;而且每次使用Typora插入图片的时候都会自动的上…

JVM学习-Arthas

Arthas Alibaba开源的Java诊断工具&#xff0c;在线排查问题&#xff0c;无需重启&#xff0c;动态跟踪Java代码&#xff0c;实时监控JVM状态Arthas支持JDK6&#xff0c;支持Linux/Mac/Windows&#xff0c;采用命令行交互模式&#xff0c;同时提供丰富的Tab自动补全功能&#…

makefile2

makefile的条件判断 运行make。 替换 make -c make-f …… 还可以 man make来查看其他的make命令。

Vue3的ref创建一个全局变量,非常好用!

1. 前言 Vue3的ref对象我们都知道其用法,通过ref可以创建一个响应式对象使用,同时可以用compute,watch等Vue3的API对其进行操作 不同于Vue2的是,Vue3使用的是组合式API,这也就意味着,我可以在外部单独创建一个ref对象,然后保存,通过导出的方式,给其他的页面使用 理论存在,开始…