Hi,

I’m having difficulties understanding how to declare the forward pass of a function that computes steps of a dynamical system one at a time (each step depends on the previous value). At the moment I’m declaring an empty tensor and then use a loop to update the values, although autograd is not able to compute the gradients as it detects in-place operations.

I have created a snippet of code to show the function and reproduce the error using the `grad`

function.

Any help with making this work or suggesting alternatives would be greatly appreciated.

Thanks,

Pablo

```
import torch
from torch import nn
class Dyn(nn.Module):
def __init__(self):
super(Dyn, self).__init__()
def forward(self, z0, params):
with torch.no_grad():
out = torch.empty(10,2, requires_grad=True)
out[0] = z0
for i in range(9):
out[i+1] = out[i] + 0.5*torch.mv(params.view(2,2), out[i])
return out
#return (z0+0.5*torch.mv(params.view(2,2), z0)).repeat(10,1)
z1 = torch.Tensor([-1., -1.])
z0 = torch.tensor([0.6, 0.3], requires_grad=True)
params = torch.randn(4, requires_grad=True)/2.
dyn = Dyn()
sol = torch.tensor([[-0.3600, 0.5700],
[-0.6270, 0.3615],
[-0.7764, 0.0299],
[-0.7525, -0.3598],
[-0.5350, -0.7181],
[-0.1493, -0.9497],
[ 0.3330, -0.9768],
[ 0.8048, -0.7614],
[ 1.1453, -0.3210],
[ 1.2485, 0.2677]])
pred = dyn(z0, params)
torch.autograd.grad(pred-sol, params, grad_outputs=torch.ones(10,2))
```