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 04 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
python 返回列表中某个值的索引方法
Nov 07 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
python实时检测键盘输入函数的示例
Jul 17 Python
Python 使用 environs 库定义环境变量的方法
Feb 25 Python
Python unittest基本使用方法代码实例
Jun 29 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
python中的垃圾回收(GC)机制
Sep 21 Python
详解pycharm配置python解释器的问题
Oct 15 Python
Python实现日志实时监测的示例详解
Apr 06 Python
PyTorch中permute的使用方法
Apr 26 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/06/03 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
js innerHTML 的一些问题的解决方法
2008/06/22 Javascript
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
采用call方式实现js继承
2014/05/20 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
使用js实现单链解决前端队列问题的方法
2020/02/03 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
解决python3中解压zip文件是文件名乱码的问题
2018/03/22 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
Python 如何在字符串中插入变量
2020/08/01 Python
python 实现一个简单的线性回归案例
2020/12/17 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
J2EE相关知识面试题
2013/08/26 面试题
机械工程师的岗位职责
2013/11/17 职场文书
工作分析计划书
2014/04/30 职场文书
趣味运动会广播稿
2014/09/13 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2014年司法局工作总结
2014/12/11 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
go goroutine 怎样进行错误处理
2021/07/16 Golang
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python