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多进程同步Lock、Semaphore、Event实例
Nov 21 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
基于scrapy实现的简单蜘蛛采集程序
Apr 17 Python
介绍Python中的__future__模块
Apr 27 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
pyqt5简介及安装方法介绍
Jan 31 Python
python对excel文档去重及求和的实例
Apr 18 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
浅谈Python中eval的强大与危害
Mar 13 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
Jan 15 Python
python生成随机数、随机字符、随机字符串
Apr 06 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格式化工具Beautify PHP小小BUG
2008/04/24 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
php中JSON的使用方法
2015/04/30 PHP
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
php获取POST数据的三种方法实例详解
2016/12/20 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
php弹出提示框的是实例写法
2019/09/26 PHP
Javascript下的keyCode键码值表
2007/04/10 Javascript
Jquery的each里用return true或false代替break或continue
2014/05/21 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
JavaScript中join()、splice()、slice()和split()函数用法示例
2018/08/24 Javascript
jQuery 获取除某指定对象外的其他对象 ( :not() 与.not())
2018/10/10 jQuery
nodejs中方法和模块用法示例
2018/12/24 NodeJs
js使用cookie实现记住用户名功能示例
2019/06/13 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
Python中集合类型(set)学习小结
2015/01/28 Python
Python变量作用范围实例分析
2015/07/07 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
Python实现的科学计算器功能示例
2017/08/04 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
带你认识Django
2019/01/15 Python
django最快程序开发流程详解
2019/07/19 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
2020/03/27 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
前厅部经理岗位职责范文
2014/02/04 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
车辆管理制度范本
2015/08/05 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android