当前位置: 首页> 论文发表> 正文

Conv2d 的用法

admin 2025-08-31 60

是PyTorch中用于定义二维卷积层的类。它在卷积神经网络(CNN)中广泛用于处理图像数据。以下是该类的用法和参数的详细介绍:

类定义
Conv2d(in_channels,out_channels,kernel_size,stride=1,padding=0,dilation=1,groups=1,bias=True,padding_mode='zeros')

记住,在将样本数据传递给Conv2d层之前,确保其形状为(batch_size,channels,height,width)。

参数

in_channels:输入通道数。指定输入数据的通道数。例如,对于RGB图像,in_channels为3。

out_channels:输出通道数。指定卷积层输出的特征图的通道数。这通常决定了卷积核的数量。

kernel_size:卷积核的大小。可以是一个整数或一个元组(kH,kW),分别指定卷积核的高度和宽度。

stride(默认为1):卷积操作的步幅。可以是一个整数或一个元组(sH,sW),分别指定在垂直和水平方向上的步幅。

padding(默认为0):填充是指在应用卷积之前,在输入张量的周围添加零(或其他值,具体取决于填充模式)。用于控制输出的空间维度。可以是一个整数或一个元组(padH,padW),指定在输入数据的垂直和水平边缘添加的填充像素数。

dilation(默认为1):扩张率。可以是一个整数或一个元组(dH,dW),指定卷积核元素之间的间距。

groups(默认为1):分组卷积。指定卷积分组的数量。in_channels和out_channels都必须能被groups整除。(这个参数先按默认值,目前还用不到,先不管他。)

bias(默认为True):是否为每个输出通道添加偏置项。

padding_mode(默认为‘zeros’):用于指定填充模式。可以是‘zeros’、‘reflect’、‘replicate’和’circular’。

不同的填充模式会影响输入数据边缘的处理方式。以下是padding_mode的几个选项及其含义:

'zeros'(默认):

–在输入数据的边缘填充零。这是最常用的填充模式,因为它简单且计算效率高。当不需要特别处理边缘特征时,这是一个好的选择。

'reflect':

–使用输入数据边缘的值进行反射填充。这意味着边缘的值会被镜像反射到填充区域。

–这种模式有助于保留边缘特征,因为它不会引入新的零值。

'replicate':

–使用输入数据边缘的值进行复制填充。这意味着边缘的值会被复制到填充区域。

–这种模式也有助于保留边缘特征,因为它不会引入新的值,只是复制现有的边缘值。

circular:

–将输入张量的左边缘将被复制到右边缘,上边缘将被复制到下边缘,以此类推,从而在卷积操作中创建一个连续的边缘处理,使得卷积核在边界处的操作能够考虑到输入数据的周期性特征。

注意:

•‘zeros’(置零):适用于一般用途,但可能会引入人为边界

•‘reflect’(反射):能更好地保留图像的局部特征

•‘replicate’(复制):能平滑地扩展边缘信息

•‘circular’(循环):适用于周期性数据或特定领域的应用

示例:

是不是还是对这几个填充模式云里雾里、傻傻分不清楚,没事儿,下面让我用一个简单的例子来解释“”中的padding_mode参数。

输入一个3×3的张量:

123456789

填充像素数padding=1,下面列出了每种填充模式的输出结果:

padding_mode=‘zeros’:

0000001230045600789000000

padding_mode=‘reflect’:

5456521232545658789854565

padding_mode=‘replicate’:

1123311233445667789977899

padding_mode=‘circular’:

9789731231645649789731231
代码示例

下面的例子展示了如何使用Conv2d:

:abatchof2RGBimagesofsize64x64input_tensor=(2,3,64,64)Outputshapewillbe[2,16,64,64]

创建Conv2d层后,可以将其作为神经网络的一部分使用。以下是一个简单的例子,展示如何在神经网络中使用Conv2d:

():def__init__(self):super(SimpleCNN,self).__init__()=(3,16,kernel_size=3,stride=1,padding=1)=(kernel_size=2,stride=2)=(16*16*16,10)defforward(self,x):x=((x))x=(x)x=(-1,16*16*16)x=(x)returnx创建一个输入张量input_tensor=(1,3,32,32)前向传播output=net(input_tensor)print(output)

荟萃知识,滋养你我。

同类文章
  • 最新文章
  • 热门文章
  • 随机阅读
友情链接