深度学习修炼(三)卷积操作 | 边界填充、跨步、多输入输出通道、汇聚池化

2023-09-21 22:38:54


之前我们讲了 线性分类器

深度学习修炼(一)线性分类器 | 权值理解、支撑向量机损失、梯度下降算法通俗理解_Qodi的博客-CSDN博客

又讲了基于线性分类器的全连接神经网络

深度学习修炼(二)全连接神经网络 | Softmax,交叉熵损失函数 优化AdaGrad,RMSProp等 对抗过拟合 全攻略_Qodi的博客-CSDN博客

但是 单纯的线性非线性操作有着比较大的局限性

​ 一方面这种全连接网络参数量巨大,另一方面对于位置信息表现比较差。而今天的卷积神经网络非常重要,可以捕捉输入数据中的位置信息,这使得它在处理具有明显空间结构的数据时如图片表现优异。

1. 卷积基本操作

卷积操作可以将输入数据映射为输出数据,同时保留输入数据的空间结构信息。

假设我们有一个3x3的图像像素矩阵,如下所示:

1 2 3 
4 5 6 
7 8 9 

我们希望对这个图像进行卷积操作。为了实现这个操作,我们需要定义一个**卷积核(也称为过滤器)**来滑动在图像上,从而产生一个新的输出图像。

卷积核

1 0
0 1

卷积操作的基本思想是在输入图像上滑动卷积核,对每个位置进行卷积运算,并将结果存储到输出图像中。具体来说,每一次卷积操作的计算方式如下:

  1. 将卷积核的每个元素与输入图像中对应的元素相乘
  2. 将所得到的乘积相加,得到卷积核在当前位置的输出值
  3. 将卷积核向右或向下移动一个位置,重复上述步骤,直到卷积核覆盖完整个输入图像。

拿上面那个例子来说

  1. 对于输出图像中的第一个位置,卷积核与输入图像的左上角区域进行卷积运算,计算方式如下:
1*1 + 0*2 + 0*4 + 1*5 = 6 

因此输出图像中的第一个位置的值为6。
在这里插入图片描述

  1. 对于输出图像中的第二个位置,卷积核向右移动一个位置,与输入图像的右上角区域进行卷积运算,计算方式如下:
1*2 + 0*3 + 0*5 + 1*6= 8

因此输出图像中的第二个位置的值为6。

在这里插入图片描述

  1. 对于输出图像中的第三个位置,卷积核向右移动一个位置,与输入图像的左下角区域进行卷积运算,计算方式如下:
1*4 + 0*5 + 0*7 + 1*8 = 12 

因此输出图像中的第三个位置的值为12

在这里插入图片描述

  1. 对于输出图像中的第四个位置,卷积核向右移动一个位置,与输入图像的右下角区域进行卷积运算,计算方式如下:
1*5 + 0*6 + 0*8 + 1*9 = 14 

因此输出图像中的第四个位置的值为14。
在这里插入图片描述

上面举的例子中

卷积核大小 宽度和高度分别2,2

卷积核从左到右,从上到下遍历 将输入的图像(3*3)转换为特征图(2*2)

这里得到的这个矩阵叫做特征图,可以理解为卷积层对于图像自动提取的特征,各种任务都是建立在特征之上的

对于给定的任意宽高的卷积核($高k_h 宽k_w ) ,对给定宽高的图像( ),对给定宽高的图像( ),对给定宽高的图像(高n_h 宽n_w$)进行卷积操作,输出的形状是可以确定的 卷积核大小

( n h − k h + 1 ) × ( n w − k w + 1 ) (n_h-k_h+1)×(n_w-k_w+1) (nhkh+1)×(nwkw+1)

比如上面的例子中输出形状为

$(3-1+1)×(3-1+1) =2×2 $

2 现代卷积进阶武器操作

当下的卷积 会有很多辅助武器,让卷积的效果变得更好

2.1 边界 填充

我们知道经过卷积之后,输出形状有可能会变小

但有些时候我们希望输出特征图的形状维持不变,这时候就可以进行边界填充,填充后就可以维持不变

最常用的边界填充方法是零填充

对于给定的任意宽高的卷积核( 高 k h 宽 k w 高k_h 宽k_w khkw),对给定宽高的图像( 高 n h 宽 n w 高n_h 宽n_w nhnw)进行卷积操作,左右上下各填充p 则输出形状为

输出高 = ( n h − k h + 2 p ) + 1 输出高=(n_h-k_h+2p)+1 输出高=(nhkh+2p)+1

输出宽 = ( n w − k w + 2 p ) + 1 输出宽= (n_w-k_w+2p)+1 输出宽=(nwkw+2p)+1

比如特征图7*7

卷积核3*3

零填充 1

在这里插入图片描述

则代入输出形状代入公式

( n h − k h + 1 ) × ( n w − k w + 1 ) (n_h-k_h+1)×(n_w-k_w+1) (nhkh+1)×(nwkw+1)

(7-3+1+2×1) ×(7-3+1+2×1) =7×7

这也是为什么很多卷积核设计都是奇数,唯有奇数才能保证填充后前后形状不变

总结填充作用:保持输入输出的形状一致

2.2 跨步 步幅

但有些时候,我们需要降低输出特征图维度,可以指定的间隔进行卷积操作降低特征图维度,可以降低计算量。

另一方面,设置步幅可以控制特征提取的粒度。在卷积神经网络中,卷积核在输入图像上滑动时,会对输入图像的每个局部区域进行特征提取。而设置步幅可以控制卷积核在输入图像上移动的步长大小,从而控制特征提取的粒度。当步幅较小时,卷积核在输入图像上移动的步长较小,可以提取更为精细的特征信息;当步幅较大时,卷积核在输入图像上移动的步长较大,可以提取更为宏观的特征信息。

之前我们默认都是1步操作

对于给定的任意宽高的卷积核($高k_h 宽k_w ) ,对给定宽高的图像( ),对给定宽高的图像( ),对给定宽高的图像(高n_h 宽n_w$)进行卷积操作,左右上下各填充p 跨步S

输出高 = ( n h − k h + 2 p ) / S + 1 输出高=(n_h-k_h+2p)/S+1 输出高=(nhkh+2p)/S+1

输出宽 = ( n w − n h + 2 p ) / S + 1 输出宽= (n_w-n_h+2p)/S+1 输出宽=(nwnh+2p)/S+1

2.3 多输入输出通道

多输入通道

在第一节的讲解中,我们默认我们的输入输出都是平面的, 只考虑了宽高的变化

但实际上,真实中往往有多层,专业术语叫做多个通道

比如图片输入往往是3通道的R,G,B 这时候我们就需要构造一个和输入相同通道的卷积核(这个例子中是3)

我们需要把 这样一个多通道的卷积核对齐到图像的某个位置,计算对应元素加权求和再累加,一般还会加一个偏移量

虽然卷积核是多通道的,但在一个位置加权求和累加之和只能得到一个值,意味着只能得到一层的输出
在这里插入图片描述

图片借鉴北京邮电大学鲁鹏老师的课程

多输出通道

如果我们想要输出变成多个,那么我们就可以使用多个卷积核

在这里插入图片描述

使用多少个卷积核,就会得到多少组中间特征图

图示例子是6个

2.4 汇聚 池化

除了跨步可以降低特征图大小,池化也可以

对每一个特征图独立进行,降低特征相应图组中的每个特征相应图的宽度和高度

(1)减少后续卷积层的参数数量,控制过拟合

(2)降低计算资源耗费

池化也有卷积操作一样的填充,步幅,多输入输出通道的概念,输出形状通道数计算公式和卷积都一样

比如,特征图大小4*4

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

现在我们对这个输入特征图进行2×2的最大池化操作,步幅为2,即每个子区域的大小为2×2,卷积核从左上角开始移动,每次向右移动2个像素,最后得到输出特征图大小为2×2,如下所示:

两个基本操作

最大池化

取每个子区域中最大的特征值作为该区域的输出

本例中 输出

6 8
14 16

平均池化

取每个子区域中所有元素的平均值作为该区域的输出

本例中输出

3.5 5.5
11.5 13.5

3. 卷积层设计

每一层的卷积核的

卷积核个数

卷积核尺寸大小

卷积核移动的步幅

是否进行填充

什么时候汇聚池化

更多推荐

c#设计模式-结构型模式 之适配器模式

🚀介绍将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模式,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。适配器模式(Adapter)包含以下主要角色:目标(Target)接口

算力和LAXCUS分布式操作系统

有用户问LAXCUS分布式操作系统和算力的关系,今天借这个话题讲讲二者的关联。算力是指计算机系统在单位时间内所能完成的计算任务数量。随着计算机技术的发展,尤其是大数据、云计算、人工智能等新技术、新应用业务的出现,算力已经成为了衡量计算系统和产业业态的重要指标。在传统的集中式计算模式下,算力的提升主要依赖于硬件设备的升级

C语言每日一题(1):实现库函数strlen()

文章主题:库函数strlen()的实现所属专栏:C语言每日一题作者简介:每天不定时更新C语言的小白一枚,记录分享自己每日的所思所想。个人主页:[₽]的个人主页目录前言函数介绍编程起因设计思路1.整体逻辑2.参数类型3.防止空指针4.返回值代码展示结语前言函数介绍strlen()函数是我们在C语言编程中常用到库函数。在C

【LeetCode-中等题】 222. 完全二叉树的节点个数

文章目录题目方法一:把该题当做一个普通的二叉树来做(任何遍历都可以)方法二:利用完全二叉树的性质来做题目方法一:把该题当做一个普通的二叉树来做(任何遍历都可以)例如:二叉树的前序遍历(维护一个全局变量)递归无返回值classSolution{intnum=0;publicintcountNodes(TreeNodero

Docker快速入门到项目部署,MySQL部署+Nginx部署

《Docker》是微服务在企业落地的最后一块拼图。微服务项目由于拆分粒度细,服务部署环境复杂,部署实例很多,维护困难。而Docker则可以解决项目部署的各种环境问题,让开发、运维一体化,真正实现持续集成、持续部署。大大提高企业项目开发到部署的效率。同学们,在前两天我们学习了Linux操作系统的常见命令以及如何在Linu

数据结构之堆的结构与实现

目录一、堆的概念及结构1.1堆的概念1.2堆的性质1.3堆的结构二、堆的实现2.1堆向下调整算法(父亲与孩子做比较)2.2堆的向上调整算法(孩子与父亲做比较)2.3堆的创建(向下建堆)2.4向下建堆的时间复杂度2.5堆的插入2.6堆的删除2.7堆的完整代码实现三、堆的应用3.1堆排序3.2TOP-K问题一、堆的概念及结

如何提取视频中的音频转为mp3

如何提取视频中的音频转为mp3?在丰富多样的视频作品中,我们常常会遇到一些引人入胜的对话和有趣的音乐变奏。不少朋友可能曾经看过那种画面与其他作品声音巧妙搭配,给人带来无比愉悦和和谐感的趣味作品。然而,很多人虽然有着相似的创作灵感,却苦于不知道如何提取所需素材。这时候我们应该寻找方法,将视频中对我们有用的音频提取处理并保

【c语言】贪吃蛇

当我们不想学习新知识的时候,并且特别无聊,就会突然先看看别人怎么写游戏的,今天给大家分享的是贪吃蛇,所需要的知识有结构体,枚举,以及easy-x图形库的一些基本函数就完全够用了,本来我想插入游戏的音乐,但是没找到贪吃蛇的背景音乐,所以就没加,大家可以参考我之前的博文里面有如何加音乐的教程包含的头文件#include<s

大二毕设.3-网盘系统

目录技术选型:功能概括:基本演示:实现讲解:技术选型:前端:Vue3+ElementPlus后端:SpringBoot+Mybatis-Plus+MySQL+Redis+Caffeine+FastDFS/OSS+SpringCloudStream+RocketMQ+Zookeeper功能概括:用户模块用户注册接口幂等性

探索web3.0

先说从web1.0、web2.0、web3.0的进化之路。Web1.0,第一代互联网,静态互联网;Web1.0的核心为:平台创造、平台所有、平台控制、平台受益。Web2.0,第二代互联网,交互式互联网;Web2.0的核心为:用户创造、平台所有、平台控制、平台受益。Web3.0,第三代互联网,协议互联网;Web3.0的核

计算机专业毕业设计项目推荐06-工作室管理系统(Java+Vue+Mysql)

工作室管理系统(JavaSpring+Vue+Mysql)**介绍****系统总体开发情况-功能模块****各部分模块实现****最后想说的****联系方式**介绍本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计流程以及模式,在

热文推荐