I am running into this problem again and again:
Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.FloatTensor []], which is output 0 of AsStridedBackward0, is at version 1; expected version 0 instead. Hint: the backtrace further above shows the operation that failed to compute its gradient. The variable in question was changed in there or anywhere later. Good luck!
The code as shown by the backtrace is the following-
v = self.id_tensor_list(self.d)
S_n = 0
for i in range(self.d):
S_n = S_n + torch.mul(torch.diag(v[i]), torch.exp(self.phi[i][2] * torch.log(torch.exp(self.phi[i][3]) + self.Y[n][i])))
return S_n
The backtrace tells me that the line
S_n = S_n + torch.mul(torch.diag(v[i]), torch.exp(self.phi[i][2] * torch.log(torch.exp(self.phi[i][3]) + self.Y[n][i])))
operation is the issue, but I don’t understand how is this an inplace operation?
v is a list of tensors, Y is a tensor, phi is a tensor with requires_grad=true
How do I fix this issue?