深度学习 | CNN 基本原理

news2024/11/26 2:37:46

目录

    • 1 什么是 CNN
    • 2 输入层
    • 3 卷积层
      • 3.1 卷积操作
      • 3.2 Padding 零填充
      • 3.3 处理彩色图像
    • 4 池化层
      • 4.1 池化操作
      • 4.2 池化的平移不变性
    • 5 全连接层
    • 6 输出层


前言

  • 这篇博客不够详细,因为没有介绍卷积操作的具体计算;
  • 但是它介绍了 CNN 各层次的功能,提供了一个全局的视野。

参考博客

  • 卷积神经网络(CNN)详细介绍及其原理详解


1 什么是 CNN

卷积神经网络 CNN 通常被用于图像处理,比如下图的手写数字辨识过程:

在这里插入图片描述

可以看出,整个过程由以下几层组成:

  • 输入层:输入图像等信息;
  • 卷积层:用于提取图像的底层特征;
  • 池化层:防止过拟合,即将数据的维度减小;
  • 全连接层:汇总卷积层和池化层得到的图像的底层特征和信息;
  • 输出层:根据全连接层的信息得到概率最大的结果。

其中最重要的就是卷积层,这也是卷积神经网络名称的由来。接下来,我们将对这些层进行详细的介绍。

个人理解:上图中的红色方框表明,黑色线所指向位置的元素是由红色方框内的元素计算出来的。



2 输入层

CNN 的输入层用于将输入的图像转换为由像素值构成的二维矩阵,并存储该二维矩阵以等待后续操作。与人眼不同,计算机能够处理的图像是一个二维矩阵,该二维矩阵是由图像的每一个像素的像素值组成的。如下图所示,手写数字 8 8 8 的图像被计算机读取为一个二维矩阵:

在这里插入图片描述
图 (a) 是一个灰度图像,这是因为其每个像素值的范围在 [ 0 , 255 ] [0,255] [0,255] 之间,表示其颜色的强弱程度。除灰度图像外还有黑白图像,黑白图像的每个像素值要么是 0 0 0,要么是 255 255 255。而日常生活中最常见的是 R G B \mathrm{RGB} RGB 图像,这种图像有三个通道,分别是:红色、绿色、蓝色。每个通道的每个像素值的范围也是在 [ 0 , 255 ] [0,255] [0,255] 之间,表示其颜色的强弱程度。

由于灰度图像的值范围较小、颜色较单一,因此比较好操作,所以我们通常处理的都是灰度图像。在某些情况下, R G B \mathrm{RGB} RGB 图像在输入神经网络之前也会被转化为灰度图像,这就是因为处理三个通道的计算量非常大。不过随着计算机性能的高速发展,现在有些神经网络也可以直接处理 R G B \mathrm{RGB} RGB 图像。



3 卷积层

一旦图片被输入网络,它将被转换成一个二维矩阵。为了提取该矩阵中的特征,卷积操作被应用于该矩阵。该操作通过计算每个像素与卷积核(Convolution Kernel)的点积,为图像中具有特征的区域赋予高值,为不具有特征的区域赋予低值。

注意:想要提取什么样的特征,就要使用什么样的卷积核。比如:想要提取原始图像中眼睛这一特征,就要使用具有眼睛特征的卷积核。

3.1 卷积操作

卷积核本质上也是一个二维矩阵,其尺寸通常小于或等于输入图像的二维矩阵。在卷积操作中,卷积核在输入图像矩阵上逐像素移动,并在每次移动后执行像素值的点积运算。将所有这些点积的和赋予当前卷积核位置对应的输出矩阵中的相应像素值。如下图所示:

在这里插入图片描述

通过卷积核不断地移动和计算(逐元素相乘再相加),我们得到了一个新的二维矩阵,该二维矩阵被称为特征图(Feature Map),也就是图像中最有用的特征。此外,不难看出卷积操作是一个降维的过程,因为特征图的维度比原始图像的二维矩阵小。

在上图中,红色矩阵是图像的二维矩阵,蓝色矩阵是卷积核,紫色矩阵是特征图。

为了进行更加生动形象的说明,我们以提取人脸图像中的眼睛为例,选取眼睛作为卷积核,并在整个头部图像上移动,以识别和定位眼睛的位置。如下图 (a)(b)(c) 所示:

在这里插入图片描述

为了强调我们提取到的人眼特征,我们可以假设高值为白色,低值为黑色,并对特征图进行上色处理,如上图 (d) 所示。说明:由于黑色实在是太辣眼睛了,因此我实际上用的是灰色。

由向量乘法的几何意义可知,两个向量越相似,其乘积结果越大。因此当卷积核移动到眼睛部分时,它们的卷积结果较大,即上图中的 100 100 100



3.2 Padding 零填充

可以从上一节的动图看出,边缘的像素只被计算了一次,而中间的像素被计算了多次,从而造成了边缘特征的丢失。为了克服这一问题,通常在原始输入图像的二维矩阵周围添加额外的边缘像素,即进行零填充(Padding)。如此一来,每个像素都能够获得相同的计算机会,确保了特征图不会丢失边缘区域的重要特征。

P a d d i n g = 1 \mathrm{Padding = 1} Padding=1,即扩展 1 1 1

在这里插入图片描述

P a d d i n g = 2 \mathrm{Padding = 2} Padding=2,即扩展 2 2 2

在这里插入图片描述

注意:上面两张动图中,蓝色矩阵是图像的二维矩阵,透明灰色矩阵是卷积核,绿色矩阵是特征图。



3.3 处理彩色图像

已知每张彩色图像都有三个通道,即三个二维矩阵。假设我们使用两组卷积核来提取图像特征,如下图所示:

在这里插入图片描述

其中一组卷积核对应提取出一个特征图,每组中的一个卷积核对应提取一个通道的特征。不难看出,有多少组卷积核就会有多少个特征图。特征图中的一个元素,等于三个通道的卷积结果之和,再加上偏置项。比如:上图中的 1 1 1 等于 1 + ( − 1 ) + 0 + 1 1+(-1)+0+1 1+(1)+0+1。偏置项 b i a s \mathrm{bias} bias 就是每组最后的那个 1 × 1 1\times 1 1×1 矩阵。

注意:特征图的个数等于卷积核的组数,而不是卷积核的个数!



4 池化层

在上一节中,我们讲到有多少组卷积核就会有多少个特征图。但是随着特征图的增多,我们必须考虑一个重要的问题:并非所有的特征图都是必需的。而且多余的特征图可能会带来如下两个问题:

  • 过拟合
  • 维度过高

为了解决这个问题,我们使用了池化层。

4.1 池化操作

池化层又称为下采样,其作用在于在卷积操作之后对特征图进行降维,通过提取最显著的特征信息来减少数据量,从而起到减小过拟合和降低维度的作用。

池化过程类似于卷积过程,也是让一个固定大小的窗口在图片上进行移动,每次我们选取窗口内最具代表性的特征。那么如何提取出最具代表性的特征呢?通常有以下两种方法。

最大池化

最大池化是指每次选取窗口内所有值的最大值,认为这个最大值就是当前位置最具代表性的特征。该过程如下图所示:
在这里插入图片描述
参数说明:

  • k e r n e l − s i z e = 2 \mathrm{kernel_{-}size} = 2 kernelsize=2:是指窗口的维度为 2 × 2 2\times2 2×2
  • s t r i d e = 2 \mathrm{stride} = 2 stride=2:是指窗口每次移动两格位置;
  • p a d d i n g = 0 \mathrm{padding} = 0 padding=0:是指零填充的圈数,如果值为 0 0 0 则表明没有扩展。

平均池化

平均池化是指每次选取窗口内所有值的平均值,即考虑了每个位置的值对该位置特征的影响。该过程如下图所示:

在这里插入图片描述
池化层的优点总结如下:

  • 减少参数量的同时保留图像的原始特征;
  • 有效地防止过拟合;
  • 为 CNN 带来平移不变性;

前两个优点我们之前已经介绍过了,那么什么又是平移不变性呢?



4.2 池化的平移不变性

如图 (a) 所示,两张图片的内容都是人脸,但是下图的人脸稍稍左移了一点。如图 (b) 所示,经过卷积操作后得到各自的特征图。

在这里插入图片描述

其中上图的眼睛特征的位置正常,下图的眼睛特征的位置稍稍左移了一点。尽管人类能够识别出眼睛的位置,但是当通过神经网络进行计算时,可能会引入误差,原因是网络未能在预期位置上正确地识别出眼睛。针对这种情况,应当采取何种措施呢?

如图 (c) 所示,使用池化层执行池化处理后,观察到尽管在池化前两张图像的眼睛特征位于不同位置,但经过池化处理后,这些特征的位置均统一。这极大地便利了后续神经网络的计算,并且体现了池化操作的平移不变性。



5 全连接层

假设在上述头部图像示例中,我们已经通过卷积操作和池化操作提取了眼睛、鼻子和嘴巴的特征。若要利用这些特征来判断图像是否为人体头部,需要对所有提取出的特征图进行 “展平” 操作,即将其维度转换为 1 × n 1\times n 1×n 的形式,该过程被称为全连接。如下图所示:

在这里插入图片描述

也就是说,全连接层将提取出的特征图展开成一维向量。随后通过计算产生一个概率值,该值表示原始图像是人体头部图像的概率。

个人理解:上图中每个特征图的维度是 5 × 5 5\times 5 5×5,展开成一维向量后的维度是 1 × 25 1\times 25 1×25,拼接起来送入神经元时的维度是 1 × 75 1\times 75 1×75



6 输出层

输出层用于对全连接层输出的一维向量进行计算,如下图所示:

在这里插入图片描述

其中的计算可能是线性的,也可能是非线性的。在深度学习中,鉴于通常需要处理多分类任务,输出层每个位置都会产生一个概率值,代表属于当前位置对应类别的概率。选择概率值最大的类别作为最终的识别结果。在训练过程中,通过不断调整网络的参数,提高识别的准确率。



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

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

相关文章

08 模型演化根本 深度学习推荐算法的五大范式

易经》“九三:君于终日乾乾;夕惕若,厉无咎”。九三是指阳爻在卦中处于第三位,已经到达中位,惕龙指这个阶段逐渐理性,德才已经显现,会引人注目;但要反思自己的不足,努力不…

昇思25天学习打卡营|MQ(mindquantum)编程实践

学AI还能赢奖品?每天30分钟,25天打通AI任督二脉 (qq.com) 安装 Packages # 安装 mindquantum, networkx !pip install mindquantum -i https://pypi.mirrors.ustc.edu.cn/simple !pip install networkx -i https://pypi.mirrors.ustc.edu.cn/simple 安装…

脸书登录指南:如何在同一台设备登录多个Facebook账号?

海外社媒营销人员和跨境卖家现在越来越依赖社交媒体平台来拓展业务和接触潜在客户,尤其是Facebook。然而,在进行脸书登录时,你可能会问:如何在同一台设备上登录多个Facebook账号,而不违反Facebook的使用条款&#xff1…

指针与数组笔试题解析

文章目录 1.一维数组1.1 整型数组1.2 字符数组 2. 二维数组3.指针笔试题3.1 练习13.2 练习23.3 练习3 数组名的意义: 1.sizeof(数组名),这里的数组表示整个数组,计算的整个数组的大小 2.&数组名,这里的数组名表示整个数组的&a…

【Diffusion学习】【生成式AI】Stable Diffusion、DALL-E、Imagen 背後共同的套路

文章目录 图片生成Framework 需要3个组件:相关论文【Stable Diffusion,DALL-E,Imagen】 具体介绍三个组件1. Text encoder介绍【结论:文字的encoder重要,Diffusion的模型不是很重要!】评估指标:…

用go实现限流算法

文章目录 固定窗口优缺点:适用场景:总结: 滑动窗口优缺点:适用场景:总结: 漏桶限流器优缺点:适用场景:总结: 令牌桶优缺点:适用场景:总结&#xf…

定义损失函数并以此训练和评估模型

基础神经网络模型搭建 【Pytorch】数据集的加载和处理(一) 【Pytorch】数据集的加载和处理(二) 损失函数计算模型输出和目标之间的距离。通过torch.nn 包可以定义一个负对数似然损失函数,负对数似然损失对于训练具有多…

炎炎夏日,这份锂电AGV叉车保养指南赶紧收藏!

AGV 随着工厂自动化、计算机集成制造系统技术的逐步发展以及柔性制造系统、自动化立体仓库的广泛应用,AGV(Automatic GuidedVehicle)即自动导引车作为联系和调节离散型物流系统以使其作业连续化的必要的自动化搬运装卸手段,其应用范围和技术水平得到了迅…

云服务器实际内存与购买不足量问题

君衍 一、本篇缘由二、问题研究1、dmidecode2、dmesg | grep -i memory 三、kdump四、解决方案1、卸载kdump-tools2、清理依赖包3、修改配置文件4、重新生成配置文件5、重启服务器6、再次查看 一、本篇缘由 本篇由于最近买了云服务器,之前基本在本地使用VMware进行虚…

初识单片机之点亮LED灯

1、前言 如果说编程的开始是Hello world,那么单片机的开始就是点亮LED灯,这个操作最直接的展示了单片机强大的控制功能,这里我就以直接点亮指定位置的LED灯的形式演示这个功能。 2、原理介绍 我的单片机的LED灯都是接在单片机的P1口,从P10~P…

【数据结构(邓俊辉)学习笔记】高级搜索树02——B树

文章目录 1. 大数据1.1 640 KB1.2 越来越大的数据1.3 越来越小的内存1.4 一秒与一天1.5 分级I/O1.6 1B 1KB 2. 结构2.1 观察体验2.2 多路平衡2.3 还是I/O2.4 深度统一2.5 阶次含义2.6 紧凑表示2.7 BTNode2.8 BTree 3. 查找3.1 算法过程3.2 操作实例3.3 算法实现3.4 主次成本3.…

YOLOv8白皮书-第Y8周:yolov8.yaml文件解读

本文为365天深度学习训练营中的学习记录博客 原作者:K同学啊|接辅导、项目定制 请根据YOLOv8n、YOLOv8s模型的结构输出,手写出YOLOv8l的模型输出 文件位置:./ultralytics/cfg/models/v8/yolov8.yaml 一、参数配置 # Parameters nc: 80 # n…

Bug:时间字段显示有问题

Bug:时间字段显示有问题 文章目录 Bug:时间字段显示有问题1、问题2、解决方法一:添加注解3、解决方法二:消息转换器自定义对象映射器配置消息转换器 1、问题 ​ 在后端传输时间给前端的时候,发现前端的时间显示有问题…

设计模式总结(设计模式的原则及分类)

1.什么是设计模式? 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结…

自动化任务调度,轻松管理海量数据采集项目

摘要: 本文深入探讨了在数据驱动时代,如何通过自动化任务调度轻松驾驭海量数据采集项目,提升工作效率,确保数据处理的准确性和及时性。我们分享了一系列实用策略与工具推荐,帮助企业和开发者优化数据采集流程&#xf…

SQL 中的 EXISTS 子句:探究其用途与应用

目录 EXISTS 子句简介语法 EXISTS 与 NOT EXISTSEXISTS 子句的工作原理实际应用场景场景一:筛选存在关联数据的记录场景二:优化查询性能 EXISTS 与其他 SQL 结构的比较EXISTS vs. JOINEXISTS vs. IN 多重 EXISTS 条件在 UPDATE 语句中使用 EXISTS常见问题…

基于 AntV F2 的雷达图组件开发

本文由ScriptEcho平台提供技术支持 项目地址:传送门 基于 AntV F2 的雷达图组件开发 应用场景介绍 雷达图是一种多变量统计图表,用于可视化展示多个维度的数据。它通常用于比较不同对象的多个属性或指标,直观地反映各维度之间的差异和整体…

LoRaWAN协议

目录 一、介绍 1、LPWA是什么? 2、LoRa是什么? 3、LoRaWAN是什么? 4、浅谈LoRa与LoRaWAN的区别 5、LoRaWAN开发背景 6、LoRaWAN与NB-IOT如何选择? 二、LoRaWAN网络结构 1、组网结构 2、星型拓扑结构 三、数据格式 1、…

golang AST语法树解析

1. 源码示例 package mainimport ("context" )// Foo 结构体 type Foo struct {i int }// Bar 接口 type Bar interface {Do(ctx context.Context) error }// main方法 func main() {a : 1 }2. Golang中的AST golang官方提供的几个包,可以帮助我们进行A…

代码随想录算法训练营第五十五天|101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

101.孤岛的总面积 题目链接:101.孤岛的总面积沉没孤岛 文档讲解:代码随想录 状态:不会 思路: 步骤1:将边界上的陆地变为海洋 步骤2:计算孤岛的总面积 题解: public class Main {// 保存四个方…