the issue should be clearly explained in the title and this piece of code

the only if condition was never met

```
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import numpy as np
dtype = torch.float32
X = torch.tensor([[1, 2, 3, 4, 5, 6]], dtype=dtype)
Y = torch.tensor([[1, 4, 9, 16, 25, 36]], dtype=dtype)
class Model(nn.Module):
def __init__(self):
super(Model, self).__init__()
self.l1 = torch.nn.Linear(6, 6)
self.l2 = torch.nn.Linear(6, 6)
self.l3 = torch.nn.Linear(6, 6)
self.l4 = torch.nn.Linear(6, 6)
def forward(self, x):
x1 = self.l1(x)
x1 = F.relu(x1)
x1 = self.l2(x1)
x2 = x1
x2 = F.relu(x2)
print('l2 inside forward before assignment', self.l3.weight[2, 3])
self.l3.weight = nn.Parameter(x1.repeat(6, 1)) # this is the cause
print('l2 inside forward after assignment', self.l3.weight[2, 3])
x2 = self.l3(x2)
x2 = F.relu(x2)
x2 = self.l4(x2)
return x2, x1
model = Model()
optimizer = optim.SGD(model.parameters(), lr=.05, momentum=0.9) # model.parameters()
Loss = nn.MSELoss()
n_iters = 100
for epoch in range(n_iters):
optimizer.zero_grad()
y_pred, x1 = model(X)
loss = Loss(y_pred, Y)
print('l2 outside forward', model.l3.weight[2, 3])
e = torch.tensor(np.array(model.l3.weight.data.detach()))
loss.backward()
optimizer.step()
print('l2 after backward and step', model.l3.weight[2, 3])
print('e l2 after backward and step', e[2, 3])
if torch.all(torch.eq(e, model.l3.weight.data)) == False: # to check if any parameter has changed
print('something has changed in l3 :)')
print('')
```