Hi, I’m trying to implement an autoregressive time series model by creating an initial tensor of zeros called motion
and then filling in the value of each element in the tensor using a for loop
. But I’m getting an error when training that says: ‘one of the variables needed for gradient computation has been modified by an inplace operation: [torch.FloatTensor []], which is output 0 of AsStrideBackward0…’
I think this error has something to do with filling the value of the tensor motion
in a for loop, but I’m not sure if there’s a better way to do the computation that avoids the error? I know that for loops and other arbitrary Python control flows are possible in probabilistic models. Is there a good way to implement these computations without the gradient error? The relevant code in the model is below.
# - Local trend component.
# Prior for time-global scale.
drift_scale = pyro.sample('drift_scale', dist.HalfNormal(25).expand([data_dim]).to_event(1))
with pyro.plate('time', len(data), dim=-1):
drift = pyro.sample('drift', dist.Normal(0, drift_scale).to_event(1))
# Initialize motion tensor.
motion = torch.zeros(len(drift) + 1)
# Autoregressive coefficient.
rho = pyro.sample('rho', dist.Uniform(-1, 1))
for i in range(len(drift)):
motion[i+1] = motion[i] * rho * drift[i]
motion = motion[1:].unsqueeze(-1) # drop initial state and add data dimenion of size 1