PyTorch中反卷积的用法详解


Posted in Python onDecember 30, 2019

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)

摘两个例子:

PyTorch中反卷积的用法详解

PyTorch中反卷积的用法详解

(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)。

摘一个简单的例子:

PyTorch中反卷积的用法详解

(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中反卷积的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现批量下载新浪博客的方法
Jun 15 Python
浅谈用VSCode写python的正确姿势
Dec 16 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
opencv python 傅里叶变换的使用
Jul 21 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
python属于跨平台语言码
Jun 09 Python
Python办公自动化之Excel(中)
May 24 Python
如何使用python包中的sched事件调度器
Apr 30 Python
关于的python五子棋的算法
May 02 Python
python使用正则表达式(Regular Expression)方法超详细
Dec 30 #Python
Pytorch实现各种2d卷积示例
Dec 30 #Python
Python面向对象之多态原理与用法案例分析
Dec 30 #Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 #Python
python面向对象之类属性和类方法案例分析
Dec 30 #Python
基于Python执行dos命令并获取输出的结果
Dec 30 #Python
python实现的批量分析xml标签中各个类别个数功能示例
Dec 30 #Python
You might like
php中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
PHP中的cookie不用刷新就生效的方法
2012/02/04 PHP
ZendFramework框架实现连接两个或多个数据库的方法
2016/12/08 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
JavaScript 指导方针
2007/04/05 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
详解javascript的变量与标识符
2016/01/04 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
Vuejs第十一篇组件之slot内容分发实例详解
2016/09/09 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
详解angularjs利用ui-route异步加载组件
2017/05/21 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
微信小程序使用canvas的画图操作示例
2019/01/18 Javascript
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
2019/02/20 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
Python批量修改文件后缀的方法
2014/01/26 Python
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
Python之re操作方法(详解)
2017/06/14 Python
Django实现文件上传下载功能
2019/10/06 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
2019/07/22 HTML / CSS
环保倡议书100字
2014/05/15 职场文书
体育馆的标语
2014/06/24 职场文书
党员先进性教育整改措施
2014/09/18 职场文书
建国大业观后感600字
2015/06/01 职场文书
入团介绍人意见范文
2015/06/04 职场文书
正规欠条模板
2015/07/03 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
box-shadow单边阴影的实现
2023/05/21 HTML / CSS