当前位置: 首页 > article >正文

Pytorch之torch.nn.Conv2d详解

卷积层是卷积神经网络CNN的核心组件而torch.nn.Conv2d作为 PyTorch 中实现二维卷积的核心类广泛应用于图像分类、目标检测、语义分割等计算机视觉任务。本文将从基础概念、参数详解、使用示例到核心原理全方位拆解torch.nn.Conv2d帮助新手快速掌握其用法和底层逻辑。一、Conv2d 核心作用torch.nn.Conv2d用于对二维输入如彩色图像、灰度图像执行卷积操作其核心目的是通过可学习的卷积核过滤器提取输入数据的局部特征如边缘、纹理、形状。例如对一张3×224×224的 RGB 图像通道数 × 高度 × 宽度Conv2d 会用多个卷积核在图像上滑动计算局部区域的加权和输出新的特征图。二、Conv2d 参数详解torch.nn.Conv2d的完整初始化参数如下按重要性排序torch.nn.Conv2d(in_channels:int,# 输入数据的通道数out_channels:int,# 输出特征图的通道数卷积核数量kernel_size:Union[int,Tuple[int,int]],# 卷积核尺寸stride:Union[int,Tuple[int,int]]1,# 卷积步长padding:Union[int,Tuple[int,int],str]0,# 填充方式/数量dilation:Union[int,Tuple[int,int]]1,# 空洞卷积的膨胀率groups:int1,# 分组卷积的组数bias:boolTrue,# 是否添加偏置项padding_mode:strzeros# 填充模式默认零填充)参数注解如下参数名是否必填含义与作用通俗理解in_channels是输入数据的通道数比如 RGB 图片的通道数是 3灰度图是 1这个参数告诉卷积层 “输入有多少个通道需要处理”out_channels是输出数据的通道数卷积核的数量每一个卷积核对应输出一个通道比如设置为 64就会输出 64 个通道的特征图kernel_size是卷积核的尺寸整数或元组比如3表示 3×3 的卷积核(3,5)表示 3 行 5 列的卷积核卷积核是做卷积计算的 “过滤器”stride否卷积核滑动的步长整数或元组默认值1步长为 1 表示每次滑 1 个像素步长为 2 表示每次滑 2 个像素步长越大输出特征图越小padding否输入数据四周填充的像素数整数 / 元组 / 字符串默认值0可以避免卷积后特征图尺寸缩小paddingsame’会自动填充让输出尺寸和输入一致dilation否卷积核元素之间的间距膨胀率默认值1膨胀率为 2 时3×3 卷积核会变成 5×5 的有效范围像素间隔 1 个用于扩大感受野groups否分组卷积的组数默认值1控制输入和输出通道的连接方式groups1普通卷积所有输入连所有输出 groupsin_channels深度卷积每个输入通道对应一组卷积核bias否是否添加偏置项默认值 True 卷积计算后加一个可学习的常数默认 Truepadding_mode否填充模式默认为zeros填充 0还有’reflect’反射填充、‘replicate’复制填充等三、输出尺寸计算Conv2d 输出特征图的尺寸是新手最易混淆的点核心公式如下仅考虑高 / 宽方向通道数为out_channels假设输入尺寸为H×W高度 × 宽度卷积核尺寸Kh×Kw步长Sh×SwpaddingPh×Pw膨胀率Dh×Dw则输出尺寸H_out×W_out为示例计算输入H224, W224, in_channels3Conv2d 参数kernel_size3, stride2, padding1, dilation1计算输出尺寸为112×112通道数为out_channels如 64。四、实战使用示例这里多啰嗦一下方便下面代码对照查看。在深度学习中神经网络的核心数据载体是张量Tensor理解张量形状是使用卷积层的基础。例如一个形状为 (1, 3, 640, 640) 的张量其维度含义为批次batch1、通道数channel3、高度height640、宽度width640。1.卷积形状测试Conv2d 输出尺寸与参数计算卷积层是深度学习中处理图像类数据的核心模块nn.Conv2d的参数步长、填充、卷积核大小直接决定输出张量的形状而通道数则决定了卷积层的参数总量。以下代码通过实例验证卷积层的输出尺寸和参数数量计算逻辑importtorchimporttorch.nnasnn# 核心参数说明 # 输入张量形状[batch_size, in_channels, height, width]# - batch_size: 批量大小这里设为1代表单张图片# - in_channels: 输入通道数RGB图像为3灰度图为1# - height/width: 特征图的高/宽这里设为5×5# 定义输入 input_tensortorch.randn(1,3,5,5)# 随机生成符合形状的输入张量# 定义卷积层 # 关键参数说明# - in_channels3必须与输入张量的通道数一致# - out_channels64输出通道数可理解为使用64个卷积核提取特征# - kernel_size3卷积核大小3×3# - stride1步长卷积核每次滑动1个像素# - padding1填充在特征图边缘填充1圈0保证输入输出尺寸不变convnn.Conv2d(in_channels3,out_channels64,kernel_size3,stride1,padding1)# 执行卷积操作 output_tensorconv(input_tensor)# 输出尺寸验证 print(f输入尺寸:{input_tensor.shape})# 输出torch.Size([1, 3, 5, 5])print(f输出尺寸:{output_tensor.shape})# 输出torch.Size([1, 64, 5, 5])# 尺寸不变原因填充padding1抵消了卷积核(kernel_size3)带来的尺寸缩小步长stride1无额外缩放# 参数数量计算 # 卷积核参数数量公式in_channels × out_channels × kernel_size × kernel_size# 计算过程3输入通道× 64输出通道× 3核高× 3核宽 1728print(f卷积核参数数量:{conv.weight.numel()})# 输出1728# 偏置参数数量每个输出通道对应1个偏置因此数量out_channels64print(f偏置参数数量:{conv.bias.numel()})# 输出64# 卷积层总参数数量1728 64 1792print(f卷积层总参数数量:{conv.weight.numel()conv.bias.numel()})# 输出1792# 补充输出尺寸通用计算公式 # 对于nn.Conv2d输出高/宽的通用公式# H_out floor((H_in 2×padding - kernel_size) / stride) 1# W_out floor((W_in 2×padding - kernel_size) / stride) 1# 代入本例H_out (5 2×1 - 3)/1 1 5与实际输出一致这里的步长(stride)、填充(padding)都为1时是下面一个通道的运算过程这里的weight即代表模型训练时更新的参数。2. 卷积值运算测试单通道卷积计算原理上述代码验证了 “形状”而卷积的核心是 “数值运算”。以单通道、无填充、步长 1 的简化场景为例直观理解卷积的计算过假设输入单通道特征图为 3×3 矩阵卷积核为 3×3 矩阵步长 1、填充 0importtorchimporttorch.nnasnn# 简化版单通道卷积数值计算# 定义单通道输入3×3single_inputtorch.tensor([[1,2,3],[4,5,6],[7,8,9]],dtypetorch.float32).unsqueeze(0).unsqueeze(0)# 形状[1, 1, 3, 3]# 定义3×3卷积核单输入通道、单输出通道single_convnn.Conv2d(in_channels1,out_channels1,kernel_size3,stride1,padding0,biasFalse)# 手动设置卷积核参数方便计算single_conv.weight.datatorch.tensor([[[[1,0,-1],[1,0,-1],[1,0,-1]]]],dtypetorch.float32)# 执行卷积single_outputsingle_conv(single_input)# 打印结果print(\n单通道卷积输入:\n,single_input.squeeze().numpy())print(卷积核:\n,single_conv.weight.data.squeeze().numpy())print(卷积输出:\n,single_output.detach().squeeze().numpy())# 输出[-6.]# 计算过程验证manual_calc1*12*03*(-1)4*15*06*(-1)7*18*09*(-1)print(f手动计算结果:{manual_calc})# 输出-6这里的卷积运算其实它被称为互相关运算,比如说输入为4*4卷积核为2则运算可以表示为五、核心原理补充1. 卷积计算的本质torch.nn.Conv2d的底层计算是互相关运算与数学上的卷积仅差卷积核翻转效果等价对于输入的每个局部区域与卷积核逐元素相乘后求和再加上偏置若有得到输出特征图的一个像素值。2. 参数量计算Conv2d 层的参数量仅与卷积核相关公式为参数量out_channels * (in_channels / groups * Kh * Kw ) (bias ? out_channels : 0)示例in_channels3, out_channels64, kernel_size3, groups1, biasTrue参数量 64 × (3×3×3) 64 64×27 64 1792。3. 与 F.conv2d 的区别torch.nn.Conv2d是层类继承自nn.Module包含可学习的参数weight/bias可通过model.parameters()获取适合构建网络torch.nn.functional.conv2d是函数需手动传入卷积核和偏置无可学习参数适合自定义卷积逻辑。总结torch.nn.Conv2d的核心参数是in_channels、out_channels、kernel_size通过stride、padding控制输出尺寸dilation、groups实现特殊卷积输出尺寸可通过公式精准计算paddingsame可快速实现输入输出尺寸一致实际使用中Conv2d 常与 BatchNorm2d、激活函数组合且接 BN 时建议关闭偏置以减少冗余参数。

相关文章:

Pytorch之torch.nn.Conv2d详解

卷积层是卷积神经网络(CNN)的核心组件,而torch.nn.Conv2d作为 PyTorch 中实现二维卷积的核心类,广泛应用于图像分类、目标检测、语义分割等计算机视觉任务。本文将从基础概念、参数详解、使用示例到核心原理,全方位拆解…...

ROS2 -03-工作空间与功能包

文章目录ROS2 工作空间与功能包完全指南一、ROS2 工作空间(Workspace)1. 什么是工作空间?2. 工作空间的目录结构3. 工作空间的类型:Overlay 与 Underlay4. 创建工作空间5. 编译工作空间二、ROS2 功能包(Package&#x…...

MTP管理培训

MTP管理培训 这个是纯管理课程,技术管理还有不同 该套课程以“理”为核心,从“可实操性”入手,阐述了不因人是否天生具有管理特质,也能做好管理。 MTP(Management Training Program/Plan),原义为…...

OBS怎么调美颜?OBS怎么打开美颜功能?

OBS Studio 实现美颜主要有内置滤镜、第三方插件、摄像头硬件美颜三种方式,今天主要介绍第三方插件的用法: 一、基础准备 确保已安装 OBS Studio 最新版(推荐 29.1.3 及以上,稳定性更佳)。 摄像头已连接并正常识别&a…...

计算机毕业设计springboot中药材仓储管理系统的分析与实现 基于SpringBoot框架的中药饮片智能库存与质量追溯平台 中医药材冷链物流与数字化仓储运营管理系统

计算机毕业设计springboot中药材仓储管理系统的分析与实现0j9h07d8(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着中医药的全球化推广和国内市场需求的增长,中药…...

LeetCode 11:盛最多水的容器(C语言实现)

题目描述给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。请你找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。注意: 你不能倾斜容器。示…...

Unreal Engine5 笔记(持续更新)

C Debug及UE_Log debugPrint GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, "Begin play"); 含参print int a 100; GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, FString::Printf(TEXT("%d"), a));绘制调制函数 #include &qu…...

基于航空影像的道路异常状态识别 无人机道路阻断巡检 道路减速带识别 无人机道路施工巡检 无人机斑马线监测 道路场景计算机视觉数据集Yolo第10552期

道路场景计算机视觉数据集 README数据集核心信息概览(多数为背景)项目内容类别数量4类类别中文名称阻断道路、减速带、施工中、斑马线图像数量800数据集格式YOLO格式核心应用价值基于航空影像的道路异常状态实例分割,支撑智能交通管理与道路运维决策 往期热门主题 主…...

计算机毕业设计springboot社区便民服务平台 基于SpringBoot框架的智慧社区综合服务运营平台 城市社区数字化生活与多元服务集成管理系统

计算机毕业设计springboot社区便民服务平台9pqty086(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。在快速城市化的进程中,社区作为城市的基本单元,其服务…...

基于STC8H8K64U的光学仪器协同采集平台设计

1. 项目概述本项目面向高校及科研院所实验室场景,构建一套基于STC8H8K64U单片机的多光学仪器协同控制与远程数据采集平台。其核心目标并非替代专用仪器控制器,而是作为轻量级、可扩展的“仪器粘合层”,解决实验室中多品牌、多协议光学设备&am…...

ROS2功能包构建与文件结构解析:从colcon编译到项目部署

1. 从零开始:理解ROS2功能包与工作空间 如果你刚开始接触ROS2,可能会被一堆新名词搞得有点懵:功能包、工作空间、colcon、ament……别担心,这很正常。我刚开始用ROS2的时候,也花了不少时间才把这些概念理清楚。今天&am…...

Nacos 3.0新特性解析:为什么控制台端口独立为8080?

Nacos 3.0架构演进:控制台端口独立背后的深度安全与运维考量 如果你是一位长期使用Nacos的开发者,从1.x版本一路升级过来,可能会对端口号的变化感到一丝困惑。最初,访问http://localhost:8848/nacos就能搞定一切;到了2…...

新媒体内容创作:使用DeOldify为历史题材短视频生成彩色素材

新媒体内容创作:使用DeOldify为历史题材短视频生成彩色素材 最近刷短视频,是不是经常看到一些老电影片段、历史纪录片被“上色”了?黑白画面一下子变得色彩鲜活,人物和场景都生动了起来,点赞和评论量往往也特别高。作…...

WuliArt Qwen-Image Turbo避坑指南:解决黑图、显存不足等常见问题

WuliArt Qwen-Image Turbo避坑指南:解决黑图、显存不足等常见问题 1. 为什么你的第一张图总是“黑屏”或“爆显存”? 你满怀期待地部署好WuliArt Qwen-Image Turbo,输入精心构思的Prompt,点击生成,然后……屏幕右侧一…...

C语言文件操作实战:读写二进制图片数据调用DeOldify服务

C语言文件操作实战:读写二进制图片数据调用DeOldify服务 你是不是也好奇,那些老照片上色服务背后是怎么运作的?作为一个C/C开发者,可能更想知道,如何用我们最熟悉的语言,从底层去实现图片的读取、发送和保…...

AI论文投稿指南:如何选择最适合你的CCF-A/B/C类期刊(附审稿周期对比)

AI论文投稿实战指南:从期刊选择到录用提速的深度策略 每次打开投稿系统,看着长长的期刊列表,你是不是也感到一丝迷茫?投顶刊怕周期太长耽误毕业,投普通期刊又担心影响力不够。在人工智能这个快速迭代的领域&#xff0c…...

ESP32开发新篇——VSCode插件助力ESP-IDF环境一键配置与实战

1. 为什么你需要VSCode插件开发ESP32? 第一次接触ESP32开发的朋友,往往会被官方推荐的ESP-IDF开发环境吓到。传统的安装方式需要手动配置Python、Git、CMake、Ninja等一堆工具链,光是环境变量配置就能劝退不少新手。我至今记得三年前第一次搭…...

Phi-4-reasoning-vision-15B企业级部署:supervisor托管+健康检查全链路

Phi-4-reasoning-vision-15B企业级部署:supervisor托管健康检查全链路 1. 引言:为什么需要企业级部署? 想象一下这个场景:你费了九牛二虎之力,终于把最新的视觉大模型部署到了服务器上。它运行得不错,能看…...

PaddleOCR v4实战:如何用SVTRNet微调训练提升中文标点符号识别准确率?

PaddleOCR v4实战:如何用SVTRNet微调训练提升中文标点符号识别准确率? 在实际处理海量中文文档时,无论是教育机构的历年档案、政府部门的公文流转,还是出版行业的古籍数字化,我们总会遇到一个看似微小却影响深远的难题…...

Dify 2026插件生态已剧变,你还在用v1.2旧范式?3类即将失效的API调用方式及2026兼容迁移路径

第一章:Dify 2026插件生态演进全景图Dify 2026标志着插件架构从松散集成迈向深度协同的质变节点。其核心突破在于引入「双向契约式插件协议」(BCP),使插件与平台在启动、上下文注入、状态同步及卸载全生命周期中具备可验证的行为契…...

嵌入式AIGC艺术装置:墨水屏+ESP32+云端生成的低功耗文化策展系统

1. 项目概述1.1 设计定位与人文内核“AIGC物品展示框——百工谱”并非传统意义上的嵌入式功能验证平台,而是一个以硬件为载体、以算法为笔触、以历史为纸张的微型数字策展系统。其核心目标是将抽象的文化维度(时代、地域、职业)转化为具象的视…...

OFA图像英文描述效果展示:生成描述长度控制在12–18词区间的稳定性验证

OFA图像英文描述效果展示:生成描述长度控制在12–18词区间的稳定性验证 1. 项目概述 今天我们来测试一个特别实用的AI工具——OFA图像英文描述系统。这个系统能够自动为图片生成简洁准确的英文描述,就像给图片配字幕一样简单。 想象一下这样的场景&am…...

GEE实战:构建2000-2025年MODIS与TerraClimate多变量生态气候时序数据集

1. 为什么需要构建生态气候时序数据集 做生态或气候研究的朋友应该都深有体会,最头疼的就是找数据。以前我们要分析某个区域的植被变化,可能需要从不同平台下载MODIS数据;研究气候因子又得去另一个网站找降水、温度资料。光是数据收集和格式转…...

从TLP传输瓶颈到性能调优:实战解析MaxPayloadSize的配置与影响

1. 为什么MaxPayloadSize会成为性能瓶颈? 第一次遇到PCIe设备性能问题时,我盯着监控图表上那条始终无法突破的带宽曲线百思不得其解。当时使用的NVMe SSD实测速度只有标称值的一半,经过三天排查才发现是MaxPayloadSize(MPS&#x…...

软件测试全攻略:从入门到精通的20种核心方法详解

1. 软件测试基础入门:从零开始理解测试本质 刚接触软件测试时,很多人会疑惑:为什么开发完程序还要专门测试?我刚开始做测试时也犯过这样的错误,直到某次上线后用户投诉才明白测试的重要性。简单来说,软件测…...

Windows服务器上Veritas NetBackup 10.1主服务器安装全流程(含用户权限配置避坑指南)

Windows服务器上Veritas NetBackup 10.1主服务器安装全流程(含用户权限配置避坑指南) 对于负责企业数据安全的IT管理员而言,在Windows Server上部署一套可靠的企业级备份系统,是保障业务连续性的基石。Veritas NetBackup作为业界公…...

Hi3519DV500实战:从零构建YOLOv8智能视频分析全链路

1. Hi3519DV500开发板与YOLOv8实战入门 第一次拿到Hi3519DV500开发板时,我和大多数嵌入式开发者一样既兴奋又忐忑。这款芯片在智能视觉领域有着"小钢炮"的称号,但真正要让它跑起YOLOv8这样的现代检测算法,还是需要趟过不少坑。下面…...

PDF表格提取准确率从61%跃升至98.7%,Dify 2026解析器重构逻辑全披露,仅限首批内测用户解密

第一章:PDF表格提取准确率跃升至98.7%的技术里程碑这一里程碑标志着PDF文档结构化解析能力的重大突破——在真实工业场景测试集(含扫描件、多栏布局、跨页合并单元格、手写批注干扰等复杂样本)上,端到端表格识别与重建准确率达到9…...

AI辅助开发实战:如何用chatbot模板提升对话系统开发效率

AI辅助开发实战:如何用chatbot模板提升对话系统开发效率 开发一个功能完善的对话系统,听起来很酷,但真正动手时,很多开发者都会陷入“从零造轮子”的泥潭。今天,我想和大家聊聊,如何借助成熟的 chatbot模板…...

SecGPT-14B作品集:自动生成OWASP Web安全测试用例(含请求/响应/验证步骤)

SecGPT-14B作品集:自动生成OWASP Web安全测试用例(含请求/响应/验证步骤) 1. 网络安全测试新利器 在Web应用安全测试领域,SecGPT-14B带来了革命性的效率提升。这个基于Qwen2ForCausalLM架构的大模型,专门针对网络安全…...