📅  最后修改于: 2023-12-03 15:30:05.560000             🧑  作者: Mango
在深度学习中,卷积神经网络(Convolutional Neural Network,CNN)常常会使用卷积层来对输入特征进行提取和转换。PyTorch中提供了nn.Conv2d
模块来构建卷积层。
nn.Conv2d
的默认参数nn.Conv2d
的构造函数中有若干个参数,下面我们主要介绍其中和卷积过程相关的参数。
in_channels
in_channels
表示输入特征图的通道数量。例如,如果输入特征图的形状为(N, C, H, W)
,其中C
就是in_channels
。
out_channels
out_channels
表示输出特征图的通道数量。例如,如果输出特征图的形状为(N, C, H, W)
,其中C
就是out_channels
。
kernel_size
kernel_size
表示卷积核(filter)的大小。可以是一个int
,如3
,也可以是一个元组,如(3, 3)
。
stride
stride
表示卷积核对输入特征图滑动的步长。可以是一个int
,如1
,也可以是一个元组,如(2, 2)
。默认值为1
。
padding
padding
表示在输入特征图的边缘添加的虚拟元素数量。可以是一个int
,如1
,也可以是一个元组,如(1, 1)
。默认值为0
。
dilation
dilation
表示卷积核内部的跨度。可以是一个int
,如2
,也可以是一个元组,如(2, 2)
。默认值为1
。
下面我们看一个简单的例子:
import torch
import torch.nn as nn
# 构造一个卷积层,输入特征图有3个通道,输出特征图有16个通道,
# 卷积核大小为3x3,卷积时以1的步长滑动,在边缘填充1个像素。
conv = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
# 构造一个输入特征图,形状为(N, C, H, W)=(1, 3, 32, 32)
x = torch.randn(1, 3, 32, 32)
# 将输入特征图输入卷积层
y = conv(x)
# 输出特征图的形状为(N, C, H, W)=(1, 16, 32, 32)
print(y.shape)
在这个例子中,我们构造了一个卷积层conv
,输入特征图有3
个通道,输出特征图有16
个通道,卷积核大小为3x3
,卷积时以1
的步长滑动,在边缘填充1
个像素。
我们也构造了一个输入特征图x
,形状为(1, 3, 32, 32)
,即一个通道数量为3
,尺寸为32x32
的特征图。将其输入到我们构造的卷积层中,输出特征图的形状为(1, 16, 32, 32)
,即一个通道数量为16
,尺寸为32x32
的特征图。
nn.Conv2d
是PyTorch中的卷积层模块,可以用来对输入特征图进行卷积。其中的一些参数用来控制卷积的过程,比如卷积核大小、步长以及填充等。默认情况下,nn.Conv2d
的步长为1
。