'Pytorch: weights not updating, using dual network
I hope you can help. I am designing a controller for a system, where the controller NN is trained using an imported NN I made, which is the state space representation of the system.
But it seems the weights are not updating on each epoch, I have attached the code below:
This is my defined controller:
class Net(nn.Module):
def __init__(self, n1, n2, n3):
super().__init__()
self.fc1 = nn.Linear((10 * 2), n1)
self.fc2 = nn.Linear(n1, n2)
self.fc3 = nn.Linear(n2, n3)
self.fc4 = nn.Linear(n3, 1)
def forward(self, x):
x = F.gelu(self.fc1(x))
x = F.gelu(self.fc2(x))
x = F.gelu(self.fc3(x))
x = F.gelu(self.fc4(x))
return x
below is my training loop:
LR = 0.001
w_decay = 0.005
optimizer = optim.SGD(dpc.parameters(), lr=LR, weight_decay=w_decay)
EPOCHS = 50
batch = 2
print(‘Training network…’)
dpc.train(mode=True)
for epoch in range(EPOCHS):
for dd in range(0, len(x_train) - batch):
X = x_train[dd:dd + batch]
optimizer.zero_grad()
output = dpc(X)
input_ssm = X.detach().numpy()
input_ssm = input_ssm.tolist()
input_ssm[0].append(output.detach().numpy().tolist()[0][0])
input_ssm[1].append(output.detach().numpy().tolist()[1][0])
input_ssm = np.array(input_ssm)
input_ssm = torch.Tensor(input_ssm)
y = ss_model(input_ssm)
y = (y*(max_a[1][0] - min_a[1][0])) + min_a[1][0]
desired = np.array([[0], [0]])
desired = torch.Tensor(desired)
loss = (F.mse_loss(y, desired))
combined_loss += loss
loss.backward()
optimizer.step()
Many thanks.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
