pytorch中nn.Conv2d详解及参数设置原则
文章目录
- 基础参数
- 1. `in_channels` (输入通道数)
- 2. `out_channels` (输出通道数)
- 3. `kernel_size` (卷积核大小)
- 4. `stride` (步幅)
- 5. `padding` (填充)
- 6. `dilation` (膨胀)
- 7. `groups` (分组卷积)
- 8. `bias` (偏置)
- 如何设置参数?
- 1. **`in_channels` 和 `out_channels`(输入通道数和输出通道数)**
- 2. **`kernel_size`(卷积核大小)**
- 3. **`stride`(步幅)**
- 4. **`padding`(填充)**
- 5. **`dilation`(膨胀卷积)**
- 6. **`groups`(分组卷积)**
- 7. **`bias`(偏置)**
- 总结
基础参数
1. in_channels
(输入通道数)
- 定义:表示输入图像的通道数。例如,RGB图像的输入通道数为 3(红色、绿色和蓝色),灰度图像的输入通道数为 1。
- 作用:指定输入数据的深度。卷积操作会针对每个通道应用滤波器。
实例:
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
在这个例子中,in_channels=3
表示输入是一个 RGB 图像(每个图像有 3 个通道),out_channels=64
表示卷积层会生成 64 个特征图。
2. out_channels
(输出通道数)
- 定义:表示卷积层的输出通道数,也就是卷积操作产生的特征图的数量。每个通道是由卷积滤波器生成的。
- 作用:决定卷积层生成多少个特征图。
out_channels
值越大,生成的特征图数量越多,网络的表达能力可能越强,但计算量也会增加。
实例:
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
在这个例子中,out_channels=64
表示卷积操作后生成 64 个特征图。
3. kernel_size
(卷积核大小)
- 定义:卷积核(滤波器)的大小,通常是一个正方形(例如 3x3 或 5x5)。它决定了每次卷积操作涉及的像素区域大小。
- 作用:卷积核大小直接影响感受野(即每个卷积操作关注的区域)。卷积核越大,每个特征图表示的区域越广,但计算量也越大。
实例:
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
在这个例子中,kernel_size=3
表示卷积核的大小是 3x3。每次卷积操作会选择 3x3 的区域进行处理。
4. stride
(步幅)
- 定义:步幅控制卷积操作时卷积核滑动的步长。步幅通常是正整数,表示卷积核每次移动的像素数量。
- 作用:步幅影响输出特征图的尺寸。步幅越大,输出特征图的尺寸越小(因为卷积核每次移动得更远)。通常,步幅为 1 时,卷积核每次移动一个像素,步幅为 2 时,卷积核每次移动两个像素。
实例:
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=2)
在这个例子中,stride=2
表示卷积核每次滑动 2 个像素,因此输出特征图的宽度和高度都将减半。
5. padding
(填充)
- 定义:填充是指在输入图像的边缘添加额外的像素。它的作用是确保卷积操作可以处理边缘的像素,同时可以控制输出特征图的尺寸。
- 作用:填充可以保持输入和输出的尺寸相同(当步幅为 1 时)。常见的填充方式包括:
padding=1
:表示在每个边上添加 1 个像素的填充。padding='same'
:常见的用法,在很多框架中使用,表示填充的大小使得输入和输出的尺寸相同。
实例:
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1)
在这个例子中,padding=1
表示在输入图像的每个边上添加 1 个像素的填充,这样可以保持输出特征图的尺寸与输入图像相同(当步幅为 1 时)。
6. dilation
(膨胀)
- 定义:膨胀卷积是对卷积核应用间隔的技术,卷积核之间的元素不再是连续的,而是通过空洞来分隔。
- 作用:膨胀卷积的作用是扩展感受野,能够捕捉更大的上下文信息,而不会增加参数量或计算量。
实例:
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, dilation=2)
在这个例子中,dilation=2
表示卷积核的元素之间间隔为 2,使得感受野扩大,但卷积核的实际大小保持不变。
7. groups
(分组卷积)
- 定义:分组卷积通过将输入通道分成若干组来实现卷积计算。每一组的卷积核只会对属于该组的输入通道进行卷积操作。
- 作用:分组卷积可以减少计算量,并且在某些任务中(如深度可分离卷积)有助于提升网络性能。
实例:
conv1 = nn.Conv2d(in_channels=3, out_channels=6, kernel_size=3, groups=3)
在这个例子中,groups=3
表示输入的 3 个通道会被分成 3 组,每组一个卷积核进行卷积操作。这样,卷积层的计算量减少。
8. bias
(偏置)
- 定义:偏置是卷积操作中的一个可学习参数。它会被加到每个卷积结果上,用于调整输出。
- 作用:在卷积操作之后加上偏置,可以帮助模型更好地拟合训练数据。通常情况下,卷积层会默认有偏置,但可以通过设置
bias=False
来禁用。
实例:
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, bias=True)
在这个例子中,bias=True
表示卷积层会包含偏置。
如何设置参数?
1. in_channels
和 out_channels
(输入通道数和输出通道数)
in_channels
由输入数据决定。例如,RGB 图像的in_channels
为 3,灰度图像的in_channels
为 1。通常在图像输入层,in_channels
是已知的。out_channels
是一个非常重要的超参数,它影响网络的表达能力和计算量。增加out_channels
可以增加网络的表达能力,但同时也会增加计算量和内存消耗。输出通道数的选择通常依赖于以下几个因素:- 任务复杂度:对于复杂的任务(如图像分类、目标检测),较大的
out_channels
值可以帮助网络学习更丰富的特征。 - 网络深度:较深的网络可以逐步增加
out_channels
,从而提高特征的抽象能力。 - 计算资源:较大的
out_channels
会增加计算量,因此需要考虑计算资源和推理速度。
- 任务复杂度:对于复杂的任务(如图像分类、目标检测),较大的
实例:
对于图像分类任务,通常在第一层使用较小的 out_channels
(如 64 或 128),然后在后续层逐步增加(如 256、512 等)。
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
conv2 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3)
2. kernel_size
(卷积核大小)
- 卷积核大小(如 3x3 或 5x5)决定了每次卷积操作所查看的图像区域。
- 3x3 卷积核 是最常用的选择,它在很多现代网络架构中表现出色,原因是:
- 计算效率:相对于较大的卷积核(如 5x5、7x7),3x3 卷积核可以通过堆叠多个层来扩展感受野,从而节省计算量。例如,两个 3x3 的卷积核可以实现与 5x5 卷积核相同的感受野,但计算量较小。
- 深度卷积结构:3x3 卷积核有助于建立深度网络结构,通过多个层级来学习复杂的特征。
- 大卷积核(如 5x5 或 7x7) 通常用于初始层,尤其是当输入图像非常大时,可以一次性捕获更多的空间信息。
实例:
- 如果网络较浅,可以使用较大的卷积核来捕捉较大的特征。
- 在深度网络中,可以使用 3x3 卷积核,堆叠多个卷积层来逐步提取更高阶的特征。
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3) # 常见的3x3卷积
conv2 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=5) # 较大的卷积核
3. stride
(步幅)
- 步幅决定了卷积核滑动的速度,影响输出特征图的尺寸。步幅越大,输出特征图的尺寸越小。
- 在下采样(如池化)时,通常会选择步幅为 2,以减少特征图的尺寸并增加感受野。
- 对于大部分应用,步幅通常设置为 1,特别是在中间层,用于精细提取特征;而在初始层或下采样层,步幅可以设置为 2。
实例:
- 如果希望减少输出特征图的尺寸,可以设置步幅为 2,例如在下采样阶段。
- 如果需要更精细的特征提取,步幅通常设置为 1。
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, stride=2) # 下采样
conv2 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, stride=1) # 特征提取
4. padding
(填充)
- 填充可以在输入图像的边缘添加额外的像素,避免卷积操作导致的尺寸缩小。合理设置填充有助于保持特征图的尺寸,尤其是在步幅为 1 时。
same
填充:当步幅为 1 时,使用填充可以保证输入和输出的尺寸相同。常见的做法是根据卷积核的大小自动计算填充量,以保持尺寸不变。- 在较深的网络中,通常使用填充保持特征图的空间尺寸,避免在多个卷积层中丢失过多的空间信息。
实例:
- 如果想要输入和输出具有相同的空间尺寸,可以使用
padding=1
对于 3x3 卷积核。 - 如果希望特征图缩小,可以减少填充量,或者不使用填充。
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, padding=1) # 输出尺寸不变
conv2 = nn.Conv2d(in_channels=64, out_channels=128, kernel_size=3, padding=0) # 输出尺寸缩小
5. dilation
(膨胀卷积)
- 膨胀卷积通过增加卷积核元素之间的间隔来扩大感受野,通常用于捕捉长距离依赖。
- 在任务中,如果需要捕捉较大的上下文信息(例如语义分割、目标检测),可以使用膨胀卷积来增加感受野而不增加计算量。
实例:
- 在语义分割中,膨胀卷积常用于提取更大范围的上下文信息。
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, dilation=2) # 膨胀卷积
6. groups
(分组卷积)
- 分组卷积通过将输入分成多个组进行卷积,可以有效减少计算量和内存消耗,常见于 深度可分离卷积(depthwise separable convolutions)。
- 分组卷积有助于减少参数数量,同时还可以增加网络的计算效率,特别是在移动端或资源受限的设备上。
实例:
- 在移动端模型(如 MobileNet)中,通常使用分组卷积来减少计算量。
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, groups=3) # 分组卷积
7. bias
(偏置)
- 在大多数情况下,卷积层的偏置是启用的(
bias=True
),这有助于网络学习更灵活的偏移量。仅在特殊情况下才禁用偏置,如批量归一化层后面。
实例:
- 默认情况下,
bias=True
是常见的设置。
conv1 = nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3, bias=True)
总结
设计卷积神经网络时,合理选择这些参数需要结合实际需求:
- 对于 简单任务,可以选择较小的输出通道数和标准的 3x3 卷积核。
- 对于 复杂任务,可以使用较大的输出通道数和堆叠多个卷积层。
- 使用 步幅 和 填充 控制特征图的尺寸变化,保持适当的空间信息。
- 在 资源受限的环境 中,可以选择分组卷积和膨胀卷积来减少计算量。
相关文章:

pytorch中nn.Conv2d详解及参数设置原则
文章目录 基础参数1. in_channels (输入通道数)2. out_channels (输出通道数)3. kernel_size (卷积核大小)4. stride (步幅)5. padding (填充)6. dilation (膨胀)7. groups (分组卷积)8. bias (偏置) 如何设置参数?1. **in_channels 和 out_channels(输入…...

T-SQL语言的正则表达式
T-SQL语言的正则表达式 在现代数据库管理系统中,SQL(结构化查询语言)被广泛用于数据的操作与管理。对数据的查询、插入、更新和删除几乎是每一个数据库管理系统中的基本功能。T-SQL(Transact-SQL)是微软对SQL的扩展&a…...

UDP_TCP
目录 1. 回顾端口号2. UDP协议2.1 理解报头2.2 UDP的特点2.3 UDP的缓冲区及注意事项 3. TCP协议3.1 报头3.2 流量控制2.3 数据发送模式3.4 捎带应答3.5 URG && 紧急指针3.6 PSH3.7 RES 1. 回顾端口号 在 TCP/IP 协议中,用 “源IP”, “源端口号”…...

Python 中常见的数据结构之二推导式
Python 中常见的数据结构之二推导式 使用推异式列表推导式字典推导式集合推导式 使用推异式 推导式是一种从已存在的序列中快速构建列表(list)、集合(set) 和 字典(dictionary)方式。Python 支持 3 种不同类型的推导式: 列表推导式;字典推导式…...

STM32 拓展 低功耗案例3:待机模式 (hal)
配置PA0的两种方式: 第一种 第二种 复制寄存器代码然后对其进行修改 mian.c /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body…...

【开源社区openEuler实践】探索 Yocto-Meta-OpenEuler:嵌入式开发的强大基石
title: 探索 Yocto-Meta-OpenEuler:嵌入式开发的强大基石 date: ‘2024-11-19’ category: blog tags: Yocto-Meta-OpenEuler嵌入式系统开源项目定制化开发 sig: EmbeddedTech archives: ‘2024-12’ author:way_back summary: Yocto-Meta-OpenEuler 为嵌入式系统开…...

C++ hashtable
文章目录 1. 基本概念2. 哈希函数3. 哈希冲突及解决方法开放定址法链地址法再哈希法建立公共溢出区4. 哈希表的操作实现5. 内存管理及优化 时间复杂度理想情况(无哈希冲突或冲突极少)一般情况(考虑哈希冲突及解决方法)综合来看 以…...

JS (node) 的 ACM 模式 + debug方法 (01背包为例)
文章目录 JS 的 ACM 模式输入处理 JS dubug (01背包为例)动态输入在本地通过 Node.js 运行和调试 硬编码 Hard CodingVS Code JS 的 ACM 模式 在 JavaScript 中,ACM 模式一般通过 Node.js 的 readline 模块实现。 输入处理 使用 readline 模块监听输入。 将每行输…...

vue设计与实现-框架设计
权衡的艺术 命令式和声明式 视图层框架通常分为命令式和声明式,各有优缺。jquery是一种命令式框架。命令式框架关注过程,而声明式框架关注结果。对于vue来说,过程被vue封装了,所以vue内部是命令式的,但vue暴露给用户…...

Stable Diffusion和Midjourney有什么区别?
Stable Diffusion 和 Midjourney 主要有以下区别: 目录 费用与可访问性 设备要求 安装与使用 学习成本 图像生成效果 可控性与定制性 私密性 费用与可访问性 Stable Diffusion:开源免费,任何人都可以免费下载并自行部署使用…...

即插即用,无痛增强模型生成美感!字节跳动提出VMix:细粒度美学控制,光影、色彩全搞定
文章链接:https://arxiv.org/pdf/2412.20800 代码地址:https://github.com/fenfenfenfan/VMix 项目地址:https://vmix-diffusion.github.io/VMix/ 亮点直击 分析并探索现有模型在光影、色彩等细粒度美学维度上生成图像的差异,提出…...

面向对象分析和设计OOA/D,UML,GRASP
目录 什么是分析和设计? 什么是面向对象的分析和设计? 迭代开发 UML 用例图 交互图 基于职责驱动设计 GRASP 常见设计原则 什么是分析和设计? 分析,强调是对问题和需求的调查研究,不是解决方案。例如&#x…...

【每日学点鸿蒙知识】广告ID、NFC手机充值、CSS支持语法、PC与模拟器交互、SO热更新等
1、HamonyOS 样机获取成功返回Oaid为00000000-0000-0000-0000-000000000000? 请求授权时需要触发动态授权弹窗,看一下是不是没有触发授权弹窗。 可以参考以下代码以及文档: // ets import identifier from ohos.identifier.oaid; import hilog from oh…...

30分钟学会HTML
HTML 基本语法 HTML(HyperText Markup Language)是构成网页内容的基础。它使用一系列的标签来描述网页的结构,包括文本、图片、链接等元素。浏览器会解析这些标签并渲染成我们看到的网页。 在线体验一下 CodePen (在线 HTML 编辑器)。 千万不…...

服务器信息整理:用途、操作系统安装日期、设备序列化、IP、MAC地址、BIOS时间、系统
文章目录 引言I BIOS时间Windows查看BIOS版本安装日期linux查看BIOS时间II 操作系统安装日期LinuxWindowsIII MAC 地址IV 设备序列号Linux 查看主板信息知识扩展Linux常用命令引言 信息内容:重点信息:用途、操作系统安装日期、设备序列化、IP、MAC地址、BIOS时间、系统 Linux…...

Golang设计模式目录
go语言实现设计模式 1 文章目录: 1.1 创建型模式 1.Golang设计模式之工厂模式2.Golang设计模式之抽象工厂模式3.Golang设计模式之单例模式4.Golang设计模式之建造者模式5.Golang设计模式之原型模式 1.2 结构型模式 6.Golang设计模式之适配器模式7.Golang设计模式之桥…...

选择IT驻场外包公司,要找有哪些资质的公司
在当今数字化快速发展的时代,IT驻场外包服务成为众多企业优化运营、提升竞争力的关键选择。无论是初创企业寻求技术起步支持,还是大型企业为降低成本、专注核心业务而将部分 IT 职能外包,IT 外包公司都扮演着至关重要的角色。然而,…...

Java List 集合详解:基础用法、常见实现类与高频面试题解析
正文 在 Java 集合框架中,List 是一个非常重要的接口,广泛用于存储有序的元素集合。本文将带你深入了解 List 接口的基本用法、常见实现类及其扩展,同时通过实际代码示例帮助你快速掌握这些知识。 👉点击获取2024Java学习资料 1…...

Arduino UNO 驱动1.8 TFT屏幕显示中文
背景 最近入手了一块1.8寸的tft屏幕,通过学习文档,已经掌握了接线,显示英文、数字、矩形区域、划线、画点等操作, 但是想显示中文的时候操作比较复杂。 问题 1、arduino uno 驱动这款屏幕目前使的是自带的<TFT.h> 库操作…...

Flink operator实现自动扩缩容
官网文档位置: 1.Autoscaler | Apache Flink Kubernetes Operator 2.Configuration | Apache Flink Kubernetes Operator 1.部署K8S集群 可参照我之前的文章k8s集群搭建 2.Helm安装Flink-Operator helm repo add flink-operator-repo https://downloads.apach…...

分布式系统架构6:链路追踪
这是小卷对分布式系统架构学习的第6篇文章,关于链路追踪,之前写过traceId的相关内容:https://juejin.cn/post/7135611432808218661,不过之前写的太浅了,且不成系统,只是简单的理解,今天来捋一下…...

vite-plugin-imagemin安装问题
vite-plugin-imagemin 是一款图片资源压缩插件,能够在打包的时候显著的降低图片资源占用。不过,在安装过程中我们遇到了如下的问题。 对于上面的问题,有以下几种常见的解决方案: 1,使用 yarn 在 package.json 内配置(推荐) 打开 package.json 配置文件,然后添加如下脚本…...

Git revert回滚
回退中间的某次提交(此操作在预生产分支上比较常见),建议此方式使用命令进行操作(做好注释,方便后续上线可以找到这个操作) Git操作: 命令:revert -n 版本号 1:git re…...

永磁同步电机预测模型控制(MPC)
永磁同步电机预测模型控制(MPC) 文章目录 前言1、模型预测控制1.1 连续控制集模型预测控制(CCS-MPC)1.2 有限控制集模型预测控制(FCS-MPC)1.3 模型预测控制的优缺点 2、永磁同步电机模型预测控制2.1 预测模型2.2 价值…...

【JAVA】switch ... case ... 的用法
语法结构: switch(表达式){ case 值1: 表达式和值1匹配时执行的语句 break; case 值2: 表达式和值2匹配时执行的语句 break; …...

基于STM32的热带鱼缸控制系统的设计
文章目录 一、热带鱼缸控制系统1.题目要求2.思路3.电路仿真3.1 未仿真3.2 开始仿真,显示屏显示水温、浑浊度、光照强度等值3.3 当水温低于阈值,开启加热并声光报警3.4 当浑浊度高于阈值,开启自动换水并声光报警3.5 当光照低于阈值,…...

Vue项目整合与优化
前几篇文章,我们讲述了 Vue 项目构建的整体流程,从无到有的实现了单页和多页应用的功能配置,但在实现的过程中不乏一些可以整合的功能点及可行性的优化方案,就像大楼造完需要进行最后的项目验收改进一样,有待我们进一步…...

WinForm开发-自定义组件-1. 工具栏: UcompToolStrip
这里写自定义目录标题 1. 工具栏: UcompToolStrip1.1 展示效果1.2 代码UcompToolStrip.csUcompToolStrip.Designer.cs 1. 工具栏: UcompToolStrip 自定义一些Winform组件 1.1 展示效果 1)使用效果 2)控件事件 1.2 代码 设计 编码 UcompToolStrip.…...

法律专业legal case的留学论文写作技巧分析(1)
对于法律专业的留学生而言,案例的分析是写作的重要方面。无论留学的国家是英、美、澳洲还是加拿大,它们都属于case law 的法律体系。一个非常显著的特点便是通过对案例进行分析和提炼,从中总结提炼出principle和rules。case analysis的留学论…...

2025编程技术前沿:探索最新的开发工具与趋势
随着技术的飞速发展,编程领域每天都在演化,新的技术、框架和工具层出不穷。本文将聚焦2025年最具潜力和吸引力的编程技术与工具,从前沿语言到最受欢迎的开发框架,带您一起探索软件开发领域的最新趋势。 一、编程语言的新生代之星…...