nn.Conv2d
1)输入的维度为:
2)输出的维度为:
其中,Cout是由参数out_channels((int) – 卷积产生的通道数)决定。
Hout和Wout计算如下:
3)在池化层的计算:
也可以用上述公式,但是池化层一般pad为0,所以公式简化如下:
1.torch.nn.MaxPool2d
2.torch.nn.AvgPool2d
3.nn.AdaptiveAvgPool2d(output_size)
自身适应平均池化,参数就是输出的大小,其他的参数如步长等都是根据output_size参数自行制定。
nn.Conv3d
举例说明:Conv2D对720×720的3通道图像进行卷积,batch_size设为64,则输入向量的维度为 [64, 3, 720, 720], Conv3D对分辨率为720×720的视频(假设为连续5帧)进行卷积,batch_size设为64,则输入向量的维度为 [64, 3, 5, 720, 720]
1)维度计算:
2)例子:
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]