def test_mean_function_VSGP(): X, y, Xnew, ynew, kernel, mean_fn = _pre_test_mean_function() Xu = X[::20].clone() likelihood = Gaussian() model = VariationalSparseGP(X, y, kernel, Xu, likelihood, mean_function=mean_fn) model.optimize(optim.Adam({"lr": 0.02})) _post_test_mean_function(model, Xnew, ynew)
def test_mean_function_VSGP(): X, y, Xnew, ynew, kernel, mean_fn = _pre_test_mean_function() Xu = X[::20].clone() likelihood = Gaussian() gpmodule = VariationalSparseGP(X, y, kernel, Xu, likelihood, mean_function=mean_fn) optimizer = torch.optim.Adam(gpmodule.parameters(), lr=0.02) train(gpmodule, optimizer) _post_test_mean_function(gpmodule, Xnew, ynew)
def test_inference_whiten_vsgp(): N = 1000 X = dist.Uniform(torch.zeros(N), torch.ones(N)*5).sample() y = 0.5 * torch.sin(3*X) + dist.Normal(torch.zeros(N), torch.ones(N)*0.5).sample() kernel = RBF(input_dim=1) Xu = torch.arange(0, 5.5, 0.5) vsgp = VariationalSparseGP(X, y, kernel, Xu, Gaussian(), whiten=True) vsgp.optimize(optim.Adam({"lr": 0.01}), num_steps=1000) Xnew = torch.arange(0, 5.05, 0.05) loc, var = vsgp(Xnew, full_cov=False) target = 0.5 * torch.sin(3*Xnew) assert_equal((loc - target).abs().mean().item(), 0, prec=0.07)
def test_inference_deepGP(): gp1 = GPRegression( X, None, RBF(input_dim=3, variance=torch.tensor(3.), lengthscale=torch.tensor(2.))) Z, _ = gp1.model() gp2 = VariationalSparseGP(Z, y2D, Matern32(input_dim=3), Z.clone(), Gaussian(torch.tensor(1e-6))) class DeepGP(torch.nn.Module): def __init__(self, gp1, gp2): super(DeepGP, self).__init__() self.gp1 = gp1 self.gp2 = gp2 def model(self): Z, _ = self.gp1.model() self.gp2.set_data(Z, y2D) self.gp2.model() def guide(self): self.gp1.guide() self.gp2.guide() deepgp = DeepGP(gp1, gp2) train(deepgp, num_steps=1)
def test_inference_vsgp(): N = 1000 X = dist.Uniform(torch.zeros(N), torch.ones(N)*5).sample() y = 0.5 * torch.sin(3*X) + dist.Normal(torch.zeros(N), torch.ones(N)*0.5).sample() kernel = RBF(input_dim=1) Xu = torch.arange(0., 5.5, 0.5) vsgp = VariationalSparseGP(X, y, kernel, Xu, Gaussian()) optimizer = torch.optim.Adam(vsgp.parameters(), lr=0.03) train(vsgp, optimizer) Xnew = torch.arange(0., 5.05, 0.05) loc, var = vsgp(Xnew, full_cov=False) target = 0.5 * torch.sin(3*Xnew) assert_equal((loc - target).abs().mean().item(), 0, prec=0.06)
def test_inference_whiten_vsgp(): N = 1000 X = dist.Uniform(torch.zeros(N), torch.ones(N) * 5).sample() y = 0.5 * torch.sin(3 * X) + dist.Normal(torch.zeros(N), torch.ones(N) * 0.5).sample() kernel = RBF(input_dim=1) Xu = torch.arange(0, 5.5, 0.5) vsgp = VariationalSparseGP(X, y, kernel, Xu, Gaussian(), whiten=True) vsgp.optimize(optim.Adam({"lr": 0.01}), num_steps=1000) Xnew = torch.arange(0, 5.05, 0.05) loc, var = vsgp(Xnew, full_cov=False) target = 0.5 * torch.sin(3 * Xnew) assert_equal((loc - target).abs().mean().item(), 0, prec=0.07)
def test_inference_deepGP(): gp1 = GPRegression(X, None, kernel, name="GPR1") Z, _ = gp1.model() gp2 = VariationalSparseGP(Z, y2D, Matern32(input_dim=3), Z.clone(), likelihood, name="GPR2") def model(): Z, _ = gp1.model() gp2.set_data(Z, y2D) gp2.model() def guide(): gp1.guide() gp2.guide() svi = SVI(model, guide, optim.Adam({}), Trace_ELBO()) svi.step()