3D卷积
比Conv2D多一个维度。
举例说明:Conv2D对720×720的3通道图像进行卷积,batch_size设为64,则输入向量的维度为 [64, 3, 720, 720], Conv3D对分辨率为720×720的视频(假设为连续5帧)进行卷积,batch_size设为64,则输入向量的维度为 [64, 3, 5, 720, 720]
torch.nn.Conv3d(in_channels,
out_channels,
kernel_size,
stride=1,
padding=0,
dilation=1,
groups=1,
bias=True,
padding_mode = 'zeros')
参数详解
- in_channels(
int
) :输入张量的通道数- out_channels(
int
) :卷积中滤波器的数量,表示输出张量的通道数- kerner_size(
int
ortuple
) :卷积窗口的宽度和高度- stride(
int
ortuple
,optional
) :卷积沿宽度和高度方向的步长- padding(
int
ortuple
,optional
) :输入的每一条边填充的层数- dilation(
int
ortuple
,optional
) :卷积核元素之间的间距,即膨胀卷积的膨胀率,默认为1。- groups(
int
,optional
):控制输入和输出之间的连接:group=1
,输出是所有的输入的卷积;group=2
,此时相当于有并排的两个卷积层,每个卷积层计算输入通道的一半,并且产生的输出是输出通道的一半,随后将这两个输出连接起来。- bias(
bool
,optional
) :如果bias=True
,添加偏置- padding_mode(str,
optional
) :填充的方式,如果padding_mode = 'zeros',表示用0填充
示例
import torch.nn as nn
import torch
# 创建一个卷积层,填充一圈0
conv1 = nn.Conv3d(in_channels=3,
out_channels=32,
kernel_size=(3, 3, 3),
stride=(2, 2. 2),
padding=1)
# 创建一个卷积层,无填充
conv2 = nn.Conv3d(in_channels=3,
out_channels=32,
kernel_size=(3, 3, 3),
stride=(2, 2, 2),
padding=0)
# 创建一个维度为[64, 3, 7, 5, 5]的tensor
x = torch.rand(64, 3, 7, 5, 5)
# 进行卷积
y1 = conv1(x)
print(y1.shape) # [64, 32, 4, 3, 3]
# 进行卷积
y2 = conv2(x)
print(y2.shape) # [64, 32, 3, 2, 2]