Even if EPOCHS
is not 1, the loop only runs once. A little bit of effort showed that python quits at the line loss = torch.tensor(0, dtype=torch.float, device=device)
on the second run. Even more strangely, I tried adding del loss
at the end of the loop and once that was run, python exited immediately. Another person trying running my code and it worked fine but his computer uses Linux and does not have a GPU. Does anyone know how to make the loop run for the full EPOCH
times?
# main training loop
for i in range(EPOCHS):
xs, ts, vs, ws = generateTrajectory()
# move tensors in list to GPU
# change dtype and add batch dimension
xs = list(map(lambda x: x.unsqueeze(0).to(device, torch.float), xs))
vs = list(map(lambda v: v.unsqueeze(0).to(device, torch.float), vs))
# convert to 1x1 torch tensors
ws = list(map(
lambda w: torch.tensor([[w]], dtype=torch.float, device=device), ws))
ts = list(map(
lambda t: torch.tensor([[t]], dtype=torch.float, device=device), ts))
superlist = zip(xs, ts, vs, ws)
loss = torch.tensor(0, dtype=torch.float, device=device)
# initialize hidden, cell vectors
hidden, cell = gridnet.init_hidden_cell(vs[0], ws[0])
for x, t, v, w in superlist:
guess, hidden, cell = gridnet(v, w, hidden, cell)
ground_truth = torch.cat([x, t], dim=1)
loss += loss_fn(guess, ground_truth)
print(loss)
optimizer.zero_grad()
loss.backward()
optimizer.step()