def test_objective(self):
log_qx = stats.norm.logpdf(self._n01_samples).astype(np.float32)
qx_samples = tf.convert_to_tensor(self._n01_samples)
log_qx = tf.convert_to_tensor(log_qx)
def _check_elbo(x_mean, x_std):
# check their elbo
def log_joint(observed):
norm = Normal(mean=x_mean, std=x_std)
return norm.log_prob(observed['x'])
lower_bound = elbo(log_joint, observed={},
latent={'x': [qx_samples, log_qx]}, axis=0)
analytic_lower_bound = -_kl_normal_normal(0., 1., x_mean, x_std)
with self.test_session(use_gpu=True) as sess:
a = sess.run(lower_bound)
b = sess.run(analytic_lower_bound)
# print(a, b)
self.assertNear(a, b, 1e-2)
_check_elbo(0., 1.)
_check_elbo(2., 3.)
评论列表
文章目录