首页 > 解决方案 > nn.MaxPool2d 与 nn.functional.max_pool2d 之间的区别?

问题描述

nn.MaxPool2d(kernel_size, stride)和有什么区别nn.functional.max_pool2d(t, kernel_size, stride)

我在模块中定义的第一个和转发函数中的第二个?

谢谢

标签: pythonmodulepytorchforward

解决方案


它们本质上是相同的。不同之处在于它torch.nn.MaxPool2d是一个显式nn.Module调用torch.nn.functional.max_pool2d()它自己的forward()方法。

您可以在torch.nn.MaxPool2d此处查看源代码并亲自查看调用:https ://pytorch.org/docs/stable/_modules/torch/nn/modules/pooling.html#MaxPool2d

转载如下:

def forward(self, input):
        return F.max_pool2d(input, self.kernel_size, self.stride,
                            self.padding, self.dilation, self.ceil_mode,
                            self.return_indices)

为什么同一任务有两种方法?我想这适合许多可能使用 PyTorch 的人的编码风格。有些人更喜欢有状态的方法,而另一些人则更喜欢功能性更强的方法。

例如,拥有torch.nn.MaxPool2d意味着我们可以很容易地将它放入一个nn.Sequential块中。

model = nn.Sequential(
          nn.Conv2d(1,3,3),
          nn.ReLU(),
          nn.MaxPool2d((2, 2))
        )

推荐阅读