No. I tend to use the functional variants, F.max_pool2d and friends.
No, as long as both uses require the same options for the pooling you can reuse the same object. You could also use a conv object twice, but then it would use the same weights both times, which is generally not what you want.




 badseed:

So as long as an object does not have a parameter to be updated we don’t need to include it as a class member.


Correct. Note that even when an object has learnable parameters it doesn’t necessarily have to be a class member, you can register it manually using self.add_module("name", object).
The pooling layers listed in the docs don’t have parameters, and as far as I can tell, the only activation listed in the docs that has a learnable parameter is PReLU. The various normalisation layers have learnable params if they are initialised with the affine=True option.