Разница между nn.MaxPool2d и nn.functional.max_pool2d? - PullRequest
0 голосов
/ 23 октября 2019

В чем разница между: nn.MaxPool2d (kernel_size, stride) и nn.functional.max_pool2d (t, kernel_size, stride)?

Первый, который я определяю в модуле, и второй ввперед функция?

Спасибо

1 Ответ

2 голосов
/ 23 октября 2019

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