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

深度学习 | CNN 基本原理

目录

    • 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 输出层

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

在这里插入图片描述

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



相关文章:

深度学习 | CNN 基本原理

目录 1 什么是 CNN2 输入层3 卷积层3.1 卷积操作3.2 Padding 零填充3.3 处理彩色图像 4 池化层4.1 池化操作4.2 池化的平移不变性 5 全连接层6 输出层 前言 这篇博客不够详细,因为没有介绍卷积操作的具体计算;但是它介绍了 CNN 各层次的功能…...

解读|http和https的区别,谁更好用

在日常我们浏览网页时,有些网站会看到www前面是http,有些是https,这两种有什么区别呢?为什么单单多了“s”,会有人说这个网页会更安全些? HTTP(超文本传输协议)和HTTPS(…...

汽车零部件制造企业MES系统主要功能介绍

随着汽车工业的不断发展,汽车零部件制造企业面临着越来越高的生产效率、质量控制和成本管理要求。MES系统作为一种综合信息系统,能够帮助企业实现从订单接收到产品交付的全流程数字化管理,优化资源配置,提高生产效率,确…...

常见的五种聚类算法总结

常见的聚类算法总结 1. K-Means 聚类 描述 K-Means 是一种迭代优化的聚类算法,它通过最小化样本点到质心的距离平方和来进行聚类。 思想 随机选择 K 个初始质心。分配每个数据点到最近的质心,形成 K 个簇。重新计算每个簇的质心。重复上述步骤&…...

智能车存在网络安全隐患,如何应设计出更好的安全防护技术?

智能车网络安全防护技术的研究与设计 摘要:随着智能车技术的迅速发展,车辆的网络连接性不断增强,然而这也带来了诸多网络安全隐患。本文深入探讨了智能车面临的网络安全威胁,并提出了一系列创新的安全防护技术设计,旨…...

通讯的概念

通讯的概念 文章目录 通讯的概念1.通讯的基本概念2. 串行通讯与并行通讯2. 全双工、半双工及单工通讯3. 同步通讯与异步通讯4. 通讯速率 1.通讯的基本概念 通讯是指在嵌入式系统中实现数据交换的技术手段,它涉及到硬件与硬件、硬件与软件之间的信息传输。基本概念包…...

Centos7 rpm 安装 Mysql 8.0.28

Centos7 rpm 安装 Mysql 8.0.28 一、检查系统是否已经安装了Mysql 如果安装了则卸载 [rootiZbp1byzaznzn9jncxr010Z /]# rpm -qa | grep mysql[rootiZbp1byzaznzn9jncxr010Z /]# rpm -qa | grep mariadb mariadb-libs-5.5.68-1.el7.x86_64如果安装了 mysql ,maria…...

Linux 多进程编程详解

Linux 多进程编程详解 多进程编程是现代操作系统中一种重要的并发编程技术。通过在同一程序中运行多个独立的进程,可以实现并发处理,充分利用多核处理器的优势,提高程序的运行效率。本文将详细介绍Linux多进程的基本概念、创建方法、进程间通…...

C语言之大小端理解

目录 1前言2 大小端理解与区分3 大小端的识别和基本切换操作4 总结 1前言 在汽车CAN通讯报文中往往会接触到Intel类型和motorola类型,实际项目中涉及到多机通讯也会接触到大小端问题 2 大小端理解与区分 大端(Big_Endian) :低字节放在高地址小端(Little_Endian):…...

GIT相关操作,推送本地分支到远程仓库流程记录学习

git流程 切换到源文件夹:cd 源文件夹克隆远程仓库:git clone [ssh]进入项目文件夹:cd .\project\查看本地分支:git branch获取远程仓库更新,使远程同步:git fetch查看所有分支(包括远程分支&am…...

网络协议 — Keepalived 高可用方案

目录 文章目录 目录Keepalived 是实现了 VRRP 协议的软件Keepalived 的软件架构VRRP StackCheckersKeepalived 的配置Global configurationvrrp_scriptVRRP Configurationvrrp synchroization groupvrrp instancevirtual ip addressesvirtual routesLVS Configurationvirtual_s…...

前端报错adding CSS “touch-action: none“ to this element解决方案

目录 如图所示控制台出现报错: 原因: touch-action 介绍: 解决方案: 1.手动设置touch-action: 2.使用条件渲染: 3.CSS样式隔离: 4.浏览器兼容性: 5. 忽略警告 如图所示控制台…...

使用phpMyAdmin操作MYSQL(四)

一. 学会phpMyAdmin? phpMyAdminhttp://water.ve-techsz.cn/phpmyadmin/ 虽然我我们可以用命令行操作数据库,但这样难免没有那么直观,方便。所以接下来我们使用phpMyAdmin来操作MySQL,phpMyAdmin是众多MySQL图形化管理工具中使用…...

webpack配置代理请求

在 Webpack 中,可以通过配置devServer中的proxy选项来设置代理请求,以解决开发环境中的跨域问题或实现特定的请求转发逻辑。以下是一个常见的 Webpack 配置示例,展示了如何设置代理: module.exports {// 其他配置项...devServer…...

热门软件缺陷管理工具2024:专业评测与建议

国内外主流的10款软件缺陷管理工具软件对比:PingCode、Worktile、禅道、Tapd、Teambition、Tower、JIRA、Bugzilla、MantisBT、Trac。 在软件开发过程中,管理缺陷和漏洞常常成为一项挑战,尤其是在项目规模庞大时。选择一个高效的软件缺陷管理…...

冒泡,选择,插入,希尔排序

目录 一. 冒泡排序 1. 算法思想 2. 时间复杂度与空间复杂度 3. 代码实现 二. 选择排序 1. 算法思想 2. 时间复杂度与空间复杂度 3. 代码实现 三.插入排序 1. 直接插入排序 (1). 算法思想 (2). 时间复杂度与空间复杂度 (3). 代码实现 2. 希尔排序 (1). 算法思想 …...

【HarmonyOS学习】Calendar Kit日历管理

简介 Calendar Kit提供日历与日程管理能力,包括日历的获取和日程的创建能力。 Calendar Kit为用户提供了一系列接口来获取日历账户,并使用特定的接口向日历账户中写入日程。 如果写入的日程带有提醒时间则系统会在时间到达时向用户发送提醒。 约束点…...

RDMA 高性能架构基本原理与设计方案

RDMA的主要优点包括低延迟、高吞吐量、减少CPU负担和支持零拷贝网络。它允许数据直接在网络接口卡(NIC)和内存之间传输,减少了数据传输过程中的中间环节,从而显著降低了延迟。RDMA技术能够实现高速的数据传输,适用于需…...

【Springboot】事件机制发布与订阅的使用实践

文章目录 为什么要使用事件监听机制概念和原理使用场景用户注册系统实践案例1. 创建事件类2. 发布事件3. 监听事件3.1 通过注解EventListener实现监听3.2 通过实现ApplicationListener接口实现监听 4. 测试事件机制 总结 为什么要使用事件监听机制 在Springboot中,…...

新版网页无插件H.265播放器EasyPlayer.js如何测试demo视频?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,支持H.264与H.265编码格式,性能稳定、播放流畅;支持WebSocket-FLV、HTTP-FLV,HLS(m3u8&#xff0…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

ESP32读取DHT11温湿度数据

芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

python打卡day49@浙大疏锦行

知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...

生信服务器 | 做生信为什么推荐使用Linux服务器?

原文链接&#xff1a;生信服务器 | 做生信为什么推荐使用Linux服务器&#xff1f; 一、 做生信为什么推荐使用服务器&#xff1f; 大家好&#xff0c;我是小杜。在做生信分析的同学&#xff0c;或是将接触学习生信分析的同学&#xff0c;<font style"color:rgb(53, 1…...

SpringCloud优势

目录 完善的微服务支持 高可用性和容错性 灵活的配置管理 强大的服务网关 分布式追踪能力 丰富的社区生态 易于与其他技术栈集成 完善的微服务支持 Spring Cloud 提供了一整套工具和组件来支持微服务架构的开发,包括服务注册与发现、负载均衡、断路器、配置管理等功能…...

JS设计模式(5): 发布订阅模式

解锁JavaScript发布订阅模式&#xff1a;让代码沟通更优雅 在JavaScript的世界里&#xff0c;我们常常会遇到这样的场景&#xff1a;多个模块之间需要相互通信&#xff0c;但是又不想让它们产生过于紧密的耦合。这时候&#xff0c;发布订阅模式就像一位优雅的信使&#xff0c;…...