最近我用pytorch训练了一个神经网络,其中包含一个带填充的平均池化层。我对其行为以及带填充的平均池化的定义感到困惑。
例如,如果我们有一个输入张量:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
当填充为1且核大小为3时,第一个核的输入应该是:
0, 0, 0 0, 1, 2 0, 4, 5
pytorch的输出是12/4 = 3(忽略填充的0),但我认为应该是12/9 = 1.333
谁能解释一下这个问题吗?
非常感谢。
回答:
你可以决定你的填充池化层的行为。
这就是为什么pytorch的平均池化(例如,nn.AvgPool2d
)有一个可选参数count_include_pad=True
:
默认情况下(True
),平均池化会先填充输入,然后将所有元素视为相同。在这种情况下,你的示例输出确实是1.33。
另一方面,如果你设置count_include_pad=False
,池化层将忽略填充的元素,你的示例结果将是3。