Convolutional layers remain important for computer vision problems even after the transformer revolution, so they are important to have: - [ ] [Conv2d](https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html) - [ ] [ConvTranspose2d](https://pytorch.org/docs/stable/generated/torch.nn.ConvTranspose2d.html) For these, we need to address https://github.com/pymc-devs/pytensor/pull/548 In addition, convolutional network designs typically include some kind of pooling layers: - [ ] [MaxPool2d](https://pytorch.org/docs/stable/generated/torch.nn.MaxPool2d.html) - [ ] [AvgPool2d](https://pytorch.org/docs/stable/generated/torch.nn.AvgPool2d.html) - [ ] [MaxUnpool2d](https://pytorch.org/docs/stable/generated/torch.nn.MaxUnpool2d.html#torch.nn.MaxUnpool2d) As well as helpers for padding images to the correct size: - [ ] [ReflectionPad2d](https://pytorch.org/docs/stable/generated/torch.nn.ReflectionPad2d.html#torch.nn.ReflectionPad2d) - [ ] [ReplicationPad2d](https://pytorch.org/docs/stable/generated/torch.nn.ReplicationPad2d.html#torch.nn.ReplicationPad2d) - [ ] [ZeroPad2d](https://pytorch.org/docs/stable/generated/torch.nn.ZeroPad2d.html#torch.nn.ZeroPad2d) - [ ] [ConstantPad2d](https://pytorch.org/docs/stable/generated/torch.nn.ConstantPad1d.html#torch.nn.ConstantPad1d) A `pt.pad` function would be nice for implementing these; I opened an issue for that here https://github.com/pymc-devs/pytensor/issues/743