:nn.MaxPool2d(kernel_size, stride)
和nn.functional.max_pool2d(t, kernel_size, stride)
有什么区别?
第一个是在模块中定义的,第二个是在forward函数中定义的。
谢谢
发布于 2019-10-23 09:40:21
它们本质上是相同的。不同之处在于,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))
)
https://stackoverflow.com/questions/58514197
复制相似问题