为什么输出形状不会在卷积层中跨通道相乘?

问题描述 投票:0回答:1
# First convolutional layer: input channels = 1, output channels = 32, kernel size = 5x5, padding = 2 (SAME)
self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=5, stride=1, padding=2)
# First pooling layer: max pooling, kernel size = 2x2, stride = 2
self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)

# Second convolutional layer: input channels = 32, output channels = 64, kernel size = 5x5, padding = 2 (SAME)
self.conv2 = nn.Conv2d(in_channels=32, out_channels=64, kernel_size=5, stride=1, padding=2)
# Second pooling layer: max pooling, kernel size = 2x2, stride = 2
self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)

问题:为什么第二个卷积层之后的输出不是 14*14*32*64?对于 32 通道输入,每个卷积核在一个通道上运行,产生 64 种不同的结果。 32个通道不应该相乘吗?

我得到的答案如下:对于输入的每个 14 * 14 位置,具有 5532 输入区域的 5532 核点积将为您提供 14*14 单通道输出。内核大小不是5 * 5吗?

python machine-learning pytorch conv-neural-network
1个回答
0
投票

假设您的输入形状为

(N, 1, 32, 32)
((N,C,H,W)格式)。 现在,让我们列出每层之后的输出形状。

self.conv1
(N, 32, 32, 32)
5x5x1
 形状的 32 个滤波器在填充输入上进行卷积(5x5 是内核大小,1 是输入通道数)。因此,输出有 32 个形状为 
32x32
 的特征图。

self.pool1

(N, 32, 16, 16)
。池化层将特征图下采样 2 倍。

self.conv2

(N, 64, 16, 16)
5x5x32
 形状的 64 个过滤器应用于填充输入(5x5 是内核大小,32 是输入通道数)。用一个滤波器进行卷积运算后的输出形状是
16x16
。因此,该层的输出有 64 个形状为
16x16
的特征图。

self.pool2

(N, 64, 8, 8)
。池化层将特征图下采样 2 倍。
    

© www.soinside.com 2019 - 2024. All rights reserved.