torch.nn系列函数学习 --- Conv2d函数
该函数的官方文档:
https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#torch.nn.Conv2d
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
参数
以下是参数释义:
- in_channels (int) – 输入图像的通道数
- out_channels (int) – 卷积生成的输出通道数
- kernel_size (int 或 tuple) – 卷积核的大小
- stride (int 或 tuple, 可选) – 卷积的步幅。默认值:1
- padding (int, tuple 或 str, 可选) – 在输入的四周添加的填充。默认值:0
- padding_mode (str, 可选) – 填充模式,可以为 'zeros'(零填充)、'reflect'(反射填充)、'replicate'(复制填充)或 'circular'(循环填充)。默认值:'zeros'
- dilation (int 或 tuple, 可选) – 卷积核元素之间的间隔。默认值:1
- groups (int, 可选) – 从输入通道到输出通道的分组连接数。默认值:1
- bias (bool, 可选) – 如果为 True,则为输出添加可学习的偏差项。默认值:True
注意:
-
stride 控制卷积操作的步幅,可以是一个单一的数字或一个元组。
-
padding 控制输入的填充量。可以是字符串
{‘valid’, ‘same’}
,或者是一个整数 / 整数组成的元组,表示在两侧应用的隐式填充量。 -
dilation 控制卷积核点之间的间距,也称为
à trous
算法。这个概念较难描述,不过此https://github.com/vdumoulin/conv_arithmetic/blob/master/gif/dilation.gif中有一个关于dilation
的可视化展示。 -
groups 控制输入与输出之间的连接。
in_channels
和out_channels
都必须能被groups
整除。例如:- 当
groups=1
时,所有的输入都会与所有输出进行卷积。 - 当
groups=2
时,操作等价于有两个并行的卷积层,每个卷积层分别处理一半的输入通道,生成一半的输出通道,然后将结果拼接起来。 - 当
groups=in_channels
时,每个输入通道都有自己的一组卷积核(大小为out_channels / in_channels
)。 -
当
groups == in_channels
且out_channels == K * in_channels
,其中K
是一个正整数时,这种操作也被称为“深度卷积(depthwise convolution)”。
- 当
参数 kernel_size
, stride
, padding
, dilation
可以是:
- 单个整数 —— 在这种情况下,高度和宽度维度使用相同的值。
- 两个整数组成的元组 —— 在这种情况下,第一个整数用于高度维度,第二个整数用于宽度维度。
Conv2d 输入输出关系/输出尺寸计算公式: