Hello, I followed the instructions for the basic Gaussian process regression example on the docs website (Gaussian Processes — Pyro Tutorials 1.8.4 documentation) and I get predictions on new data that are all the same regardless of the input data. There is no clear example on the website of how to make predictions with new data so I am not sure if I have some error related to that. Here is my full code
import pyro # type: ignore
import pyro.contrib.gp as gp # type: ignore
import torch
from torch.utils.data import DataLoader
from tqdm import tqdm, trange # type: ignore
from .dataloader import GPLoader
device = torch.device("cuda:1")
def train() -> None:
dataset = GPLoader(["2017"], device)
kernel = gp.kernels.RBF(input_dim=707)
gpr = gp.models.GPRegression(
dataset.x.to(device), dataset.y.squeeze(1).to(device), kernel
).to(device)
optimizer = torch.optim.Adam(gpr.parameters(), lr=5)
loss_fn = pyro.infer.Trace_ELBO().differentiable_loss
loss_log = tqdm(desc="Losses", leave=False, position=1)
for i in trange(100, desc="Iter", position=0, leave=False):
optimizer.zero_grad()
loss = loss_fn(gpr.model, gpr.guide)
loss.backward()
loss_log.set_description(f"loss: {loss.item()}")
optimizer.step()
test_set = GPLoader(["2017"], device)
dataloader = DataLoader(test_set, batch_size=16)
for i, (x, y) in enumerate(tqdm(dataloader, desc="Test", leave=False, position=1)):
mu, sigma = gpr(x)
print(mu, sigma)
Does anyone see anything wrong in this code?