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)
参数解释:
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 点之间的空间距离。这个看着定义有点抽象,看下面的图就理解了
groups: 分组卷积,意思是将对应的输入通道与输出通道数进行分组, 默认值为1, 也就是说默认输出输入的所有通道各为一组。
比如输入数据大小为90x100x100x32,通道数32,要经过一个3x3x48的卷积,group默认是1,就是全连接的卷积层。
如果group是2,那么对应要将输入的32个通道分成2个16的通道,将输出的48个通道分成2个24的通道。对输出的2个24的通道,第一个24通道与输入的第一个16通道进行全卷积,第二个24通道与输入的第二个16通道进行全卷积。
极端情况下,输入输出通道数相同,比如为24,group大小也为24,那么每个输出卷积核,只与输入的对应的通道进行卷积
到这里,参数就已经介绍完毕了。
在官方文档中,还介绍了尺寸计算的方式。如果我们已经完全理解了参数的含义,下面的公式也是显而易见的:
是样本数,是通道数,是像素高度,是像素宽度。
参考文献
【1】https://pytorch.org/docs/stable/nn.html#convolution-layers
【2】从零学习PyTorch nn.Conv2d的参数用法 channel含义详解