conv2d函数_Pytorch 从0开始学(6)——Conv2d 详解

您是否在使用Conv2d时遇见问题了呢?

您是否还在以Conv2d(128, 256, 3)的方式简单使用这个最具魅力的layer呢?

想更了解Conv2d么?让我们一起来深入看看它的真容吧,让我们触到它更高端的用法。

在第5节中,我们已经使用了Linear层来构建模型。其来自于torch.nn中

首先,我们先对torch.nn 来个整体的认识。官方链接:

https://pytorch.org/docs/stable/nn.html#

conv2d函数_Pytorch 从0开始学(6)——Conv2d 详解_第1张图片

可以看到,在torch.nn下包含了我们模型的概念、一些常用层、损失函数等的定义。我们不一一详细说,只说我们刚开始操作时最经常用到的。今天我们从最常用的2维卷积层说起。

首先还是看官方文档对Conv2d的整体定义:

40e49136da81560440019130e72cedb9.png

Conv2d,就是用来实现2d卷积操作的。要使用好这个类,我们先得搞清楚它的输入参数都是些啥?

in_channels —— 输入的channels数

out_channels —— 输出的channels数

kernel_size ——卷积核的尺寸,可以是方形卷积核、也可以不是,下边example可以看到

stride —— 步长,用来控制卷积核移动间隔

padding ——输入边沿扩边操作

padding_mode ——扩边的方式

bias ——是否使用偏置(即out = wx+b中的b)

以上参数,均是大家了解相对较多的参数项目。

dilation —— 这个参数简单说,设定了取数之间的间隔,下图可表达其意思

dilation = 1

conv2d函数_Pytorch 从0开始学(6)——Conv2d 详解_第2张图片

dilation = 2

conv2d函数_Pytorch 从0开始学(6)——Conv2d 详解_第3张图片

上图中蓝色为选取进行卷积计算的值。通过对比,即可了解该选项的作用

groups —— 进行分组卷积的组数

这个参数的使用不太好理解,首先还是贴原文档的说明

conv2d函数_Pytorch 从0开始学(6)——Conv2d 详解_第4张图片

这个其实是将输入和输出进行分组,然后进行对应的映射,最后连接形成输出。引网络上的一张图,大概可以看出此参数的作用。引至:

pytorch group 分组卷积

conv2d函数_Pytorch 从0开始学(6)——Conv2d 详解_第5张图片

参数的输入数据格式如下:

conv2d函数_Pytorch 从0开始学(6)——Conv2d 详解_第6张图片

以上对参数进行了较为详尽的说明,基本上可以使用了!

官方给出了几个例子

1)方形卷积核、行列相同步长(With square kernels and equal stride

m = nn.Conv2d(16, 33, 3, stride=2)

2)非方形卷积核、行列采用不同步长,并进行扩边

m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))

3)非方形卷积核、行列采用不同步长、数据采用稀疏,并进行扩边

m = nn.Conv2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2), dilation=(3, 1))

通过以上例子,可知使用Conv2d的使用。

最后,我们看下Conv2d的源码,通过底层看出其实现:

conv2d函数_Pytorch 从0开始学(6)——Conv2d 详解_第7张图片

该类的源码定义中,我们可以看到其中定义了3个函数:__init__forward和conv2d_forward。__init__中可以看到,对相关参数进行了默认初始化;而在forward中,表明了这个底层实现函数是采用的nn.functional.conv2d来实现。

以上,就对该类的使用进行了一次梳理,希望大家使用起来更加顺畅!

【备注】

由于也是刚转战pytorch,有错误的地方,望各位大佬指正。也希望有兴趣一起学习的朋友一起加入进来

你可能感兴趣的:(conv2d函数)