def testGaussianProcessPrior(self): batch_size = 3 input_dim = 4 output_dim = 5 features = tf.to_float(np.random.rand(batch_size, input_dim)) labels = tf.to_float(np.random.rand(batch_size, output_dim)) model = tf.keras.Sequential([ tf.keras.layers.Dense(2, activation=None), bayes.GaussianProcess(output_dim), ]) outputs = model(features) log_prob = outputs.distribution.log_prob(labels) self.evaluate(tf.global_variables_initializer()) log_prob_val, outputs_val = self.evaluate([log_prob, outputs]) self.assertEqual(log_prob_val.shape, ()) self.assertLessEqual(log_prob_val, 0.) self.assertEqual(outputs_val.shape, (batch_size, output_dim))
def testGaussianProcessPosterior(self): train_batch_size = 3 test_batch_size = 2 input_dim = 4 output_dim = 5 features = tf.to_float(np.random.rand(train_batch_size, input_dim)) labels = tf.to_float(np.random.rand(train_batch_size, output_dim)) layer = bayes.GaussianProcess(output_dim, conditional_inputs=features, conditional_outputs=labels) test_features = tf.to_float(np.random.rand(test_batch_size, input_dim)) test_labels = tf.to_float(np.random.rand(test_batch_size, output_dim)) test_outputs = layer(test_features) test_nats = -test_outputs.distribution.log_prob(test_labels) self.evaluate(tf.global_variables_initializer()) test_nats_val, outputs_val = self.evaluate([test_nats, test_outputs]) self.assertEqual(test_nats_val.shape, ()) self.assertGreaterEqual(test_nats_val, 0.) self.assertEqual(outputs_val.shape, (test_batch_size, output_dim))