nn.Conv2d
是 PyTorch 中的一个卷积层,用于实现二维卷积操作。其主要参数有:
in_channels
:表示输入图像的通道数,也就是输入特征图的深度。out_channels
:表示输出特征图的通道数,也就是卷积核的个数。kernel_size
:表示卷积核的大小;可以是一个整数,表示正方形卷积核的边长;也可以是一个二元组,表示矩形卷积核的宽度和高度。stride
:表示卷积核的步长;可以是一个整数,表示正方形卷积核的步长;也可以是一个二元组,表示矩形卷积核在横向和纵向的步长。padding
:表示在输入图像周围添加的边界值的数量,以控制输出尺寸的大小。可以是一个整数,表示在四周添加相同数量的像素值;也可以是一个二元组,表示在左右、上下分别添加的像素值数量。dilation
:表示卷积核中各个元素之间的扩展步长,可以认为是卷积核的细节或稀疏程度,可以用来控制卷积核的超参数大小和感受野的大小。groups
:当输入和输出通道数不同时,可以利用 groups 参数将输入通道分组处理,将相邻的k个输入通道与相邻的k个输出通道进行卷积操作,然后将它们叠加在一起产生输出通道。这是一个非常重要的架构设计,可以大大减少模型参数量,减轻模型过拟合的风险。
nn.Conv2d
的使用方法一般如下:
import torch.nn as nn# 定义卷积层conv = nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3, stride=1, padding=1)# 输入数据x = torch.randn(1, 3, 224, 224)# 前向计算out = conv(x)
这里我们定义了一个输入通道数为 3,输出通道数为 32,卷积核大小为 3×3,步长为 1,边界填充数为 1 的卷积层。然后,我们定义了一个大小为 (1, 3, 224, 224) 的输入数据 x,执行前向计算得到输出 out。
注意,对于卷积操作,输入数据一般为四维张量,需要按照 batchsize × 通道数 × 高度 × 宽度的维度排列,这里 x 的大小为 (1, 3, 224, 224) 表示 batchsize 为 1,通道数为 3,输入图像的尺寸为 224×224。