def test_vgp_update_updates_num_data() -> None: x_np = np.arange(5, dtype=np.float64).reshape(-1, 1) x = tf.convert_to_tensor(x_np, x_np.dtype) y = _3x_plus_10(x) m = VariationalGaussianProcess(_vgp(x, y)) num_data = m.model.num_data x_new = tf.concat([x, [[10.0], [11.0]]], 0) y_new = _3x_plus_10(x_new) m.update(Dataset(x_new, y_new)) new_num_data = m.model.num_data assert new_num_data - num_data == 2
def test_vgp_update_q_mu_sqrt_unchanged() -> None: x_observed = tf.constant(np.arange(10).reshape((-1, 1)), dtype=gpflow.default_float()) y_observed = _2sin_x_over_3(x_observed) model = VariationalGaussianProcess(_vgp_matern(x_observed, y_observed)) old_q_mu = model.model.q_mu.numpy() old_q_sqrt = model.model.q_sqrt.numpy() data = Dataset(x_observed, y_observed) model.update(data) new_q_mu = model.model.q_mu.numpy() new_q_sqrt = model.model.q_sqrt.numpy() npt.assert_allclose(old_q_mu, new_q_mu, atol=1e-5) npt.assert_allclose(old_q_sqrt, new_q_sqrt, atol=1e-5)
def test_variational_gaussian_process_predict() -> None: x_observed = tf.constant(np.arange(100).reshape((-1, 1)), dtype=gpflow.default_float()) y_observed = _3x_plus_gaussian_noise(x_observed) model = VariationalGaussianProcess(_vgp(x_observed, y_observed)) internal_model = model.model gpflow.optimizers.Scipy().minimize( internal_model.training_loss_closure(), internal_model.trainable_variables, ) x_predict = tf.constant([[50.5]], gpflow.default_float()) mean, variance = model.predict(x_predict) reference_model = _reference_gpr(x_observed, y_observed) gpflow.optimizers.Scipy().minimize( reference_model.training_loss_closure(), reference_model.trainable_variables, ) reference_mean, reference_variance = reference_model.predict_f(x_predict) npt.assert_allclose(mean, reference_mean) npt.assert_allclose(variance, reference_variance, atol=1e-3)