You are recreating modules inside the forward method of netG, which won’t register them during the model creation and will reinitialize these modules with random values in each forward pass, which is most likely not what you want.
Create all modules in netG.__init__ and use them in netG.forward as:
class netG(nn.Module):
  def __init__(self,channel_rate=64,drop_rate=0.0):
    super(netG, self).__init__()
    self.channel_rate = channel_rate
    self.nChannels = 4*self.channel_rate
    self.drop_rate = drop_rate
    self.dilation_factor = 1
    self.head = nn.Conv2d(3,4*self.channel_rate,3,1,1)
    self.dense_block = nn.Sequential(...)
    self.tail = nn.Sequential(...)
    self.last_layer = nn.Sequential(...)

def forward(self, x):
    x = self.head(x)
    ...
    x = self.dense_block(x)
    ...