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实现360的字符显示界面
Feb 21 Python
从零学Python之入门(五)缩进和选择
May 27 Python
让python 3支持mysqldb的解决方法
Feb 14 Python
pycham查看程序执行的时间方法
Nov 29 Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 Python
pywinauto自动化操作记事本
Aug 26 Python
用python3读取python2的pickle数据方式
Dec 25 Python
python ubplot使用方法解析
Jan 10 Python
学会python自动收发邮件 代替你问候女友
May 20 Python
如何在Python中创建二叉树
Mar 30 Python
python3使用diagrams绘制架构图的步骤
Apr 08 Python
Python基础 括号()[]{}的详解
Nov 07 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
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
2009/06/08 PHP
php && 逻辑与运算符使用说明
2010/03/04 PHP
php自动获取关键字的方法
2015/01/06 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
Prototype Function对象 学习
2009/07/12 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
在Vant的基础上实现添加表单验证框架的方法示例
2018/12/05 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
vue实现评论列表功能
2019/10/25 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
python函数装饰器用法实例详解
2015/06/04 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
python使用turtle库绘制树
2018/06/25 Python
python安装twisted的问题解析
2018/08/21 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
2020/03/14 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
预备党员党校学习自我评价分享
2013/11/12 职场文书
售前工程师职业生涯规划
2014/03/02 职场文书
党建工作先进材料
2014/05/02 职场文书
鲁迅故里导游词
2015/02/05 职场文书
反腐倡廉影片观后感
2015/06/08 职场文书
新闻报道稿范文
2015/07/23 职场文书
Python编程源码报错解决方法总结经验分享
2021/10/05 Python
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL