深度学习之卷积神经网络(CNN)

ops/2024/11/14 13:18:54/

​ 卷积神经网络是一种用来处理局部和整体相关性的计算网络结构,被应用在图像识别、自然语言处理甚至是语音识别领域,因为图像数据具有显著的局部与整体关系,其在图像识别领域的应用获得了巨大的成功。

1 卷积神经网络的组成层

​ 以图像分类任务为例,在表5.1所示卷积神经网络中,一般包含5种类型的网络层次结构:

​ 表1 卷积神经网络的组成

CNN层次结构输出尺寸作用
输入层 W 1 × H 1 × 3 W_1\times H_1\times 3 W1×H1×3卷积网络的原始输入,可以是原始或预处理后的像素矩阵
卷积层 W 1 × H 1 × K W_1\times H_1\times K W1×H1×K参数共享、局部连接,利用平移不变性从全局特征图提取局部特征
激活层 W 1 × H 1 × K W_1\times H_1\times K W1×H1×K将卷积层的输出结果进行非线性映射
池化层 W 2 × H 2 × K W_2\times H_2\times K W2×H2×K进一步筛选特征,可以有效减少后续网络层次所需的参数量
全连接层 ( W 2 ⋅ H 2 ⋅ K ) × C (W_2 \cdot H_2 \cdot K)\times C (W2H2K)×C将多维特征展平为2维特征,通常低维度特征对应任务的学习目标(类别或回归值)

W 1 × H 1 × 3 W_1\times H_1\times 3 W1×H1×3对应原始图像或经过预处理的像素值矩阵,3对应RGB图像的通道; K K K表示卷积层中卷积核(滤波器)的个数; W 2 × H 2 W_2\times H_2 W2×H2 为池化后特征图的尺度,在全局池化中尺度对应 1 × 1 1\times 1 1×1; ( W 2 ⋅ H 2 ⋅ K ) (W_2 \cdot H_2 \cdot K) (W2H2K)是将多维特征压缩到1维之后的大小, C C C对应的则是图像类别个数。

1.1 输入层

​ 输入层(Input Layer)通常是输入卷积神经网络的原始数据或经过预处理的数据,可以是图像识别领域中原始三维的多彩图像,也可以是音频识别领域中经过傅利叶变换的二维波形数据,甚至是自然语言处理中一维表示的句子向量。以图像分类任务为例,输入层输入的图像一般包含RGB三个通道,是一个由长宽分别为 H H H W W W组成的3维像素值矩阵 H × W × 3 H\times W \times 3 H×W×3,卷积网络会将输入层的数据传递到一系列卷积、池化等操作进行特征提取和转化,最终由全连接层对特征进行汇总和结果输出。根据计算能力、存储大小和模型结构的不同,卷积神经网络每次可以批量处理的图像个数不尽相同,若指定输入层接收到的图像个数为 N N N,则输入层的输出数据为 N × H × W × 3 N\times H\times W\times 3 N×H×W×3

1.2 卷积层

​ 卷积层(Convolution Layer)通常用作对输入层输入数据进行特征提取,通过卷积核矩阵对原始数据中隐含关联性的一种抽象。卷积操作原理上其实是对两张像素矩阵进行点乘求和的数学操作,其中一个矩阵为输入的数据矩阵,另一个矩阵则为卷积核(滤波器或特征矩阵),求得的结果表示为原始图像中提取的特定局部特征。图5.1表示卷积操作过程中的不同填充策略,上半部分采用零填充,下半部分采用有效卷积(舍弃不能完整运算的边缘部分)。
在这里插入图片描述

​ 图5.1 卷积操作示意图

1.3 激活层

​ 激活层(Activation Layer)负责对卷积层抽取的特征进行激活,由于卷积操作是由输入矩阵与卷积核矩阵进行相差的线性变化关系,需要激活层对其进行非线性的映射。激活层主要由激活函数组成,即在卷积层输出结果的基础上嵌套一个非线性函数,让输出的特征图具有非线性关系。卷积网络中通常采用ReLU来充当激活函数(还包括tanh和sigmoid等)ReLU的函数形式如公式(5-1)所示,能够限制小于0的值为0,同时大于等于0的值保持不变。
f ( x ) = { 0 if  x < 0 x if  x ≥ 0 (5-1) f(x)=\begin{cases} 0 &\text{if } x<0 \\ x &\text{if } x\ge 0 \end{cases} \tag{5-1} f(x)={0xif x<0if x0(5-1)

1.4 池化层

​ 池化层又称为降采样层(Downsampling Layer),作用是对感受域内的特征进行筛选,提取区域内最具代表性的特征,能够有效地降低输出特征尺度,进而减少模型所需要的参数量。按操作类型通常分为最大池化(Max Pooling)、平均池化(Average Pooling)和求和池化(Sum Pooling),它们分别提取感受域内最大、平均与总和的特征值作为输出,最常用的是最大池化。

1.5 全连接层

​ 全连接层(Full Connected Layer)负责对卷积神经网络学习提取到的特征进行汇总,将多维的特征输入映射为二维的特征输出,高维表示样本批次,低位常常对应任务目标。


http://www.ppmy.cn/ops/133292.html

相关文章

CMake 实战

我现在项目的目录结构如下 project_root/ ├── CMakeLists.txt ├── main.cpp 主函数 ├── third_part/ │ ├── CMakeLists.txt # 总的 third_part CMakeLists.txt │ ├── json/ │ │ ├── CMakeLists.txt # json 的 CMakeLists.txt │ │ └── json.hpp │ ├…

用 PHP或Python加密字符串,用iOS解密

可以使用对称加密算法&#xff08;如 AES&#xff09;来加密和解密字符串。对称加密适合这种跨平台加密解密的需求&#xff0c;因为可以使用相同的密钥和算法在不同的编程语言和系统之间进行加密和解密。 下面展示如何使用 Python 或 PHP 进行加密&#xff0c;然后用 iOS (Swi…

Unity学习笔记(2):场景绘制

文章目录 前言开发环境场景资源导入Unity2d 瓦片功能更改游戏视图缩放比例 叠层Tilemap如何分层 总结 前言 我也算是跨行学Unity。我希望学了这个东西能有用吧。对以后的工作的要求&#xff0c;时薪高。唉&#xff0c;先学着好了。不知道以后的行情是如何&#xff0c;但是上位…

探索LINQ在C#中的应用:从基本查询到数据联接

LINQ&#xff08;语言集成查询&#xff09;是微软为.NET框架开发的一种强大功能&#xff0c;于2007年作为C# 3.0和Visual Basic .NET 9.0的一部分引入。LINQ的诞生旨在提供一种一致且直观的方式来查询和操作数据&#xff0c;无论数据来源是内存中的集合、数据库还是XML文档。 …

【测试框架篇】单元测试框架pytest(1):环境安装和配置

一、pytest简介 Pytest是Python的一种单元测试框架&#xff0c;与Python自带的unittest测试框架类似&#xff0c;但是比 unittest框架使用起来更简洁&#xff0c;效率更高。 二、pytest特点 Pytest是一个非常成熟的Python测试框架,主要特点有以下几点&#xff1a; 非常容易…

DAY59||并查集理论基础 |寻找存在的路径

并查集理论基础 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判断两个元素在不在同一个集合 代码模板 int n 1005; // n根据题目中节点数量而定&#xff0c;一般比节点数量大一点就好 vector<int> father vector<int> (n, 0); // C里的一…

C++开发基础之使用librabbitmq库实现RabbitMQ消息队列通信

1. 前言 RabbitMQ是一个流行的开源消息队列系统&#xff0c;支持多种消息协议&#xff0c;广泛用于构建分布式系统和微服务架构。可以在不同应用程序之间实现异步消息传递。在本文中&#xff0c;我们将熟悉如何使用C与RabbitMQ进行消息通信。 2. 准备工作 在 Windows 平台上…

docker构建jdk11

# 建立一个新的镜像文件&#xff0c;配置模板&#xff1a;新建立的镜像是以centos为基础模板 # 因为jdk必须运行在操作系统之上 FROM centos:7.9.2009# 作者名 MAINTAINER yuanhang# 创建一个新目录来存储jdk文件 RUN mkdir /usr/local/java#将jdk压缩文件复制到镜像中&#…