Pytorch中torch.nn.ConvTranspose2d函数详解

2023-10-16 07:08

本文主要是介绍Pytorch中torch.nn.ConvTranspose2d函数详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原理

ConvTranspose,即反卷积,通过卷积的形式,利用图像特征“恢复”到原图像。

当然,此处卷积核的权重参数与前面下采样卷积核的参数互相独立,且可更新。

也就是说“反”卷积不是之前的逆过程,无法保证完全恢复。

事实上,反卷积仅仅保留了特征与前级特征,点之间的对应关系

代码详解

简明起见,引入“正卷积”概念,意指从 低级特征 到 高级特征 的过程。

ConvTranspose2d 与 Conv2d 的参数形式、含义基本一致。需要注意的仅两点:

  • out_padding 这个也是补零,但是对反卷积后的特征图补零。
    • 设置该参数是由于不同尺寸的特征经卷积(下采样)后可以产生相同尺寸的特征,那么在反卷积对应回去的时候,通过out_padding解决多尺寸的问题。说白了,根本原因在于之前的卷积(下采样)有时会无法利用所有原始信息,有边角料未利用,如:input=5x5,padding=0,kernel_size=2x2,stride=2这种情况。
  • stride & padding 卷积步长和补零。
    • 反直觉的是:padding为之前“正卷积”补零个数
      • padding=0,“正卷积”为valid模式,那么要恢复原尺寸,反卷积就应为full模式,即为该特征两侧各补kernel_size-1个0;
      • padding=kernel_size-1,那么“正卷积”为full模式,则反卷积不用再补零。
      • padding=p,where 0<p<kernel_size-1,反卷积每侧补零数为kernel_size-1-p,即所谓p'=kernel_size-1-p。
    • stride 不再控制上采样的步长,而是控制输入特征图中,像素点间的间隙。原来的步长概念此时恒为1。stride默认为1,即无间隙。若stride=m,则输入特征图的像素点增添间隙,散开来,尺寸变为(input-1)x stride+1。
      • 事实上,这里的增大间隙正是下采样增大步长的对应过程。原来增大步长后,所卷积得到的特征图的相邻点,映射到原特征的区域之间的间距会变大。那么再通过卷积反求原来的低级特征时,就要将这个间距实实在在体现到对高级特征的处理上,即所谓增大间隙。(反卷积又称分数步长卷积,此即分数步长之体现、由来)

综上,给出ConvTranspose2d输入、输出特征大小计算式:

令输入特征大小为 i,输出为 o,反卷积核为 k x k,则有

o=\frac{\left \{ \left [\left ( i-1 \right )\times stride +1 \right ] +\left [ \left ( k-1-padding \right ) \times 2\right ]-k\right \}}{default\equiv 1}+1+outpadding

o=\left ( i-1 \right )\times stride+k-2padding+outpadding

 

可参考如下链接:Transposed convolution arithmetic

这篇关于Pytorch中torch.nn.ConvTranspose2d函数详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/219863

相关文章

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Java利用@SneakyThrows注解提升异常处理效率详解

《Java利用@SneakyThrows注解提升异常处理效率详解》这篇文章将深度剖析@SneakyThrows的原理,用法,适用场景以及隐藏的陷阱,看看它如何让Java异常处理效率飙升50%,感兴趣的... 目录前言一、检查型异常的“诅咒”:为什么Java开发者讨厌它1.1 检查型异常的痛点1.2 为什么说

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

springboot2.1.3 hystrix集成及hystrix-dashboard监控详解

《springboot2.1.3hystrix集成及hystrix-dashboard监控详解》Hystrix是Netflix开源的微服务容错工具,通过线程池隔离和熔断机制防止服务崩溃,支持降级、监... 目录Hystrix是Netflix开源技术www.chinasem.cn栈中的又一员猛将Hystrix熔

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

python之uv使用详解

《python之uv使用详解》文章介绍uv在Ubuntu上用于Python项目管理,涵盖安装、初始化、依赖管理、运行调试及Docker应用,强调CI中使用--locked确保依赖一致性... 目录安装与更新standalonepip 安装创建php以及初始化项目依赖管理uv run直接在命令行运行pytho

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

MySQL中REPLACE函数与语句举例详解

《MySQL中REPLACE函数与语句举例详解》在MySQL中REPLACE函数是一个用于处理字符串的强大工具,它的主要功能是替换字符串中的某些子字符串,:本文主要介绍MySQL中REPLACE函... 目录一、REPLACE()函数语法:参数说明:功能说明:示例:二、REPLACE INTO语句语法:参数