卷积神经网络的结构组成与解释(详细介绍)

文章目录

前言

1、卷积层

2、激活层

3、BN层

4、池化层

5、FC层(全连接层)

6、损失层

7、Dropout层

8、优化器

9、学习率

10、卷积神经网络的常见结构


前言

卷积神经网络是以卷积层为主的深层网络结构,网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积(元素相乘再求和)的操作。


1、卷积层

常见的卷积操作如下:

卷积操作解释图解
标准卷积一般采用3x3、5x5、7x7的卷积核进行卷积操作
分组卷积将输入特征图按通道均分为 x 组,然后对每一组进行常规卷积,最后再进行合并。
空洞卷积为扩大感受野,在卷积核里面的元素之间插入空格来“膨胀”内核。形成“空洞卷积”(或称为膨胀卷积),并用膨胀率参数L表示要扩大内核的范围,即在内核元素之间插入L-1个空格。当L=1时,则内核元素之间没有插入空格,变为标准卷积。
深度可分离卷积深度可分离卷积包括为逐通道卷积和逐点卷积两个过程

(通道卷积,2D标准卷积)

(逐点卷积,1x1卷积)

反卷积属于上采样过程,“反卷积”是将卷积核转换为稀疏矩阵后进行转置计算
可变形卷积指标准卷积操作中采样位置增加了一个偏移量offset,如此卷积核在训练过程中能扩展到很大的范围

补充 :

1x1 卷积即用 1x1 的卷积核进行卷积操作,其作用在于升维与降维。升维操作常用于channel为 1 (即是通道数为1)的情况下,降维操作常用于channel 为 n(即通道数为n)的情况下。

降维:通道数不变,数值改变。

升维:通道数改变为kernel的数量(即为filters),运算本质可以看为全连接。

卷积计算在深度神经网络中的量是极大的,压缩卷积计算量的主要方法如下:

序号方法
1采样多个 3x3 卷积核代替大卷积核(如用两个3x3的卷积核代替5x5的卷积核)
2采用深度可分离卷积(分组卷积)
3通道Shuffle
4Pooling层
5Stride = 2
6等等

2、激活层

为了提升网络的非线性能力,以提高网络的表达能力。每个卷积层后都会跟一个激活层。激活函数主要分为饱和激活函数(Sigmoid、Tanh)与非饱和激活函数(ReLU、Leaky ReLU、ELU、PReLU、RReLU)。非饱和激活函数能够解决梯度消失的问题,能够加快收敛速度。

常用函数:ReLU函数、Leaky ReLU函数、ELU函数等。

ReLU函数

Leaky ReLU函数

ELU函数

3、BN层

通过一定的规范化手段,把每层神经网络任意神经元的输入值的分布强行拉回到均值为0,方差为1的标准正态分布。BatchNorm是归一化的一种手段,会减小图像之间的绝对差异,突出相对差异,加快训练速度。但不适用于image-to-image以及对噪声敏感的任务中。

常用函数:BatchNorm2d

PyTorch用法:nn.BatchNorm2d(num_features, eps, momentum, affine)

num_features:一般输入参数为batch_size, num_features, height * width,即为其中特征的数量。

eps:分母中添加的一个值,目的是为了计算的稳定性,默认为:1e-5。

momentum:一个用于运行过程中均值和方差的一个估计参数(我的理解是一个稳定系数,类似于SGD中的momentum的系数)。

affine:当设为true时,会给定可以学习的系数矩阵gamma和beta。

4、池化层

pooling一方面使特征图变小,简化网络计算复杂度。一方面通过多次池化压缩特征,提取主要特征,属于下采样过程

常用函数:Max Pooling(最大池化)、Average Pooling(平均池化)等。

Max Pooling 和 Average Pooling用法:

  • 当需总和特征图上的所有信息做相应决策时,通常使用AvgPooling,例如在图像分割领域中用Global AvgPooling来获取全局上下文信息;在图像分类中在最后几层中会使用AvgPooling。
  • 在图像分割/目标检测/图像分类前面几层,由于图像包含较多的噪声和目标处理无关的信息,因此在前几层会使用MaxPooling去除无效信息。

补充:上采样层重置图像大小为上采样过程,如Resize,双线性插值直接缩放,类似于图像缩放,概念可见最邻近插值算法和双线性插值算法。实现函数有:
nn.functional.interpolate(input, size = None, scale_factor = None, mod = 'nearest', align_corners = None) 和 nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride = 1, padding = 0, output_padding = 0, bias = True)。

5、FC层(全连接层)

连接所有的特征,将输出值送给分类器。主要是对前层的特征进行一个加权求和(卷积层是将数据输入映射到隐层特征空间),将特征空间通过线性变换映射到样本标记空间(label)。全连接层可以通过 1x1卷积 + global average pooling代替。可以通过全连接层参数冗余,全连接层参数和尺寸相关。

常用函数:nn.Linear(in_features, out_features, bias)

补充:分类器包括线性分类器与非线性分类器

分类器介绍常见种类优缺点
线性分类器线性分类器就是用一个“超平面”将正、负样本隔离开LR、Softmax、贝叶斯分类、单层感知机、线性回归、SVM(线性核)等线性分类器速度快、编程方便且便于理解,但是拟合能力低
非线性分类器

非线性分类器就是用一个“超曲面”或者多个超平(曲)面的组合将正、负样本隔离开(即,不属于线性的分类器)

决策树、RF、GBDT、多层感知机SVM(高斯核)等

非线性分类器拟合能力强但是编程实现较复杂,理解难度大

6、损失层

设置一个损失函数用来比较网络的输出值和目标值,通过最小化损失来驱动网络的训练。网络的损失通过前向操作计算,网络参数相对于损失函数的梯度则通过反向操作计算。

常用函数:分类问题损失(离散值:分类问题、分割问题):nn.BCELoss、nn.CrossEntropyLoss等。回归问题损失(连续值:推测问题、回归分类问题):nn.L1Loss、nn.MSELoss、nn.SmoothL1Loss等。

7、Dropout层

在不同的训练过程中堆积扔掉一部分神经元,以防止过拟合,一般用在全连接层。在测试过程中不使用随机失活,所有的神经元都激活。

常用函数:nn.dropout

8、优化器

为了更高效的优化网络结构(损失函数最小),即是网络的优化策略,主要方法如下:

解释优化器种类特点
基于梯度下降原则(均使用梯度下降算法对网络权重进行更新,区别在于使用的样本数量不同)GD(梯度下降);SGD(随机梯度下降,面向一个样本);BGD(批量梯度下降,面向全部样本);MBGD(小批量梯度下降,面向小批量样本)引入随机性和噪声
基于动量原则(根据局部历史梯度对当前梯度进行平滑)Momentum(动量法);NAG(Nesterov Accelerated Gradient)加入动量原则,具有加速梯度下降的作用
自适应学习率(对于不同参数使用不同的自适应学习率;Adagrad使用梯度平方和、Adadelta和RMSProp使用梯度一阶指数平滑,RMSProp是Adadelta的一种特殊形式、Adam吸收了Momentum和RMSProp的优点改进了梯度计算方式和学习率)Adagrad;Adadelta;RMSProp;Adam自适应学习

常用的优化器为Adam,用法为:torch.optim.Adam。

补充:卷积神经网络正则化是为减小方差,减轻过拟合的策略,方法有:L1正则(参数绝对值的和);L2正则(参数的平方和,weight_decay:权重衰退)。

9、学习率

学习率作为监督学习以及深度学习中重要的超参,其决定着目标函数能否收敛到局部最小值以及合适收敛到最小值。合适的学习率能够使目标函数在合适的时间内收敛到局部最小值。

常用函数:torch.optim.lr_scheduler;ExponentialLR;ReduceLROnplateau;CyclicLR等。

10、卷积神经网络的常见结构

常见的结构有:跳连结构(ResNet)、并行结构(Inception V1-V4即GoogLeNet)、轻量型结构(Mobilenet V1)、多分支结构(SiameseNet;TripletNet;QuadrupleNet;多任务网络等)、Attention结构(ResNet + Attention)。

结构介绍与特点图示
跳连结构(代表:ResNet)2015年何恺明团队提出。引入跳连的结构来防止梯度消失问题,进而可以进一步加大网络深度。扩展结构有:ResNeXt、DenseNet、WideResNet、ResNet In ResNet、Inception-ResNet'等
并行结构(代表:Inception V1-V4)2014年Google团队提出。不仅强调网络的深度,还考虑网络的宽度。其使用1x1的卷积来进行升降维,在多个尺寸上同时进行卷积再聚合。其次利用稀疏矩阵分解成密集矩阵计算的原理加快收敛速度
轻量型结构(代表:MobileNet V1)

2017年Google团队提出。为了设计能够用于移动端的网络结构,使用Depth-wise Separable Convolution的卷积方式代替传统卷积方式,以达到减少网络权值参数的目的。扩展结构有:MobileNetV2、MobileNetV3、SqueezeNet、ShuffleNet V1、ShuffleNet V2等

多分支结构(代表:TripletNet)基于多个特征提取方法提出,通过比较距离来学习有用的变量。该网络由3个具有相同前馈网络(共享参数)组成的,需要输入是3个样本,一个正样本和两个负样本,或者一个负样本和两个正样本。训练的目标是让相同类别之间的距离竟可能的小,让不同的类别之间距离竟可能的大。常用于人脸识别。
Attention结构(代表:ResNet + Attention)对于全局信息,注意力机制会重点关注一些特殊的目标区域,也就是注意力焦点,进而利用有限的注意力资源对信息进行筛选,提高信息处理的准确性和效率。注意力机制有Soft-Attention和Hard-Attention区分,可以作用在特征图上、尺度空间上、channel尺度上和不同时刻历史特征上等。

参考:

小白学视觉

https://www.bilibili.com/video/BV1we4y1X7vy/?spm_id_from=333.880.my_history.page.click&vd_source=8332e741acbb75b438e9c1c91efed022

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

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

相关文章

模板初阶的学习

目录: 一:泛型模板 二:函数模板 三:类模板 1:泛型模板 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。 以交换函数为列进行讲解: void Swap(…

微服务中的重要模块

为什么要有微服务? 微服务提高开发效能,避免业务的重复理解,代码重复开发,增加开发效能和代码复用性。 在实际的工作中许多不同的业务有着共同的功能需求,如果我们每遇到一次这种需求就重新去理解构建一次的话会花费大…

【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵,网络攻击,流量异常【3】

之前用NSL-KDD数据集做入侵检测的项目是: 【1】https://qq742971636.blog.csdn.net/article/details/137082925 【2】https://qq742971636.blog.csdn.net/article/details/137170933 有人问我是不是可以改代码,我说可以。 训练 我将NSL_KDD_Final_1.i…

Day42:动态规划 LeedCode 01背包 416. 分割等和子集

01背包 1.确定dp数组以及下标的含义 dp[i][j]的含义:从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。 那么可以有两个方向推出来dp[i][j] 2.确定递推公式 不放物品i:由dp[i - 1][j]推出,即背…

十大排序——9.桶排序

这篇文章我们来介绍一下桶排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 桶排序和计数排序一样,都不是基于比较进行排序的。 下面通过一个例子来理解一下桶排序吧。 首先,给你一个无序数组[ 20,18,28,66,25,31,67,30 ],然后&#…

Maven POM元素解析(二)

一、parent <parent>元素包含定位此项目将从中继承的父项目所需的信息。注意&#xff1a;此元素的子元素不是插值的&#xff0c;必须作为文字值给定。 ElementTypeDescriptiongroupIdString要从中继承的父项目的组id。artifactIdString要从中继承的父项目的项目id。ver…

【Entity Framework】你知道如何处理无键实体吗

【Entity Framework】你知道如何处理无键实体吗 文章目录 【Entity Framework】你知道如何处理无键实体吗一、概述二、定义无键实体类型数据注释 三、无键实体类型特征四、无键实体使用场景五、无键实体使用场景六、无键使用示例6.1 定义一个简单的Blog和Post模型&#xff1a;6…

高分二号卫星(GF-2):中国遥感科技的新高度

​高分二号卫星&#xff08;GF-2&#xff09;是中国在高分辨率地球观测领域的重要成就&#xff0c;其引入了先进的成像技术和灵活的数据获取模式&#xff0c;为地球资源监测、环境保护、城市规划等领域提供了强大的数据支持。本文将深入介绍高分二号卫星的技术特点、成像能力以…

Day 27 39. 组合总和 40.组合总和II 131.分割回文串

组合总和 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 target&#xff09;都是正整数。解集不能…

自定义类型: 结构体 (详解)

本文索引 一. 结构体类型的声明1. 结构体的声明和初始化2. 结构体的特殊声明3. 结构体的自引用 二. 结构体内存对齐1. 对齐规则2. 为啥存在对齐?3. 修改默认对齐值 三. 结构体传参四. 结构体实现位段1. 什么是位段?2. 位段的内存分配3. 位段的应用4. 位段的注意事项 ​ 前言:…

什么是上位机?入门指南

什么是上位机&#xff1f; 上位机&#xff08;SCADA&#xff0c;Supervisory Control and Data Acquisition&#xff09;是一种软件系统&#xff0c;用于监控和控制工业过程中的设备。它通常与传感器、执行器和其他自动化设备一起工作&#xff0c;以实时地监视过程状态、收集数…

【精读文献】Scientific data|2017-2021年中国10米玉米农田变化制图

论文名称&#xff1a;Mapping annual 10-m maize cropland changes in China during 2017–2021 第一作者及通讯作者&#xff1a;Xingang Li, Ying Qu 第一作者单位及通讯作者单位&#xff1a;北京师范大学地理学部 文章发表期刊&#xff1a;《Scientific data》&#xff08…

Token2049主办方遭遇假门票风波,韩国罗马基金会Charles Lee损失50万美元

加密货币——遍地黄金&#xff1f;还是遍地陷阱&#xff1f; 尽管伊朗空袭以色列导致中东局势愈发紧张&#xff0c;但加密社区对当地市场的热情丝毫没有受到影响&#xff0c;不出意外的话&#xff0c;Token 2049这场全球最受瞩目的加密货币盛会将于4月18至19日在迪拜如期举行&…

Buck变换电路

Buck变换电路 Buck变换电路是最基本的DC/DC拓扑电路&#xff0c;属于非隔离型直流变换器&#xff0c;其输出电压小于输入电压。Buck变换电路具有效率高、输出稳定、控制简单和成本低的优点&#xff0c;广泛应用于稳压电源、光伏发电、LED驱动和能量回收系统。 电路原理 Buck变…

PyCharm 2024.1 发布:全面升级,助力高效编程!

PyCharm 2024.1 发布&#xff1a;全面升级&#xff0c;助力高效编程&#xff01; 文章目录 PyCharm 2024.1 发布&#xff1a;全面升级&#xff0c;助力高效编程&#xff01;摘要引言 Hugging Face&#xff1a;模型和数据集的快速文档预览针对 JavaScript 和 TypeScript 的全行代…

力扣101. 对称二叉树(java)

思路&#xff1a; 一、验证 左右子树是否可翻转对称的&#xff1f; 二、分析左右子树情况&#xff1a; 1&#xff09;左右都也空 对称 2&#xff09;左右有一个为空 不对称 3&#xff09;左右都不为空&#xff0c;但数字不同 不对称 4&#xff09;左右都不为空&#xff0c;且数…

C++从入门到精通——类和对象(下篇)

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _mont…

实验一: 分析ARP解析过程

1.实验环境 主机A和主机B连接到交换机&#xff0c;并与一台路由器互连 2.需求描述 主机A和主机B连接到交换机&#xff0c;并与一台路由器互连主机A和主机B设置为同一网段&#xff0c;网关设置为路由接口地址查看ARP相关信息&#xff0c;熟悉在PC和Cisco设备上的常用命令 3.推…

LeetCode 113—— 路径总和 II

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 看到树的问题一般我们先考虑一下是否能用递归来做。 假设 root 节点的值为 value&#xff0c;如果根节点的左子树有一个路径总和等于 targetSum - value&#xff0c;那么只需要将根节点的值插入到这个路径列表中…

全球首个AI女团Sorai.ai出道:定档4月19日北京电影节出道首秀

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…