2D卷积(nn.Conv2d)和3D卷积(nn.Conv3d)的介绍与对比
nn.Conv2d
和 nn.Conv3d
是 PyTorch 中用于实现二维和三维卷积层的类。它们在处理不同维度的数据时非常有用,例如图像和视频。
一、nn.Conv2d
nn.Conv2d
用于二维卷积操作,通常用于处理图像数据。其输入通常是形状为 (batch_size, channels, height, width)
的四维张量。(B,C,H,W)
参数
nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
in_channels
:输入通道数,例如 RGB 图像的输入通道数为 3,灰度图像的输入通道数为1。out_channels
:输出通道数,即卷积核的数量。kernel_size
:卷积核的大小,可以是单个整数或元组(height, width)
。stride
:卷积操作的步幅,默认为 1。padding
:输入的边缘填充,默认为 0。dilation
:卷积核元素之间的间距,默认为 1。groups
:分组卷积的组数,默认为 1。bias
:是否添加偏置项,默认为 True。padding_mode
:填充模式,默认为 ‘zeros’。
示例
import torch
import torch.nn as nn
conv2d = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
input_tensor = torch.randn(1, 3, 32, 32) # (batch_size, channels, height, width)
output_tensor = conv2d(input_tensor)
print(output_tensor.shape) # 输出形状为 (1, 16, 32, 32)
2. nn.Conv3d
nn.Conv3d
用于三维卷积操作,通常用于处理视频数据或三维体数据。其输入通常是形状为 (batch_size, channels, depth, height, width)
的五维张量。(B,C,D,W,H)
参数
nn.Conv3d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
in_channels
:输入通道数。out_channels
:输出通道数。kernel_size
:卷积核的大小,可以是单个整数或元组(depth, height, width)
。stride
:卷积操作的步幅,默认为 1。padding
:输入的边缘填充,默认为 0。dilation
:卷积核元素之间的间距,默认为 1。groups
:分组卷积的组数,默认为 1。bias
:是否添加偏置项,默认为 True。padding_mode
:填充模式,默认为 ‘zeros’。
示例
import torch
import torch.nn as nn
conv3d = nn.Conv3d(in_channels=1, out_channels=16, kernel_size=(3, 3, 3), stride=1, padding=1)
input_tensor = torch.randn(1, 1, 10, 32, 32) # (batch_size, channels, depth, height, width)
output_tensor = conv3d(input_tensor)
print(output_tensor.shape) # 输出形状为 (1, 16, 10, 32, 32)
三、总结
nn.Conv2d
适用于二维数据(如图像),其卷积核在高度和宽度两个维度上滑动。nn.Conv3d
适用于三维数据(如视频或体数据),其卷积核在深度、高度和宽度三个维度上滑动。
这两个类在处理不同类型的数据时非常有用,可以根据具体任务选择合适的卷积层。