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

Python:torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解

Python:torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解

1. 函数参数

在torch中的卷积操作有三个,torch.nn.Conv1d(),torch.nn.Conv2d()还有torch.nn.Conv3d(),这是搭建网络过程中常用的网络层,为了用好卷积层,需要知道这些参数代表的含义。

这三种不同的卷积的输入参数是相同的,所以只看一个就可以。

def __init__(self,in_channels: int,out_channels: int,kernel_size: _size_2_t,stride: _size_2_t = 1,padding: Union[str, _size_2_t] = 0,dilation: _size_2_t = 1,groups: int = 1,bias: bool = True,padding_mode: str = 'zeros',  # TODO: refine this typedevice=None,dtype=None

这里面的参数网上有很多说明,重点是怎么理解和使用。

2. 参数理解

这里面重点是in_channels参数,这个是代表数据输入的通道,很多说明这个通道是利用torch.nn.Conv2d处理图片数据来进行说明的,代表的是图片的通道数,然后面的两个参数对应着图片的长度和宽度。

下面是本人对这参数的理解过程:

  • 首先对于torch.nn.Conv函数,所接受的数据是可以带有batch维度的,也可以不带有batch维度,这就表示对于torch.nn.Conv2d可以接受的数据包括3维数据或者4维数据,

如:

conv2 = torch.nn.Conv2d(16, 120, 3, stride=2)
input2_3 = torch.randn(16, 5, 5)
output2_3 = conv2(input2_3)
print(output2_3.shape)input2_4 = torch.randn(20, 16, 5, 5)
output2_4 = conv2(input2_4)
print(output2_4.shape)

该段得到的输出为:

torch.Size([120, 2, 2])
torch.Size([20, 120, 2, 2])

这是因为input2_4只是多了一个维度batch在第一个维度上,如果输入的数据是2维的或者5维的,就会提示如下的错误:指明只能接受3维的数据或者4维的数据.

RuntimeError: Expected 3D (unbatched) or 4D (batched) input to conv2d, but got input of size: [20, 20, 16, 5, 5]

这其实就说明了根据自己数据维度选择合适的torch.nn.Conv, 例如,如果数据是2维的,那么就选择torch.nn.Conv1d,这个可以接收传入的数据维度可以是2维,或者是带有batch维度的3维数据。

之后需要注意的是in_channels参数其实对应的就是传入数据的第一个维度(不带有batch)或者带有batch的第二个维度,这个要和in_channels参数相同。

可以理解成这个in_channels就是表示了有多个卷积核在参与计算,那么剩下的维度正好就是卷积核的维度,

如对于torch.nn.Conv3d,传入的数据最少是4维数据,(不带有batch),那么第一维的数据应该等于in_channels,然后剩下三维正好的是卷积核的维度。
如:

conv3 = torch.nn.Conv3d(16, 120, 3, stride=2)
input3 = torch.randn(16, 5, 5, 5)
output3 = conv3(input3)
print(output3.shape)

会得到

torch.Size([120, 2, 2, 2])

这个卷积核是333,相当于有16个卷积核,每个卷积核在16维的数据上依次计算。

其他的作为输出影响的是数据的维度大小,但是out_channels又决定了输出数据的第一个维度,(不带有batch),就可以依然用这个方式思考。

针对后面几维数据的大小,由其他的参数决定,这个有公式可以计算,懒得算也可以直接打印输出看一下维度。

相关文章:

Python:torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解

Python:torch.nn.Conv1d(), torch.nn.Conv2d()和torch.nn.Conv3d()函数理解 1. 函数参数 在torch中的卷积操作有三个,torch.nn.Conv1d(),torch.nn.Conv2d()还有torch.nn.Conv3d(),这是搭建网络过程中常用的网络层,为了用好卷积层&#xff0…...

scala 连接 MySQL 数据库案例

1 依赖准备 mysql 8添加&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version></dependency> mysql 5 添加&#xff1a; <dependency><grou…...

guava工具类常用方法

Guava是Google开发的一个Java开源工具类库&#xff0c;它提供了许多实用的工具类和功能&#xff0c;可以简化Java编程中的常见任务。 引入依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>2…...

CSShas伪类选择器案例附注释

<!DOCTYPE html> <html lang="en"> <head><meta charset...

nodejs+vue中医体质的社区居民健康管理系统elementui

可以实现首页、中医体质量表、健康文章、健康视频、我的等&#xff0c;在我的页面可以对医生、小区单元、医疗药品等功能进行操作。目前主要的健康管理系统是以西医为主&#xff0c;而为了传扬中医文化&#xff0c;提高全民健康意识&#xff0c;解决人民日益增长的美好生活需要…...

Kotlin中reified 关键字

前言 在开始之前&#xff0c;让我们先讨论一下泛型。泛型用于为类、函数或接口提供通用的实现。下面是一个示例泛型方法&#xff1a; fun <T> displayValue(value: T) {println(value) }fun main() {displayValue<String>("Generics")displayValue<…...

Linux命令(95)之alias

linux命令之alias 1.alias介绍 linux命令alias是用来将/bin目录下的命令进行别名设置&#xff0c;将一些较长的命令进行简化。 alias命令的作用只局限于该次登入的操作&#xff0c;相当于临时变量。 如果对当前用户永久生效&#xff0c;需修改~/.bashrc文件&#xff0c;使用…...

DHCPsnooping 配置实验(2)

DHCP报文泛洪攻击 限制接收到报文的速率 vlan 视图或者接口视图 dhcp request/ dhcp-rate dhcp snooping check dhcp-request enable dhcp snooping alarm dhcp-request enable dhcp snooping alarm dhcp-request threshold 1 超过则丢弃报文 查看[Huawei]dis dhcp statistic…...

Qt 综合练习小项目--反金币(2/2)

目录 4 选择关卡场景 4.2 背景设置 4.3 创建返回按钮 4.3 返回按钮 4.4 创建选择关卡按钮 4.5 创建翻金币场景 5 翻金币场景 5.1 场景基本设置 5.2 背景设置 5.3 返回按钮 5.4 显示当前关卡 5.5 创建金币背景图片 5.6 创建金币类 5.6.1 创建金币类 MyCoin 5.6.…...

安装matplotlib__pygame,以pycharm调入模块

安装pip 安装matplotlib 安装完毕&#xff0c;终端输入pip list检查 导入模块出现bug&#xff0c;发现不是matplotlib包的问题&#xff0c;pycharm版本貌似不兼容&#xff0c;用python编辑器可正常绘图&#xff0c;pygame也可正常导入。 ​​​​​​​ pycharm版本问题解决 终…...

编写可扩展的软件:架构和设计原则

在今天的软件开发领域&#xff0c;可扩展性是一个至关重要的概念。无论您是开发一个小型应用程序还是一个大规模的软件系统&#xff0c;都需要考虑如何使您的软件能够在不断变化的需求下进行扩展和演进。本文将探讨编写可扩展软件的关键架构和设计原则&#xff0c;以帮助开发人…...

算法-排序算法

0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非比较类排序&#xff1a;不通过比较来决定元素间…...

Android_Monkey_测试执行策略及标准

一、Monkey命令概述 NO命令说明用法解释1 -p ALLOWED_PACKAGE用于指定某个apk&#xff0c;可以使用多个-p选项&#xff0c;但是每个-p命令选项只能用于一个apk 如果不指定-p&#xff0c;Monkey就会默认进行全系统测试。 -p com.android.contacts可以进行特定apk的Monkey测试2 …...

windows安装nginx

官网提供的下载地址&#xff1a;nginx: download nginx1.25.2下载地址&#xff1a;http://nginx.org/download/nginx-1.25.2.zip 直接运行nginx.exe会闪退&#xff0c;我们还得使用cmd/git bash/power shell 命令进行启动&#xff1b; 个人更喜欢git bash&#xff1b; 运行命…...

Java日期的学习篇

关于日期的学习 目录 关于日期的学习JDK8以前的APIDate Date常用APIDate的API应用 SimpleDateFormatSimpleDateFormat常用API测试 反向格式化(逆操作)测试 训练案例需求(秒杀活动)实现 Calendar需求痛点常见API应用测试 JDK8及以后的API(修改与新增)为啥学习(推荐使用)新增的AP…...

spark on hive

需要提前搭建好hive&#xff0c;并对hive进行配置。 1、将hive的配置文件添加到spark的目录下 cp $HIVE_HOME/conf/hive-site.xml $SPARK_HOME/conf2、开启hive的hivemetastore服务 提前创建好启动日志存放路径 mkdir $HIVE_HOME/logStart nohup /usr/local/lib/apache-hi…...

Linux Vi编辑器基础操作指南

Linux Vi编辑器基础操作指南 Linux中的Vi是一个强大的文本编辑器&#xff0c;虽然它有一些陡峭的学习曲线&#xff0c;但一旦掌握了基本操作&#xff0c;它就变得非常高效。以下是Vi编辑器的一些基本用法&#xff1a; 打开Vi编辑器&#xff1a; vi 文件名退出Vi编辑器&#xff…...

WEB3 创建React前端Dapp环境并整合solidity项目,融合项目结构便捷前端拿取合约 Abi

好 各位 经过我们上文 WEB3 solidity 带着大家编写测试代码 操作订单 创建/取消/填充操作 我们自己写了一个测试订单业务的脚本 没想到运行的还挺好的 那么 今天开始 我们就可以开始操作我们前端 Dapp 的一个操作了 在整个过程中 确实是没有我们后端的操作 或者说 我们自己就…...

rust运算

不同类型不能放在一起运算。如果非要计算&#xff0c;必须先强转成一个类型再运算。 一 、数字运算 &#xff08;一&#xff09;算术运算 a 10且b 5 名称运算符范例加ab的结果为15减-a-b的结果为5乘*a*b的结果为50除/a / b的结果为2求余%a % b的结果为0 Rust语言不支持自增…...

游戏引擎,脚本管理模块

编辑器中删除脚本&#xff0c;然后立即恢复删除的脚本关系正常编辑器中删除脚本&#xff0c;关掉编辑器&#xff0c;然后只恢复脚本&#xff0c;不恢复meta,然后再打开编辑器关系丢失编辑器中删除脚本&#xff0c;关掉编辑器&#xff0c;然后恢复脚本且恢复meta,然后再打开编辑…...

BepInEx IL2CPP启动失败终极解决指南:从异常诊断到游戏正常运行

BepInEx IL2CPP启动失败终极解决指南&#xff1a;从异常诊断到游戏正常运行 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx作为Unity游戏插件框架&#xff0c;为玩家和开发…...

别再用Excel硬扛了!SPSS数据视图和变量视图保姆级上手指南

别再用Excel硬扛了&#xff01;SPSS数据视图和变量视图保姆级上手指南 第一次打开SPSS时&#xff0c;很多从Excel转过来的用户会愣住——这个界面怎么既熟悉又陌生&#xff1f;左边明明也是表格&#xff0c;但为什么右键菜单里找不到"设置单元格格式"&#xff1f;右上…...

鸣潮自动化终极指南:5分钟解放双手,告别重复刷图

鸣潮自动化终极指南&#xff1a;5分钟解放双手&#xff0c;告别重复刷图 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves ok-ww 是一…...

文科生被AI替代前,应该主动去碰的一个认证方向

在AI全面渗透职场的当下&#xff0c;文科生想要跳出被动淘汰的困境&#xff0c;无需硬啃编程、算法等硬核理工内容&#xff0c;最优破局方式是依托自身文字、逻辑、共情、场景把控的优势&#xff0c;驾驭AI工具实现能力升级。而目前适配文科生、零门槛、重实操、高认可度的最优…...

RT-Thread开发实战(8)— 基于SPI驱动TFTLCD实现动态数据可视化

1. 从零开始玩转SPI驱动TFTLCD 第一次用RT-Thread驱动TFTLCD屏幕时&#xff0c;我盯着那堆密密麻麻的引脚直发懵。后来才发现&#xff0c;只要搞明白SPI通信和屏幕驱动芯片的关系&#xff0c;这事儿其实比想象中简单多了。我们这次要对付的是ST7789V2这款驱动芯片&#xff0c;它…...

保姆级避坑指南:用STM32CubeMX配置NRF24L01 SPI通信,从硬件连接到软件调试一气呵成

STM32CubeMX实战&#xff1a;NRF24L01无线通信全流程避坑指南 第一次接触NRF24L01模块时&#xff0c;我被它小巧的体积和低廉的价格所吸引&#xff0c;但真正开始调试时才发现这个"玩具级"射频模块藏着不少坑。记得有一次项目交付前夜&#xff0c;模块突然无法通信&a…...

Dify工作流智能生成器:用自然语言快速构建AI应用

1. 项目概述&#xff1a;一个为Dify AI工作流“编程”的智能生成器如果你正在使用Dify构建AI应用&#xff0c;并且对反复拖拽节点、配置连线、调试参数感到一丝疲惫&#xff0c;那么Tomatio13/DifyWorkFlowGenerator这个项目可能会让你眼前一亮。它本质上是一个“用自然语言描述…...

轻量级视频稳定技术:EfficientMotionPro与OnlineSmoother解析

1. 轻量级视频稳定技术概述视频稳定技术是现代计算机视觉领域的重要研究方向&#xff0c;其核心目标是消除因相机抖动导致的画面不稳定现象。传统视频稳定方法通常依赖于复杂的光流计算或3D场景重建&#xff0c;这些方法虽然效果稳定&#xff0c;但计算开销巨大&#xff0c;难以…...

算法复杂度的实验估算与误差分布建模的技术7

引言算法复杂度分析的理论背景与实验估算的必要性误差来源的常见类型&#xff08;测量误差、系统噪声、模型偏差等&#xff09;实验方法在算法评估中的实际意义实验设计与数据采集实验环境配置&#xff08;硬件、软件、数据集选择&#xff09;关键性能指标定义&#xff08;时间…...

中间件与依赖系统:构建高效 Web 后端的双重利器

文章目录一、 中间件&#xff08;Middleware&#xff09;&#xff1a;全局的“拦截器”1.1 核心概念1.2 执行原理1.3 代码实现1.4 多中间件执行顺序二、 依赖系统&#xff08;Dependency Injection&#xff09;&#xff1a;精细化的“业务注入”2.1 为什么要用依赖系统&#xf…...