Они по сути одинаковы. Разница в том, что 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))
)