Hi,
In case of implementing repetitive blocks, you can set up an entry block and sequential repetitive blocks after the entry block. Implementing it as a module would be :
class Conv_rep(nn.Module):
      def __init__(self, in_channels, out_channels,num_reps, kernel_size=3, stride=1,
                 padding=1, dilation=1, bias=False):
               
           super(Conv_rep,self).__init__(in_channels, out_channels,num_reps, kernel_size, 
                                       stride, padding, dilation,bias)

           self.conv_entry=nn.Conv2d(in_channels=in_channels,out_channels=out_channels,
                           kernel_size=kernel_size,stride=stride,padding=padding)
           self.conv_rep=nn.Conv2d(in_channels=out_channels,out_channels=out_channels,
                           kernel_size=kernel_size,stride=stride,padding=padding)
           self.num_reps=num_reps
      
      def forward(self,x):
           
           x_rep=self.conv_entry(x)
           
           for i in range(1,self.num_rep):
                   x_rep=self.conv_rep(x_rep)
           return x_rep

Note that I haven’t added activations or Batch Normalization as nothing of that sort was mentioned, but you should add them according to your model and use-case [as I see you haven’t used activations in your ‘Net’ module]