时间:2021-05-22
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)摘两个例子:
(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 - 2po'(1) = o'(1) + 1o'(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)。
摘一个简单的例子:
(3) 实验验证
给出一小段测试代码,改变各个参数值,运行比较来验证上面得出的结论,have fun~.
from torch import nnfrom torch.nn import initfrom torch.autograd import Variabledconv = 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中反卷积的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
今天来介绍一下Tensorflow里面的反卷积操作,网上反卷积的用法的介绍比较少,希望这篇教程可以帮助到各位反卷积出自这篇论文:DeconvolutionalN
关于Pytorch的MNIST数据集的预处理详解MNIST的准确率达到99.7%用于MNIST的卷积神经网络(CNN)的实现,具有各种技术,例如数据增强,丢失,
先看Pytorch中的卷积classtorch.nn.Conv2d(in_channels,out_channels,kernel_size,stride=1,
本文为大家讲解了pytorch实现CNN卷积神经网络,供大家参考,具体内容如下我对卷积神经网络的一些认识卷积神经网络是时下最为流行的一种深度学习网络,由于其具有
一卷积操作:在pytorch搭建起网络时,大家通常都使用已有的框架进行训练,在网络中使用最多就是卷积操作,最熟悉不过的就是torch.nn.Conv2d(in_