【机器学习300问】96、怎么理解卷积神经网络CNN中的卷积操作?

        卷积操作是卷积神经网络(CNN)中的一种核心组件。要讲清楚卷积操作,我们只需要回答以下四个问题:什么是卷积核?卷积运算的规则是什么?padding是什么?stride是什么?

        下面让我以图像处理为例子,为大家依次回答上面这几个问题。

一、什么是卷积核?

        卷积核(Filter或Kernel)是一个小型的、可学习的权重矩阵,也常被称为特征检测器或过滤器。卷积核的尺寸(例如,3x3, 5x5等)是预先设定的,并且它的每个元素都有一个特定的数值。卷积核的数量通常对应于想要从输入数据中提取的特征种类数量。

【注】Filter一般是奇数,这样一来可以在计算p=\frac{f-1}{2}不出现小数情况,二来能保证卷积核有一个中心点。

二、卷积运算的规则是什么?

(1)卷积操作的规则 

        卷积运算是指在卷积层中,卷积核在输入数据(如图像矩阵)上滑动,执行元素级别的乘法和求和操作。具体过程是,将卷积核的每个元素与输入数据上对应的元素相乘,然后将所有乘积相加以得到输出特征图上的一个值。这一过程在整个输入数据上重复进行,每次滑动一定的步长(stride),直至遍历整个输入数据。

标准卷积,步长为1,无填充

(2)卷积操作的输出

        卷积操作的输出被称为特征映射,它表示了输入数据在特定滤波器下的响应强度。每个特征映射展示了输入数据中与该滤波器对应的特征的存在和分布情况。

        你仔细观察上面的动图,你会发现标准卷积操作有两个缺点

  • 输出图片的尺寸相比输入图片会变小。
  • 边缘像素参与卷积次数相比中间像素明显少很多,这意味这卷积操作忽略了边缘信息。 

(3)卷积操作中矩阵形状变化

        怎么计算一个n \times n矩阵与f \times f的卷积核进行卷积后的输出矩阵的形状呢?(在没有填充,步幅为1时)可以通过下面这个公式来进行计算:

[n \times n ] * [f \times f] = [(n-f+1) \times (n-f+1)]

三、填充和步幅对卷积操作的影响

(1)Padding填充

        Padding 是在输入数据(如图像)的边缘添加额外的像素层的过程。这些额外的像素通常被初始化为0,但也可以根据需要设置为其他值或进行镜像填充等。当填充一层的时候,我们写作p=1

5x5的输入矩阵和3x3的卷积核进行卷积运算,其中s=1,p=1

        Padding操作的目的就是为了解决标准卷积带来的两个问题,padding有以下的优势:

  1. 保持输出尺寸:通过在输入的边缘添加足够的填充,可以确保卷积操作后的输出特征图尺寸与输入尺寸相同或接近,这对于构建更深的网络结构特别有用,因为它允许网络在不连续缩小特征图尺寸的情况下进行多层卷积。

  2. 保留边界信息:没有Padding的情况下,卷积操作可能会快速丢失图像边缘的信息,因为边缘像素参与的卷积次数较少。适当添加Padding可以帮助保留这些信息,提高对边缘特征的学习能力。

  3. 实现特定的对称性:在某些情况下,特定的Padding策略(如“same”填充,确保输出尺寸与输入相同)可以保持数据的某种对称性或周期性特征。

(2)Stride步幅

        Stride 指的是卷积核在输入数据上滑动时的步长,即每次跳跃的像素数。

s=2的卷积操作

        stride是控制卷积层输出特征图尺寸的另一个重要因素,这样做的好处是:

  1. 减少计算量和尺寸:当Stride大于1时,卷积核在输入数据上跳过某些位置,这样可以减少计算量,同时减小输出特征图的尺寸,从而增加模型的计算效率,有时也用于降低特征图的空间分辨率。

  2. 增加感受野:更大的Stride意味着每个输出特征单元覆盖的输入区域更大,这可以增加网络的感受野,使其能够捕捉到更广泛的上下文信息,但同时也可能导致一些细节信息的损失。

  3. 控制模型复杂度:通过调整Stride,可以在计算资源限制和模型性能之间找到平衡,较大的Stride可以简化模型,而较小的Stride可以增加模型的表达能力。

(3)引入padding和stride后卷积操作中的矩阵形状如何变化

        当padding为p,stride为s时,一个n \times n矩阵与一个f \times f的卷积核之间进行卷积操作,得到的输出矩阵的形状大小是多少?计算方式如下:

[n \times n] * [f \times f] = [(\frac{n+2p-f}{s}+1) \times (\frac{n+2p-f}{s}+1)]

        如果上式的结果算出来不是整数的话,就用地板除法来处理。这样做可以理解为当卷积核过滤器超出边界时不进行该次卷积计算。

(4)两种常见的卷积操作策略

  • Valid卷积(无填充卷积):在Valid卷积中,不对输入数据进行任何填充(Padding)。由于没有额外的填充,输出特征图的尺寸相比输入数据会减小。此策略常用于减少数据维度、提取更高级别的特征或者在特征检测的最后阶段。
  • Same卷积(保持尺寸卷积):Same卷积的目标是在卷积操作后保持输出特征图的尺寸与输入数据相同,通过计算合适的Padding量(p=\frac{f-1}{2}),可以确保输出特征图的尺寸与输入相同(在步长为1的情况下)当希望在不改变数据空间尺寸的前提下提取特征,或者在模型的中间层维持特征图尺寸以便于后续处理时,Same卷积是优选策略。这对于保持空间信息和便于定位任务(如对象检测)尤为重要。

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

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

相关文章

27寸2K显示器 - HKC G27H2

HKC G27H2是一款面向电竞市场的高性能显示器,以其2K分辨率和180Hz的刷新率作为主要卖点,旨在为玩家提供流畅而清晰的视觉体验。配备HDR 400技术和95% DCI-P3色域覆盖,这款显示器还支持升降旋转支架,为用户提供了高度的人体工程学适…

阿尔杰姆·卢金采访

近年来,在中俄两国元首亲自擘画、战略引领下,两国新时代全面战略协作伙伴关系成熟坚韧、稳如泰山,树立了新型大国关系的新范式。中俄关系走出了一条大国战略互信、邻里友好的相处之道,给两国人民带来了实实在在的好处,…

Python爬虫:爬取B站视频(最新、能用且讲解详细)【01】

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️如遇文章付费,可先看…

Android Notes

maven 版本发布 1、小于 AGP7 使用 maven 插件 apply plugin: maven uploadArchives {repositories {mavenDeployer {pom.groupId GROUP_IDpom.artifactId ARTIFACT_IDpom.version VERSION//正式版本repository(url: RELEASE_URL) {authentication(userName: userName, p…

世界上首位AI程序员诞生,AI将成为人类的对手吗?

3月13日,世界上第一位AI程序员Devin诞生,不仅能自主学习新技术,自己改Bug,甚至还能训练和微调自己的AI模型,表现已然远超GPT-4等“顶流选手”。 AI的学习速度如此之快,人类的教育能否跟上“机器学习”的速…

SQLServer表变量

表变量是本地变量的一种特殊类型,它有助于临时存储数据; 要声明表变量,使用declare,而局部变量的名称必须以符号开头; TABLE关键字指定此变量是表变量,然后还要定义列名和数据类型; 下面定义一个表变量&#xff0c…

嵌入式全栈开发学习笔记---C语言笔试复习大全21(编程题25~30)

目录 25、实现字符串的排序。(输入hello world good,输出good hello world,其中字符串个数任意) 26、输入两个有序的字符串(从小到大),合并成一个有序的字符串。(输入cdhxyz fjln …

1076: 判断给定有向图是否存在回路

解法&#xff1a; 直观的方法用邻接矩阵dfs,这是错误的代码 #include<iostream> #include<vector> using namespace std; int arr[100][100]; int f 0; void dfs(vector<int>& a, int u) {a[u] 1;for (int i 0; i < a.size(); i) {if (arr[u][i]…

2024 一键批量下载微博内容/图片/视频/评论/转发数据,导出excel和pdf

以李健的微博为例&#xff0c;抓取2010-2024年所有的微博数据excel&#xff0c;包含微博链接&#xff0c;微博内容&#xff0c;发布时间&#xff0c;点赞数&#xff0c;转发数&#xff0c;评论数&#xff0c;话题等。 每个月的微博转评赞总数曲线&#xff0c;2015年是高峰。 微…

Centos7静态路由和动态路由

路由&#xff0c;即路由选择&#xff08;Routing&#xff09;&#xff0c;是指在计算机网络中选择数据传输路径的过程。路由器&#xff08;Router&#xff09;是执行路由选择功能的网络设备。路由的主要目的是在复杂的网络结构中&#xff0c;选择最佳路径将数据包从源节点传递到…

自回归模型(二):具有自回归误差的回归

让我们考虑一个问题&#xff0c;其中我们有一个y变量和多个x变量&#xff0c;它们都被测量为时间序列。举个例子&#xff0c;我们可以将y设定为高速公路上每月的事故数量&#xff0c;而x则表示每月在高速公路上的交通量&#xff0c;观测时间为连续的120个月。一个多元&#xff…

使用 MPI 做 3D 带状矩阵的转置

目的&#xff1a;整个大矩阵从 [Nx, Ny, Nz] 转到 [Nz, Nx, Ny] 每个进程的输入&#xff1a;大矩阵的 [Nx / total_proc_num, Ny, Nz] 的部分 每个进程的输出&#xff1a;大矩阵的 [Nz / total_proc_num, Nx, Ny] 的部分 一开始我大概有一个想法&#xff0c;假设两个进程的话…

HTTP 请求的完整过程

HTTP 请求的完整过程 当用户在浏览器输入网址回车之后&#xff0c;网络协议都做了哪些工作呢? 首先工作的是 浏览器应用程序&#xff0c;他要解析出 URL中的域名 根据域名获取对应的ip地址&#xff0c;首先从浏览器缓存中査看&#xff0c;如下可以査看浏览器中域名对应ip的解…

想当安卓开发工程师?学习路线分享!

安卓开发学习路线 在前几篇文章中,对安卓开发岗位的岗位要求做了一些科普,本节文章将介绍安卓开发岗位的学习路线。 目前,网络上有很多面经、算法题解、算法课等学习资料,如何合理利用这些资料成为技术求职者的一大困惑。笔者整理了一份安卓开发岗位学习路线供大家参考,…

两篇文章讲透数据结构之堆(一)!

目录 1.堆的概念 2.堆的实现方式 3.堆的功能 4.堆的声明 5.堆的实现 5.1堆的初始化 5.2堆的插入 5.2.1向上调整算法 5.2.2堆的插入 5.3堆的删除 5.3.1向下调整算法 5.3.2堆的删除 5.4获取堆顶元素 5.5获取堆的元素个数 5.6判断堆是否为空 5.7打印堆 5.8建堆 …

亚马逊自养号测评环境搭建技巧:打造防关联底层环境的关键步骤

今天我们要聊的是完全由人工操作的自养号方法&#xff0c;相信有过相关经验的朋友们都清楚&#xff0c;在实现自养号的过程中&#xff0c;所使用的 IP 和浏览器究竟有哪些选择&#xff0c;以及可能会遇到哪些问题。 首先&#xff0c;我们来看看市场上现有的 IP 类型以及可能出现…

[LDAP: error code 34 - invalid DN]

目前我的项目版本&#xff1a; Spring版本:5.3.15SpringBoot版本:2.6.3 完整错误 org.springframework.ldap.InvalidNameException: [LDAP: error code 34 - invalid DN]; nested exception is javax.naming.InvalidNameException: [LDAP: error code 34 - invalid DN]at org.s…

zabbix实现企业微信机器人推送

0、前置条件 已经申请到企业微信机器人webhook&#xff0c;参考链接https://developer.work.weixin.qq.com/document/path/91770 1、创建报警媒介类型 在报警媒介类型右上角创建媒体类型 新增Token参数&#xff0c;将申请获得的Token填入 在脚本处填入脚本&#xff1a; 脚…

amtlib.dll打不开怎么办?一键修复丢失amtlib.dll方法

电脑丢失amtlib.dll文件是什么情况&#xff1f;出现amtlib.dll打不开怎么办&#xff1f;这样的情况有什么解决方法呢&#xff1f;今天就和大家聊聊amtlib.dll文件同时教大家一键修复丢失amtlib.dll方法&#xff1f;一起来看看amtlib.dll文件丢失会有哪些方法修复&#xff1f; a…

从旅游广告联想到《桃花源记》

近日收到《长江头条网》等知名网络自媒体相邀,促我写点儿旅游题材的文案。虽说笔者游历过许多名山大川的绝美风景区,但那是在70岁之前的事儿了。如今年逾78岁,纵使有少许自有资本能够支持出游,可体力难撑,岂不是花钱买罪受吗?而且,写没有亲身经历过的事挺难,即便发表出…