用卷积层替换平均池层

问题描述 投票:0回答:1

我有一个内核大小为 (4,3) 的平均池层,其步长为 (4,3) 和 0 填充。我想将其转换为等效的转换层,以便在我的神经网络中实现。

所以,在我的模型中,我替换了这个:

self.pool = nn.AvgPool2d((4, 3))

用这一行(32是输入通道数):

self.pool = nn.Conv2d(32, 32, (4, 3), 步长=(4, 3), 偏差=False)

对我来说,这两者似乎应该是等效的,并且这两个层的输出大小都是 (1, 32, 32, 13) (它有 32 个通道);对于大小为 (1, 32, 129, 40) 的输入(32 个通道,X 尺寸 129,Y 尺寸 40)。

我不确定我对池化层和转换层的基础知识是否有错误的理解。有人可以帮我吗?

提前致谢!

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

它们将产生相同的输出形状。这是一个快速测试确认:

import torch

data = torch.zeros(1, 32, 129, 40)
print(torch.nn.AvgPool2d((4, 3))(data).shape,
      torch.nn.Conv2d(32, 32, (4, 3), stride=(4, 3))(data).shape)
torch.Size([1, 32, 32, 13])
torch.Size([1, 32, 32, 13])

在这种情况下,它们生成的形状是相同的,但它们不是等效的操作。平均池化一次占用一个通道,忽略其他所有通道。它独立地对每个通道进行池化,这就是输出通道的数量与输入通道的数量相匹配的原因。

卷积层同时扫描所有 32 个通道,为每个卷积滤波器产生一个输出通道。因此,对于一个卷积层来说,输出通道的数量是由该卷积层有多少个滤波器决定的,而不是由输入通道的数量决定的。在本例中,您为卷积层配置了 32 个滤波器,因此它的输出通道大小(n_filters 或 n_out=32)恰好与输入通道大小(n_in=32)相同。

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