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 相关文章推荐
PyMongo安装使用笔记
Apr 27 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
详解opencv Python特征检测及K-最近邻匹配
Jan 21 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
Django如何在不停机的情况下创建索引
Aug 02 Python
使用Python绘制台风轨迹图的示例代码
Sep 21 Python
python在地图上画比例的实例详解
Nov 13 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
Nov 18 Python
python爬取天气数据的实例详解
Nov 20 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过滤危险html代码
2008/08/18 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
PHP实现对图片的反色处理功能【测试可用】
2018/02/01 PHP
封装的原生javascript弹出层代码
2010/09/24 Javascript
jquery each()源代码
2011/02/14 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
jquery+html仿翻页相册功能
2016/12/20 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
React Router基础使用
2017/01/17 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
判断js数据类型的函数实例详解
2019/05/23 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
微信小程序实现购物车功能
2020/11/18 Javascript
python的re模块应用实例
2014/09/26 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
理论讲解python多进程并发编程
2018/02/09 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
python map比for循环快在哪
2020/09/21 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
大学生毕业求职的自我评价
2013/09/29 职场文书
小学语文国培感言
2014/03/04 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
vue+iview实现手机号分段输入框
2022/03/25 Vue.js