I have a model that implements a latent GP as follows (relevant code shown), which later gets indexed appropriately and added into the rest of the model:
class MyModel(PyroModule);
def __init__(self):
...
self.K = gp.kernels.RBF(input_dim=1, variance=self.amp, lengthscale=self.ls)
cov_beta = self.K(torch.DoubleTensor(days).to(device))
cov_beta.view(-1)[:: self.game_days.shape[0] + 1] += jitter
self.Lff_beta = cov_beta.cholesky().detach()
...
def forward(self, X, y):
...
f = pyro.sample("f",
MultivariateNormal(
torch.zeros_like(self.all_days).to(device),
scale_tril=self.Lff_beta
))
...
theta = mu[player_index]
theta += f[day_index]
theta += g[venue_index, day_index]
...
This model fits just fine using SVI, but when I later go to predict (Note that data
is the same that is used to fit the model (the last element is the response data y
, so it is left out of the predict):
predictive = pyro.infer.Predictive(model, guide=guide, num_samples=1000, return_sites=("f",))
samples = predictive(*data[:-1])
the call to predictive
fails:
524 # Expected value
525 theta = mu[player_index]
--> 526 theta += f[day_index]
527 theta += g[venue_index, day_index]
IndexError: index 90 is out of bounds for dimension 0 with size 1
It seems like something different is happening to the shape of the MutlivariateNormal when using Predictive
. Is this true, or am I doing something wrong?