关于PyTorch中一维卷积Conv1d的理解

news2025/1/11 10:56:07

首先明确一点,PyTorch中的一维卷积是从左往右做的,不是从上往下。

然后明确第二点,一维卷积和二维卷积最大的区别在于,一维卷积的卷积方向只有一个维度,一维卷积的卷积核不像二维卷积核一样可以左右和上下两个维度移动,在PyTorch中,一维卷积核仅仅可以在左右这个单一的一维方向上移动,移动的步长由stride参数确定,而卷积核是否会移动出待卷积的数据由padding参数确定,这里的“移动出”意味着卷积核的某些部分可能会移动到待卷积数据之外,而仍然有某些卷积核数据和待卷积数据相重合,具体例子请见后续说明。

torch.nn.Conv1d(
    in_channels: int,
    out_channels: int,
    kernel_size: _size_1_t,
    stride: _size_1_t = 1,
    padding: _size_1_t | str = 0,
    dilation: _size_1_t = 1,
    groups: int = 1,
    bias: bool = True,
    padding_mode: str = 'zeros',
    device: Any | None = None,
    dtype: Any | None = None
)

上述是PyTorch中一维卷积函数的声明,其中的参数很重要,这里主要只用到前面几个。

考虑一个一维卷积的使用:

nn.Conv1d(
    in_channels=32,
    out_channels=128,
    kernel_size=20,
    stride=1,
    padding='same',
),

我有一个batch的数据:

N \times 32 \times 500

其中 N 为我的 batch size。

那么首先第一点,从整体上来看,我的数据可以理解为,对于 32×500的矩阵,我有N个,那么一共会有out_channels个卷积核,其中每个卷积核都会在32×500的矩阵上做卷积,每个卷积核要对N个矩阵都做一次,那么最终会得到的数据应该是 N×out_channels×A,其中A不知道,要看具体的卷积情况而言。

这里很重要的一点是,对于一个卷积核,它的size是a×b,但在函数中的kernel_size我们只给了一个单值,事实上,一个一维卷积核的size会是in_channels×kernel_size,没错,对于batch size为N的批量数据中的每一个数据而言,对于其中每一个32×500的矩阵而言,其对应的卷积核的高度和矩阵的高度是一致的,也就是说,对于N×32×500的数据而言,它的一维卷积参数的in_channels应该为32。

然后卷积核会在横向的方向上移动,接下来就很好理解了,如果padding为valid,那么最终得到的数据维度应该为N×out_channels×int(\frac{500-kernel\_size}{stride})+1,如果padding为same,那么意味着卷积核可以移动到待卷积的矩阵之外,最终得到的数据维度应该还为N×out_channels×500。

下面以N×3×10的批量数据为例,下面的表格显示的是其中一个矩阵3×10的情况,然后conv1d的声明为

nn.Conv1d(
    in_channels=3,
    out_channels=2,
    kernel_size=4,
    stride=1,
    padding='same',
),

 那么首先我们会得到一个3×4的卷积核,其中卷积核的高度3(in_channels)和矩阵的高度3一致(如果矩阵的高度为4,或者别的什么高度,那么in_channels也要为4,高度这里是定死的,卷积核只能够向右边一个维度移动,不能够上下移动,这也是一维卷积的含义),然后卷积核的宽度为4,卷积方向一直朝右走。

 后面的就省略了,一直到卷积核移动到最后的部分。

然后到此时注意看padding参数的值,如果是'valid',那么卷积核就不能再走了,如果是'same'那么还可以往右继续移动,移动出去的部分没有覆盖到数据,这些没有数据的地方由矩阵最外面那一圈的数据替代,需要注意的是,当出现下面这种情况的时候

如果padding是same,仍然是ok的,最右边多出来的数据全部由矩阵(待卷积数据)最右边一列的数据替代。因此,如果Conv1d的kernel_size是999999,而padding是same,那么哪怕给定的批数据的shape为N×in_channels×1都没有问题,多出来的数据全部由边界来替代。

same的另一个含义是最终得到的维度和原数据维度相同,如果是valid卷积,那么宽度为W的数据卷积出来的最终宽度应为int(\frac{W-kernel\_size}{stride})+1,而如果是same,那么卷积出来的数据的宽度仍然为W。

上述内容讲述了一个一维卷积核在一个批数据中单个矩阵中的操作,仍然沿用上面例子中的各个参数,padding为same,对于一个批数据N×3×10中的一个3×10的矩阵进行一维卷积而言,得到一个一维的数据1×10,而out_channels=2,这意味着会有两个卷积核同时对每个矩阵进行卷积,最后仍然会得到一个批量数据,批量维度N是不变的,最后得到的数据维度为N×2(out_channels)×10(原矩阵的宽度,因为padding是same)。

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

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

相关文章

Mysql-主从复制与读写分离

Mysql 主从复制、读写分离 一、前言:二、主从复制原理1.MySQL的复制类型2. MySQL主从复制的工作过程;3.MySQL主从复制延迟4. MySQL 有几种同步方式:5.Mysql应用场景 三、主从复制实验1.主从服务器时间同步1.1 master服务器配置1.2 两台SLAVE服务器配置 2…

CRM系统化整合从N-1做减法实践 | 京东物流技术团队

1 背景 京销易系统已经接入大网、KA以及云仓三个条线商机,每个条线商机规则差异比较大,当前现状是独立实现三套系统分别做支撑。 2 目标 2022年下半年CRM目标是完成9个新条线业务接入,完成销售过程线上化,实现销售规则统一。 …

【Git】—— 分⽀的基本操作

目录 (一)理解分⽀ (二)创建分⽀ (三)切换分⽀ (四)合并分⽀ (五)删除分⽀ 总结 (一)理解分⽀ 本章开始介绍 Git 的杀⼿级功能之…

结构型设计模式:装饰器模式

设计模式专栏目录 创建型设计模式-单例模式/工厂模式/抽象工厂 行为型设计模式:模板设计模式/观察者设计模式/策略设计模式 结构型设计模式:装饰器模式 C#反射机制实现开闭原则的简单工厂模式 目录 设计模式专栏目录设计模式分类设计模式的设计原则装饰…

Java体系总览

一、基础篇 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺序一致性、volatile、锁、final 垃圾回收 内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定 JVM参数及调优 Java对象模型 …

windows环境下docker数据迁移到其他盘

docker安装在C盘,使用一段时间后,C盘爆满。因此想把C盘中的数据迁移到其他盘,以释放C盘空间。分为以下步骤: 1、启动docker软件,打开PowerShell并切换到Docker Compose配置文件的目录。 Docker Compose配置文件的目录…

zabbix监控docker容器

1、安装zabbix-agent2插件 需要被监控的主机安装zabbix-agent2插件,请参考另一篇博客进行安装。原有的zabbix-agent插件不支持docker容器的监控的。agent的功能,agent2也都有 http://t.csdn.cn/dccqw 并在被监控的主机中开放10050端口 firewall-cmd --z…

【雕爷学编程】Arduino动手做(171)---micro:bit 开发板2

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这…

用于事实核查的知识图谱比较推理:问题定义和算法 7.24

用于事实核查的知识图谱比较推理:问题定义和算法 摘要介绍问题定义知识段(Knowledge Segment KS)共性不一致性集体共性集体不一致性成对比较推理集体比较推理 知识片段提取Predictate-Predictate Similarity特定边的知识段特定子图知识段 比较…

[巅峰极客2023]wp复现

文章目录 [巅峰极客2023]复现miscwelcomefoundmesong学生物 webunserializesql [巅峰极客2023]复现 misc welcome base64解码 foundme find.DMP文件 使用flag查找工具找到关键字: flag.avif 放入010中看到这个hint,找到好几个avif: 将他…

Shedskin 使用

Shedskin是一个编译器工具,可以将Python代码编译为C语言。先说结论吧,这玩意现在就只是个玩具,因为使用ShedSkin编译的程序不能自由使用Python标准库,目前只支持大约17个常用模块: bisect collections ConfigParser c…

4.python设计模式【建造者模式】

内容: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式与抽象工厂模式相似,也用来创建复杂对象。主要区分是建造者模式着重一步步构造复杂对象,而抽象工厂模式着重于多个系列的产品对象。角色&#xf…

嵌入式做单片机的门槛

我个人认为并不高,如果你非要有个量化的标准,那我觉得初中文凭都能学会并且能以此为生的程度。 文凭嘛,就是一张纸,并代表不了什么。 前几年,我接了一个帮研究生写毕业论文的单子,果然没让我失望&#xf…

实现Android屏幕分享和视频聊天(附源码)

在一些有人际互动的手机APP中,增加语音视频聊天功能是一个常见的需求。而现在,更进一步,在某些场景下,我们需要能将自己的手机屏幕分享给他人,或者是观看他人的手机屏幕。那么,这些常见的功能是如何实现的了…

reset master

1 reset master 执行 reset master; 后 变化1 :位点被重置 变化2 binlog日志被清空 原来的binlog被删除 从 mysql-bin.000001 开始记录。

【ribbon】Ribbon的负载均衡和扩展功能

Ribbon的核心接口 参考:org.springframework.cloud.netflix.ribbon.RibbonClientConfiguration IClientConfig:Ribbon的客户端配置,默认采用DefaultClientConfigImpl实现。IRule:Ribbon的负载均衡策略,默认采用ZoneA…

【GPT4结对编程】word文档导出功能GPT4来实现

需求背景 最近产品增加了一个导出word文档的需求,之前有导出过pdf格式、excel格式、csv格式,但还没导出过word文档。 开源框架调研 我们的后端服务主要是用golang,因此首先想到的是golang相关的开源工具,找到2个。 unioffice …

【网络安全】蜜罐部署实战DecoyMini攻击诱捕

蜜罐部署实战&DecoyMini攻击诱捕 前言一、蜜罐1. 概念2. 蜜罐溯源常见方式3. 蜜罐分类 二、蜜罐项目实战1. 配置DecoyMini1.1 命令行窗口运行1.2 修改配置信息 2. 登录DecoyMini3. 克隆网站3.1 增加仿真网站3.2 增加诱捕器3.3 查看端口监听3.4 克隆成功(蜜罐&am…

Qt : day1

1.聊天界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {qDebug() << this->size(); //获取当前页面尺寸this->setFixedSize(500, 600); //设置固定尺寸this->setWindowTitle("聊天框"); //设置窗口…

解决Cannot resolve plugin org.apache.maven.plugins:xxxxxxxx

解决Cannot resolve plugin org.apache.maven.plugins:xxxxxxxx 方法一、检查配置设置 下图中三个方框圈出来的地方设置为自己的下载的maven地址&#xff0c;配置文件地址&#xff0c;仓库地址。刷新maven。 我个人试过没用&#xff0c;不过网上有的朋友用这个方法解决了。 …