卷积层和反卷积层输出特征图大小计算

计算公式:

卷积层(nn.Conv2d)的输出特征图大小计算公式:

  • 输出特征图的宽度 = (输入特征图宽度 - 卷积核宽度 + 2*填充)/ 步长 + 1
  • 输出特征图的高度 = (输入特征图高度 - 卷积核高度 + 2*填充)/ 步长 + 1
  • 输出特征图的通道数 = 卷积核个数

反卷积层(nn.ConvTranspose2d)的输出特征图大小计算公式:

  • 输出特征图的宽度 = (输入特征图宽度 - 1) * 步长 - 2*填充 + 反卷积核宽度 + 输出填充
  • 输出特征图的高度 = (输入特征图高度 - 1) * 步长 - 2*填充 + 反卷积核高度 + 输出填充
  • 输出特征图的通道数 = 反卷积核个数

注意

  1. 卷积核宽度和高度即为卷积操作中所使用的卷积核大小。
  2. 填充(padding)表示在输入特征图的每一边填充的零值像素个数。
  3. 步长(stride)表示卷积核在输入特征图上滑动的步长。
  4. 反卷积核宽度和高度即为反卷积操作中所使用的卷积核大小。
  5. 输出填充(output padding)表示在输出特征图的每一边填充的零值像素个数。

总的来说,计算输出特征图大小的公式考虑了输入特征图的尺寸、卷积核的大小、填充的大小、步长和输出填充的大小等参数。这些参数的选择和调整会影响输出特征图的尺寸和形状。

举个例子

卷积计算

当我们有一个输入特征图大小为 28x28 ,卷积核大小为 3x3 ,步长为 1 ,填充为 0 的情况下,计算卷积层的输出特征图大小。

输出特征图的宽度 = (输入特征图宽度 - 卷积核宽度 + 2填充)/ 步长 + 1
输出特征图的高度 = (输入特征图高度 - 卷积核高度 + 2
填充)/ 步长 + 1
输出特征图的通道数 = 卷积核个数

所以,使用上述公式进行计算:
输出特征图的宽度 = (28 - 3 + 20)/ 1 + 1 = 26
输出特征图的高度 = (28 - 3 + 2
0)/ 1 + 1 = 26
输出特征图的通道数 = 卷积核个数(可以是任意整数,例如 64)

因此,卷积层的输出特征图大小为 26x26x64。

反卷积层的输出特征图大小计算也是类似的,根据公式计算出来的结果就是输出特征图的大小。需要注意的是,反卷积的填充指的是输出特征图的填充,而不是输入特征图的填充。在反卷积中,输出特征图的填充会增加输出特征图的大小。

反卷积计算

当我们有一个输入特征图大小为 26x26 ,反卷积核大小为 3x3 ,步长为 1 ,输出填充为 0 的情况下,计算反卷积层的输出特征图大小。

输出特征图的宽度 = (输入特征图宽度 - 1) * 步长 - 2填充 + 反卷积核宽度 + 输出填充
输出特征图的高度 = (输入特征图高度 - 1) * 步长 - 2
填充 + 反卷积核高度 + 输出填充
输出特征图的通道数 = 反卷积核个数

所以,使用上述公式进行计算:
输出特征图的宽度 = (26 - 1) * 1 - 20 + 3 + 0 = 28
输出特征图的高度 = (26 - 1) * 1 - 2
0 + 3 + 0 = 28
输出特征图的通道数 = 反卷积核个数(可以是任意整数,例如 64)

因此,反卷积层的输出特征图大小为 28x28x64。

值得注意的是,在反卷积中,输出填充(output padding)的值可以调节反卷积操作的输出特征图大小。

代码实现:

以下是一个包含卷积和反卷积层的示例:

import torch
import torch.nn as nn

# 定义卷积层和反卷积层
conv_layer = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=3, stride=1, padding=0)
deconv_layer = nn.ConvTranspose2d(in_channels=16, out_channels=1, kernel_size=3, stride=1, padding=0)

# 输入特征图大小为 (batch_size, channels, height, width)
input_feature = torch.randn(1, 1, 28, 28)

# 前向传播
conv_output = conv_layer(input_feature)
deconv_output = deconv_layer(conv_output)

print('卷积层输出特征图大小:', conv_output.shape)
print('反卷积层输出特征图大小:', deconv_output.shape)

运行上述代码后的输出结果将会是:

卷积层输出特征图大小: torch.Size([1, 16, 26, 26])
反卷积层输出特征图大小: torch.Size([1, 1, 28, 28])

可以看到,卷积层的输出特征图大小为 [1, 16, 26, 26],反卷积层的输出特征图大小为 [1, 1, 28, 28]
其中,反卷积层的输出特征图大小与输入特征图的大小相同。

水平有限,有问题随时联系~

干货获取指南

以AI算法与工程技术为核心的公众号,欢迎关注交流~
卷积层和反卷积层输出特征图大小计算_第1张图片

你可能感兴趣的:(deeplearning,深度学习,计算机视觉,神经网络)