python中如何反解函数_PyTorch中反卷积的用法详解
pytorch中的 2D 卷积层 和 2D 反卷积层 函数分别如下:
class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, groups=1, bias=True)
class torch.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, bias=True)
我不禁有疑问:
问题1: 两个函数的参数为什么几乎一致呢?
问题2: 反卷积层中的 output_padding是什么意思呢?
问题3: 反卷积层如何计算input和output的形状关系呢?
看了中文文档后,我得不出答案,看了英文文档,才弄明白了。花费了一个下午的时间去研究这个问题,值得用此文纪录一下。
我们知道,在卷积层中,输入输出的形状关系为:
o = [ (i + 2p - k)/s ] +1 (1)
其中:
O : 为 output size
i: 为 input size
p: 为 padding size
k: 为kernel size
s: 为 stride size
[] 为下取整运算
(1) 当 S=1 时
若 s等于1,则公式(1)中的取整符号消失,o 与 i 为 一一对应 的关系。 我们有结论:
如果卷积层函数和反卷积层函数的 kernel_size, padding size参数相同(且 stride= 1),设反卷基层的输入输出形状为 i' 和 o', 卷积层的输入输出形状i和o, 则它们为 交叉对应 的关系,即:
i = o'
o = i'
为回答问题3, 我们将上述关系代入公式中,即:
i' = o' + 2p - k +1
已知 i', 即可推出 o':
o' = i' - 2p + k - 1 (2)
摘两个例子:
(2) 当 S>1 时
若 S>1 , 则公式(1)中的取整符号不能消去,o 与 i 为 多对1 的关系。 效仿 S=1时的情形, 我们有结论:
如果卷积层函数和反卷积层函数的 kernel_size, padding size参数相同(且 stride>1),设反卷基层的输入输出形状为 i' 和 o', 卷积层的输入输出形状i和o,
i' = [ (o' + 2p - k)/s ] +1
已知 i', 我们可以得出 s 个 o' 解:
o'(0) = ( i' - 1) x s + k - 2p
o'(1) = o'(1) + 1
o'(2) = o'(1) + 2
...
o'(s-1) = o'(1) + s-1
即:
o'(n) =o'(1) + n = ( i' - 1) x s + k - 2p + n,
n = {0, 1, 2...s-1}
为了确定唯一的 o' 解, 我们用反卷积层函数中的ouput padding参数指定公式中的 n 值。这样,我们就回答了问题(2)。
摘一个简单的例子:
(3) 实验验证
给出一小段测试代码,改变各个参数值,运行比较来验证上面得出的结论,have fun~.
from torch import nn
from torch.nn import init
from torch.autograd import Variable
dconv = nn.ConvTranspose2d(in_channels=1, out_channels= 1, kernel_size=2, stride=2, padding=1,output_padding=0, bias= False)
init.constant(dconv.weight, 1)
print(dconv.weight)
input = Variable(torch.ones(1, 1, 2, 2))
print(input)
print(dconv(input))
以上这篇PyTorch中反卷积的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
本文标题: PyTorch中反卷积的用法详解
本文地址: http://www.cppcns.com/jiaoben/python/296287.html
python中如何反解函数_PyTorch中反卷积的用法详解相关推荐
- python中values是什么意思_Python values()与itervalues()的用法详解
dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value: d = { 'Adam': 95, 'Li ...
- linux中grep命令 菜鸟教程,linux grep正则表达式与grep用法详解
需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 ...
- linux中id命令的功能,Linux id命令参数及用法详解
Linux id命令参数及用法详解--Linux查看当前登陆用户uid,gid. 命 令:id 功能说明:查看显示目前登陆账户的uid和gid及所属分组及用户名 语 法:id [-g ...
- python 内存分析工具_python内存监控工具memory_profiler和guppy的用法详解
python2.7在内存管理上相比python3还是有些坑的,其释放后的内存仍然保留在python的内存池中,不被系统所用.python循环引用的变量不会被回收,这会导致程序越运行,占用的内存越大.我 ...
- python dataframe index loc_基于DataFrame筛选数据与loc的用法详解
DataFrame筛选数据与loc用法 python中pandas下的DataFrame是一个很不错的数据结构,附带了许多操作.运算.统计等功能. 如何从一个DataFrame中筛选中出一个元素呢. ...
- python for i in range(len())_Python for i in range ()用法详解
for i in range ()作用: range()是一个函数, for i in range () 就是给i赋值: 比如 for i in range (1,3): 就是把1,2依次赋值给i r ...
- linux 中的who的参数,linux who命令参数及用法详解
执行这项指令可得知目前有那些用户登入系统,单独执行who指令会列出登入帐号,使用的终端机,登入时间以及从何处登入或正在使用哪个X显示器 linux who 命令 详解 Linux最常用命令之一 功能说 ...
- python代码覆盖率怎么统计的_Python代码覆盖率统计工具coverage.py用法详解
1.安装coverage pip install coverage 安装完成后,会在Python环境下的\Scripts下看到coverage.exe: 2.Coverage 命令行 coverage ...
- Python多线程编程(一):threading 模块 Thread 类的用法详解
我们进行程序开发的时候,肯定避免不了要处理并发的情况. 一般并发的手段有采用多进程和多线程. 但线程比进程更轻量化,系统开销一般也更低,所以大家更倾向于用多线程的方式处理并发的情况. Python 提 ...
最新文章
- 【Luogu P2764】最小路径覆盖问题
- HDLBits 系列(32)Sequence recognition(序列检测)
- colease函数 mysql_SqlConnection 概述
- rancher k8s docker 关系_【环境搭建】Ubuntu20.04通过rke部署K8S
- 5.Vue 计算属性和侦听器
- windows下RocketMQ下载、安装、部署、控制台
- 这些年无处安放的博客
- GitHub 60000+ Star 登顶,命令行的艺术!
- 老程序员也搞不定的 4 个巨坑!
- DBA_实践指南系列7_Oracle Erp R12监控OAM(案例)
- 【编辑器】VSCode配置C++编译
- 一个树杈y图片_鬼脸纹:黄花梨树上一个树杈,反映到主干上时,会形成一个疖痕...
- win10 修改hosts文件
- 安装西门子博图一直重启_博途V15.1安装及无限重启和.net3.5SP1错误处理解决方法...
- 设计性思考维模型及步骤(上)
- HTML/CSS中的空格如何处理
- 2022AcWing寒假算法每日一题之2058. 笨拙的手指
- 【冰爪游戏】MC教程 —— PCL启动器
- 我不想关注你了,饭否
- 鼎捷软件贡献数字化智慧 赋能装备制造行业转型发展
热门文章
- HDU1850 Being a Good Boy in Spring Festival【Nim博弈】
- HDU2025 查找最大元素【入门】
- HDU1106 排序(解法二)(废除!!!)
- 理解 RESTful
- Python 基础 —— re:正则表达
- [面试] C++ 语法(一) —— 初始化列表的初始化顺序
- 为 Notepad++ 安装 NppFTP 插件,查看修改虚拟机上的文本文件
- 强悍的 Linux —— 强悍的 ls
- java数据库技术_JAVA数据库技术
- python基础-菜鸟世界 -python基础---set