I have training process follows the following high level procedures
optimizer = optim.Adam(nn.parameters(), lr=lr) # where nn is a neural network
x = data.draw() # draw some sample points
y = nn(x) # forward in neural network
dy = torch.autograd.grad(y.split(1),[x])[0] # compute the gradients w.r.t. sample x
loss = func(dy) # define loss function based on dy
However, when the calling
loss.backward() # here raise error
The error is
RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn
Which is little weird because dy
depends on y
which depends nn.parameters()
. This gradient should be valid exists.
is there anyway to fix it?