8

默认情况MaxPool2D下,填充设置为 0,并且ceil_mode也设置为False. 现在,如果我有一个大小的输入,7x7输出kernel=2,stride=2形状变为3x3,但是当我使用 时ceil_mode=True,它变为4x4,这是有道理的,因为(如果以下公式正确),因为7x7withoutput_shape将是3.5x3.5并且取决于ceil_mode它会是3x3or 4x4

现在,我的问题是,如果ceil_mode=True,它会改变默认值padding吗?

如果是这样,那么它是如何添加填充的,即它是在左边还是右边添加填充,首先是向上还是向下?

4

1 回答 1

7

Ceil_mode=True 更改填充。

在 ceil 模式的情况下,会在右侧和下方添加额外的列和行。(不是顶部也不是左侧)。它不需要是一个额外的列。这也取决于步幅值。我刚刚编写了小代码片段,您可以在其中检查填充值如何在任一模式下汇集。

在我找到上面引用的帖子之前,我对你的问题进行了同样的实验,似乎在池操作期间没有使用零填充,在我下面的示例中,零将是要采用的最大元素,但似乎并非如此。

    test_tensor = torch.FloatTensor(2,7,7).random_(-10,-5)
    print(test_tensor)
    max_pool = nn.MaxPool2d(kernel_size=2, stride=2, ceil_mode=True)
    print(max_pool(test_tensor))
    max_pool = nn.MaxPool2d(kernel_size=2, stride=2, ceil_mode=False)
    print(max_pool(test_tensor))

随机样本张量:

    tensor([[[ -6.,  -9.,  -7., -10.,  -6.,  -8.,  -6.],
             [-10., -10., -10.,  -6., -10.,  -9.,  -6.],
             [-10.,  -7.,  -7.,  -8., -10., -10.,  -9.],
             [ -8., -10., -10.,  -9.,  -9., -10.,  -9.],
             [ -8.,  -6.,  -8.,  -6.,  -7.,  -7.,  -9.],
             [-10.,  -8.,  -7., -10.,  -9.,  -6.,  -8.],
             [-10.,  -6.,  -9., -10.,  -9.,  -9., -10.]],

            [[-10.,  -8.,  -6., -10.,  -9.,  -6.,  -7.],
             [ -7.,  -7., -10., -10.,  -6.,  -9.,  -7.],
             [ -6., -10.,  -7.,  -8.,  -8., -10.,  -9.],
             [ -8.,  -8.,  -6.,  -7.,  -6.,  -8.,  -6.],
             [ -9.,  -8.,  -7., -10.,  -8.,  -8.,  -7.],
             [-10., -10.,  -6.,  -9.,  -8.,  -8.,  -8.],
             [-10.,  -6.,  -9.,  -9.,  -7.,  -9., -10.]]])

ceil_mode=真


    tensor([[[ -6.,  -6.,  -6.,  -6.],
             [ -7.,  -7.,  -9.,  -9.],
             [ -6.,  -6.,  -6.,  -8.],
             [ -6.,  -9.,  -9., -10.]],

            [[ -7.,  -6.,  -6.,  -7.],
             [ -6.,  -6.,  -6.,  -6.],
             [ -8.,  -6.,  -8.,  -7.],
             [ -6.,  -9.,  -7., -10.]]])

ceil_mode=假

    tensor([[[-6., -6., -6.],
             [-7., -7., -9.],
             [-6., -6., -6.]],

            [[-7., -6., -6.],
             [-6., -6., -6.],
             [-8., -6., -8.]]])

于 2020-02-11T14:31:33.273 回答