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去掉行尾的换行符方法
Jan 04 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
对Python中plt的画图函数详解
Nov 07 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
详解python中list的使用
Mar 15 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
django中使用Celery 布式任务队列过程详解
Jul 29 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
Python pip使用超时问题解决方案
Aug 03 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
Python学习之异常中的finally使用详解
Mar 16 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函数指定默认值方法的小例子
2013/12/04 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
php字符串的替换,分割和连接方法
2016/05/23 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
JavaScript面向对象(极简主义法minimalist approach)
2012/07/17 Javascript
ScrollDown的基本操作示例
2013/06/09 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
浅谈JavaScript字符串拼接
2015/06/25 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
Node.js 路由的实现方法
2019/06/05 Javascript
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
vue+axios实现post文件下载
2019/09/25 Javascript
微信小程序 多行文本显示...+显示更多按钮和收起更多按钮功能
2019/09/26 Javascript
[01:59]DOTA2首部纪录片《Free to play》预告片
2014/03/12 DOTA
python黑魔法之编码转换
2016/01/25 Python
python去除字符串中的换行符
2017/10/11 Python
Python使用while循环花式打印乘法表
2019/01/28 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
python和c语言哪个更适合初学者
2020/06/22 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
Python中的面向接口编程示例详解
2021/01/17 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
澳大利亚商务邀请函
2014/01/17 职场文书
客服专员岗位职责
2014/02/28 职场文书
给老婆的保证书范文
2014/04/28 职场文书
党员学习群众路线教育实践活动对照检查材料
2014/09/23 职场文书
格列夫游记读书笔记
2015/07/01 职场文书