The conv and batchnorm modules look alright.
In your current forward pass you are reinitializing these modules in each iteration, so you should create these modules in Net.__init__.
However, I’m currently not sure why you are reimplementing the conv and batchnorm modules instead of directly using the PyTorch implementations.
Your current approach uses the functional API in the conv and batchnorm layers, which is also the case for e.g. nn.Conv2d.
If you want to use only the functional API, you should create the parameters and buffers e.g. in Net.__init__ and use them in forward via e.g. F.conv2d.