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

torch.nn.Conv2d介绍——Pytorch中的二维卷积层

  torch.nn.Conv2d是torch.nn模块中的二维卷积层类,用于构建神经网络中的二维卷积层。

1、基本语法

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)

将 2D 卷积应用于由多个输入平面组成的输入信号。
在最简单的情况下,具有 input size ( N , C i n , H , W ) (N,C_{in},H,W) (N,Cin,H,W) 和 output ( N , C o u t , H o u t , W o u t ) (N,C_{out},H_{out},W_{out}) (N,Cout,Hout,Wout)的层的输出值可以精确描述为:
o u t ( N i , C o u t j ) = b i a s ( C o u t j ) + ∑ k = 0 C i n − 1 w e i g h t ( C o u t j , k ) ∗ i n p u t ( N i , k ) out(N_i,C_{out_{j}})=bias(C_{out_{j}})+\sum_{k=0}^{C_{in}-1}weight(C_{out_{j}},k)*input(N_{i},k) out(Ni,Coutj)=bias(Coutj)+k=0Cin1weight(Coutj,k)input(Ni,k)

其中 ⋆ ⋆ 是有效的 2D 互相关运算符, N N N是批量大小, C C C 表示通道数, H H H是输入平面的高度(以像素为单位), W W W是宽度(以像素为单位)。
该模块支持 TensorFloat32。

  • stride 控制互相关的步幅,单个数字或元组。
  • padding 控制应用于输入的填充量。它可以是一个字符串 {‘valid’, ‘same’} 或一个 int / 一个 int 元组,给出在两侧应用的隐式填充量。
  • dilation 控制内核点之间的间距;也称为 à trous 算法。这更难描述,但这个链接很好地可视化了 dilation 它的作用。
  • groups 控制输入和输出之间的连接。 in_channels ,并且 out_channels 两者都必须能被 groups 整除。例如
    在 groups=1 时,所有输入都与所有输出进行卷积。
    在 groups=2 时,该作相当于并排有两个 conv 层,每个 conv 层看到一半的 input channels,产生一半的 output channels,然后两个 级联。
  • 在 groups= in_channels 处,每个输入通道都与自己的一组滤波器(大小 o u t _ c h a n n e l s i n _ c h a n n e l s ​ \frac{out\_channels}{in\_channels}​ in_channelsout_channels)进行卷积。

参数 kernel_size , stride dilation , padding , 可以是:

  • 一个整数 – 在这种情况下,height 和 width 维度使用相同的值
  • 两个整数的元组 – 在这种情况下,第一个 int 用于高度维度,第二个 int 用于宽度维度

2、Parameters 参数

  • in_channels (int) – 输入图像中的通道数
  • out_channels (int) – 卷积产生的通道数
  • kernel_size (int or tuple) – 卷积内核的大小
  • stride (int or tuple, optional) - 卷积的步幅。默认值:1
  • padding (int, tuple or str, optional) – 添加到输入的所有四个边的填充。默认值:0
  • dilation (int 或 tuple,可选) – 内核元素之间的间距。默认值:1
  • groups (int, optional) – 从输入通道到输出通道的阻塞连接数。默认值:1
  • bias (bool, optional) – 如果 ,则 True 向输出添加可学习的偏差。默认值: True
  • padding_mode (str,可选) – ‘zeros’ 、 ‘reflect’ ‘replicate’ 或 ‘circular’ .默认值: ‘zeros’

3、Shape: 形状

  • 输入: ( N , C i n , H i n , W i n ) (N,C_{in},H_{in},W_{in}) (N,Cin,Hin,Win) ( C i n , H i n , W i n ) (C_{in},H_{in},W_{in}) (Cin,Hin,Win)
  • 输出: ( N , C o u t , H o u t , W o u t ) (N,C_{out},H_{out},W_{out}) (N,Cout,Hout,Wout) ( C o u t , H o u t , W o u t ) (C_{out},H_{out},W_{out}) (Cout,Hout,Wout)
    其中:
    H o u t = [ H i n + 2 × p a d d i n g [ 0 ] − d i l a t i o n [ 0 ] × ( k e r n e l s i z e [ 0 ] − 1 ) − 1 s t r i d e [ 0 ] + 1 ] H_{out}=[\frac{H_{in}+2\times padding[0]-dilation[0]\times (kernel_size[0]-1)-1}{stride[0]}+1] Hout=[stride[0]Hin+2×padding[0]dilation[0]×(kernelsize[0]1)1+1]
    W o u t = [ W i n + 2 × p a d d i n g [ 1 ] − d i l a t i o n [ 1 ] × ( k e r n e k s i z e [ 1 ] − 1 ) − 1 s t r i d e [ 1 ] + 1 ] W_{out}=[\frac{W_{in}+2 \times padding[1]-dilation[1] \times (kernek_size[1]-1)-1}{stride[1]}+1] Wout=[stride[1]Win+2×padding[1]dilation[1]×(kerneksize[1]1)1+1]

4、Variables 变量:

  • weight (Tensor) :形状为 ( o u t _ c h a n n e l s , i n _ c h a n n e l s g r o u p s , k e r n e l _ s i z e [ 0 ] , k e r n e _ s i z e [ 1 ] ) (out\_channels,\frac{in\_channels}{groups} , kernel\_size[0],kerne\_size[1]) (out_channels,groupsin_channels,kernel_size[0],kerne_size[1])的模型的可学习权重。这些权重的值是从 u ( ( − k , k ) u((-\sqrt{k},\sqrt{k}) u((k ,k )中抽样的, k = g r o u p s C i n ∗ ∏ i = 0 1 k e r n e l _ s i z e [ i ] k=\frac{groups}{C_{in}* {\textstyle \prod_{i=0}^{1}}kernel\_size[i] } k=Cini=01kernel_size[i]groups
  • bias (Tensor) :形状 ( o u t _ c h a n n e l s ) (out\_channels) (out_channels)的模型的可学习偏差。如果 bias 是True 则这些权重的值从 u ( ( − k , k ) u((-\sqrt{k},\sqrt{k}) u((k ,k )中抽样, k = g r o u p s C i n ∗ ∏ i = 0 1 k e r n e l _ s i z e [ i ] k=\frac{groups}{C_{in}* {\textstyle \prod_{i=0}^{1}}kernel\_size[i] } k=Cini=01kernel_size[i]groups

5、例子

# With square kernels and equal stride
m = nn.Conv2d(16, 33, 3, stride=2)
# non-square kernels and unequal stride and with padding
m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
# non-square kernels and unequal stride and with padding and dilation
m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2), dilation=(3, 1))
input = torch.randn(20, 16, 50, 100)
output = m(input)

相关文章:

torch.nn.Conv2d介绍——Pytorch中的二维卷积层

torch.nn.Conv2d是torch.nn模块中的二维卷积层类,用于构建神经网络中的二维卷积层。 1、基本语法 torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride1, padding0, dilation1, groups1, biasTrue, padding_modezeros, deviceNone, dtypeNone)将 2D …...

阻止上传可执行程序

点击工具中的文件服务器资源管理器 、然后点击文件屏蔽管理中的文件屏蔽,然后导入目标文件选择要限制的属性即可...

DirectX修复工具免费版下载安装教程(附安装包)

文章目录 前言一、DirectX修复工具免费版介绍二、DirectX修复工具免费版安装教程1. 下载安装包2. 解压文件3. 以管理员身份运行4. 开始检测与修复5. 查看修复详情 前言 本教程主要介绍的是DirectX修复工具免费版下载安装教程,帮您轻松解决 DirectX 相关问题。 一、…...

UE5学习笔记 FPS游戏制作33 游戏保存

文章目录 核心思想创建数据对象创建UIUI参数和方法打开UI存档文件的位置可以保存的数据类型 核心思想 UE自己有保存游戏的功能,核心节点,类似于json操作,需要一个数据类的对象来进行保存和读取 创建存档 加载存档 保存存档 创建数据对象…...

Git与SVN的区别以及各自的优势

前言:版本控制的诞生与意义 在软件开发的漫长历程中,代码的迭代与协作始终是核心挑战。从早期的“文件夹版本”到现代的分布式系统,版本控制系统(VCS)的进化史,本质上是人类对协作效率与数据安全的不懈追求…...

PipeWire 音频设计与实现分析三——日志子系统

日志子系统 PipeWire 的日志子系统的设计分为多个层次。PipeWire 用 struct spa_log 对象描述日志组件,用 struct spa_log_methods 对象描述日志组件打印各层级日志的多个方法。PipeWire 为日志子系统添加了 topic 机制,不同文件中的日志按功能以不同的…...

TypeScript vs. JavaScript:技术对比与核心差异解析

引言 在 Web 前端开发领域,JavaScript(JS)长期占据主导地位,但随着项目复杂度的提升,开发者逐渐面临维护性差、协作困难等问题。TypeScript(TS)作为 JavaScript 的超集,通过静态类型…...

关于 @Autowired 和 @Value 使用 private 字段的警告问题分析与解决方案

问题背景 在使用 Spring 框架进行开发时,我们经常会使用 Autowired 和 Value 注解来进行依赖注入和属性值注入。然而,当我们将这些注解应用于 private 字段时,IDE(如 IntelliJ IDEA)可能会显示警告信息,提…...

MySQL 进阶 面经级

会用数据库,找大厂工作是远远不够的。 本人2025美团暑期AI面试好几个MySQL场景问题不会答,已脏面评。遂在此整理学习! 文章目录 分片分区分区语法范围分区 (RANGE Partitioning)列表分区(LIST Partitionin…...

《C奥林匹斯宝典:基础篇 - 重载函数》

一、重载函数 (一)函数模板重载 详细解析:函数模板提供了一种通用的函数定义方式,可针对不同类型进行实例化。当存在函数模板与普通函数、其他函数模板同名时,就构成了函数模板重载。编译器在编译阶段,依…...

【408--考研复习笔记】计算机网络----知识点速览

目录 一、计算机网络体系结构 1.计算机网络的定义与功能: 2.网络体系结构相关概念: 3.OSI 七层模型与 TCP/IP 模型: 4.通信方式与交换技术: 电路交换 报文交换 分组交换 5.端到端通信和点到点通信: 6.计算机…...

TiDB 可观测性解读(二)丨算子执行信息性能诊断案例分享

导读 可观测性已经成为分布式系统成功运行的关键组成部分。如何借助多样、全面的数据,让架构师更简单、高效地定位问题、分析问题、解决问题,已经成为业内的一个技术焦点。本系列文章将深入解读 TiDB 的关键参数,帮助大家更好地观测系统的状…...

15:00开始面试,15:08就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...

蓝桥杯准备(前缀和差分)

import java.util.Scanner; public class qianzhuihe {public static void main(String[] args) {int N,M;Scanner scnew Scanner(System.in);Nsc.nextInt();Msc.nextInt();int []treesnew int[N1];//设为N1的意义,防止越界int []prefixSumnew int[N1];for(int i1;i…...

试用thymeleaf引入vue-element-admin(一)

作为后端程序员,一直使用springbootbootstarp做管理系统,对前端不是太了解,现在感觉bootstarp的admin ui一直不得劲,想切换成前端使用较多的ui,费了老鼻子劲。 我的目的不是前后端分离,而是一个人全栈&…...

Minimind 训练一个自己专属语言模型

发现了一个宝藏项目, 宣传是完全从0开始,仅用3块钱成本 2小时!即可训练出仅为25.8M的超小语言模型MiniMind,最小版本体积是 GPT-3 的 17000,做到最普通的个人GPU也可快速训练 https://github.com/jingyaogong/minimi…...

C++11QT复习 (七)

智能指针雏形 **Day7-1 智能指针雏形:独占语义与共享语义****1. 独占语义与共享语义****1.1 Circle 类:示例类** **2. 拷贝构造:独占语义(Unique Ownership)****2.1 代码解析** **3. 拷贝构造:共享语义&…...

STM32八股【5】----- TIM定时器

1. TIM定时器分类 STM32 的定时器主要分为以下几类: 高级定时器(Advanced TIM,TIM1/TIM8) 具备 PWM 生成、死区控制、互补输出等高级功能,适用于电机控制和功率转换应用。通用定时器(General-purpose TIM…...

单元测试之Arrange-Act-Assert(简称AAA)

Arrange-Act-Assert(简称AAA)是一种编写单元测试的标准模式,具有清晰的结构和明确的步骤,有助于提高测试的可读性、可维护性和可扩展性。以下是对每个步骤的详细说明: 1. Arrange(准备阶段) 在…...

厘米级定位赋能智造升级:品铂科技UWB技术驱动工厂全流程自动化与效能跃升”

在智能制造中的核心价值体现在‌高精度定位、流程优化、安全管理‌等多个维度,具体应用如下: 一、‌核心技术与定位能力‌ ‌厘米级高精度定位‌ UWB技术通过‌纳秒级窄脉冲信号‌(带宽超500MHz)实现高时间分辨率,结合…...

C++刷题(四):vector

📝前言说明: 本专栏主要记录本人的基础算法学习以及刷题记录,使用语言为C。 每道题我会给出LeetCode上的题号(如果有题号),题目,以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的…...

学习记录706@微信小程序+springboot项目 真机测试 WebSocket错误: {errMsg: Invalid HTTP status.}连接不上

我微信小程序springboot项目 真机测试 websocket 总是报错 WebSocket错误: {errMsg: Invalid HTTP status.},总是连接不上,但是开发者工具测试就没有问题。 最后解决方案是编码token,之前是没有编码直接拼接的,原因不详。 consol…...

【虚拟仪器技术】Labview虚拟仪器技术应用教程习题参考答案[13页]

目录 第1章 第2章 第3章 第4章 第5章 第6章 第7章 第8章 第1章 1. 简述虚拟仪器概念。 参考答案:虚拟仪器是借助于强大的计算机软件和硬件环境的支持,建立虚拟的测试仪器面板,完成仪器的控制、数…...

【工作梳理】怎么把f12里面的东西导入到postman

postman左上角导入 结果:...

UE5学习笔记 FPS游戏制作34 触发器切换关卡

文章目录 搭建关卡制作触发器传送门显示加载界面 搭建关卡 首先搭建两个关卡,每个关卡里至少要有一个角色 制作触发器传送门 1 新建一个蓝图,父类为actor,命名为portal(传送门) 2 为portal添加一个staticMesh&#…...

智谱大模型(ChatGLM3)PyCharm的调试指南

前言 最近在看一本《ChatGLM3大模型本地化部署、应用开发和微调》,本文就是讨论ChatGLM3在本地的初步布设。(模型文件来自魔塔社区) 1、建立Pycharm工程 采用的Python版本为3.11 2、安装对应的包 2.1、安装modelscope包 pip install model…...

新专栏预告 《AI大模型应知应会短平快系列100篇》 - 整体规划设计

做个预告,为系统化梳理AI大模型的发展脉络,并为普及AI素养做一点贡献,特给自己制定了一个小目标,3个月内完成交稿。 AI大模型应知应会短平快系列100篇 - 整体规划设计 一、基础知识模块(20篇) 1.1 大模型…...

SwanLab Slack通知插件:让AI训练状态同步更及时

在AI模型训练的过程中,开发者常常面临一个难题:如何及时跟踪训练状态?无论是实验超参数的调整、关键指标的变化,还是意外中断的告警,传统的监控方式往往依赖手动刷新日志或反复检查终端,这不仅效率低下&…...

收集 的 JavaScript 数组方法表格

这个表格可以作为数组方法的快速参考指南 方法名对应版本功能原数组是否改变返回值类型concat()ES5-合并数组,并返回合并之后的新数组nArrayjoin()ES5-使用分隔符,将数组转为字符串并返回nStringpop()ES5-删除最后一位,并返回删除的数据yAny…...

操作系统高频(六)linux内核

操作系统高频(六)linux内核 1.内核态,用户态的区别⭐⭐⭐ 内核态和用户态的区别主要在于权限和安全性。 权限:内核态拥有最高的权限,可以访问和执行所有的系统指令和资源,而用户态的权限相对较低&#x…...