Hi, Thanks again!
Will this be the right way to do that? Here I have created variable for both operations ###1 and ###2
def __init__(self):
    super(MyModel, self).__init__()
    self.linear = nn.Linear(2, 2)

def forward(self, x):
    weight = F.normalize(self.linear.weight)                  ### 1
    out = torch.mm(x, weight.t()) + self.linear.bias
    weight = F.normalize(weight)                              ### 2
    return out

Will this be the same as that of first ###1 in place operation followed by creating a new parameter for ###2 operation.
def __init__(self):
    super(MyModel, self).__init__()
    self.linear = nn.Linear(2, 2)

def forward(self, x):
    with torch.no_grad():                     ### 1
            self.classifier[0].weight.div_(torch.norm(self.classifier[0].weight, dim=1, keepdim=True))
    out = torch.mm(x, weight.t()) + self.linear.bias
    weight = F.normalize(weight)             ### 2
    return out

Thanks,