Pytorch入门笔记

从这一篇博客开始,自己准备了解并且记录一些pytorch的内容。以下记录的可能不是很连贯,主要作为自己温习的笔记。

torch.NN

Conv2d

卷积操作需要先了解,具体可参考博文

在torch中的Conv2d有一些参数可能不是很熟悉,其实都是一些已有的概念。我们这里讲解下Conv2d,nn.Conv2d是二维卷积方法,相对应的还有一维卷积方法nn.Conv1d,常用于文本数据的处理,而nn.Conv2d一般用于二维图像。参考文献【1】是官方文档,接口如下:

class torch.nn.Conv2d(in_channels,
out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1,
bias=True)

参数解释:
Pytorch入门笔记
channels这个概念其实在各种框架中常见,意思就是通道数,一般的RGB图片,channels 数量是 3 (红、绿、蓝);而monochrome图片,channels 数量是 1。 如果从这个中,我们就更容易明白:一般 channels 的含义是,每个卷积层中卷积核的数量。 因此,in_channels和out_channels的意思我们就明白了。如果仍不明白,参考文献【2】说的很清楚。

kernel size: 就是卷积核的大小,可以是int或者是tuple,即可以是3,或者是(3,5)

stride: 步长

padding和padding_mode:比较简单

dilation:控制 kernel 点之间的空间距离。这个看着定义有点抽象,看下面的图就理解了
Pytorch入门笔记

groups: 分组卷积,意思是将对应的输入通道与输出通道数进行分组, 默认值为1, 也就是说默认输出输入的所有通道各为一组。

比如输入数据大小为90x100x100x32,通道数32,要经过一个3x3x48的卷积,group默认是1,就是全连接的卷积层。

如果group是2,那么对应要将输入的32个通道分成2个16的通道,将输出的48个通道分成2个24的通道。对输出的2个24的通道,第一个24通道与输入的第一个16通道进行全卷积,第二个24通道与输入的第二个16通道进行全卷积。

极端情况下,输入输出通道数相同,比如为24,group大小也为24,那么每个输出卷积核,只与输入的对应的通道进行卷积

到这里,参数就已经介绍完毕了。

在官方文档中,还介绍了尺寸计算的方式。如果我们已经完全理解了参数的含义,下面的公式也是显而易见的:
Pytorch入门笔记
NN是样本数,CinC_{in}是通道数,HinH_{in}是像素高度,WinW_{in}是像素宽度。

参考文献

【1】https://pytorch.org/docs/stable/nn.html#convolution-layers
【2】从零学习PyTorch nn.Conv2d的参数用法 channel含义详解