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中的匿名函数使用简介
Apr 27 Python
在Django框架中编写Contact表单的教程
Jul 17 Python
用Python实现命令行闹钟脚本实例
Sep 05 Python
Python 递归函数详解及实例
Dec 27 Python
python遍历文件夹下所有excel文件
Jan 03 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
在python里使用await关键字来等另外一个协程的实例
May 04 Python
Python接口测试数据库封装实现原理
May 09 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
Feb 25 Python
AI:如何训练机器学习的模型
Apr 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 Cookie处理函数
2016/08/09 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
2016/12/24 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
Jquery 设置标题的自动翻转
2009/10/03 Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
jQuery 1.5 源码解读 面向中高阶JSER
2011/04/05 Javascript
iframe的父子窗口之间的对象相互调用基本用法
2013/09/03 Javascript
jquery遍历select元素(实例讲解)
2013/12/31 Javascript
JavaScript中Boolean对象的属性解析
2015/10/21 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
javascript实现简单打字游戏
2019/10/29 Javascript
[02:28]DOTA2英雄基础教程 狼人
2013/12/23 DOTA
python原始套接字编程示例分享
2014/02/21 Python
python采用getopt解析命令行输入参数实例
2014/09/30 Python
简单介绍Python中的len()函数的使用
2015/04/07 Python
Python实现将Excel转换成xml的方法示例
2018/08/25 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Python批量处理csv并保存过程解析
2020/05/16 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
艺术设计专业个人求职信范文
2013/12/11 职场文书
工程开工庆典邀请函
2014/02/01 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
常务副总经理岗位职责
2014/04/12 职场文书
汉语言文学专业求职信
2014/06/19 职场文书
2019个人工作计划书的格式及范文!
2019/07/04 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers
python 实现体质指数BMI计算
2021/05/26 Python