def testBijector(self): with self.test_session(): exp = exp_lib.Exp(event_ndims=1) inline = inline_lib.Inline( forward_fn=math_ops.exp, inverse_fn=math_ops.log, inverse_log_det_jacobian_fn=( lambda y: -math_ops.reduce_sum( # pylint: disable=g-long-lambda math_ops.log(y), reduction_indices=-1)), forward_log_det_jacobian_fn=( lambda x: math_ops.reduce_sum(x, reduction_indices=-1)), name="exp") self.assertEqual(exp.name, inline.name) x = [[[1., 2.], [3., 4.], [5., 6.]]] y = np.exp(x) self.assertAllClose(y, inline.forward(x).eval()) self.assertAllClose(x, inline.inverse(y).eval()) self.assertAllClose( -np.sum(np.log(y), axis=-1), inline.inverse_log_det_jacobian(y).eval()) self.assertAllClose(-inline.inverse_log_det_jacobian(y).eval(), inline.forward_log_det_jacobian(x).eval()) rev, jac = inline.inverse_and_inverse_log_det_jacobian(y) self.assertAllClose(x, rev.eval()) self.assertAllClose(-np.sum(np.log(y), axis=-1), jac.eval())
def testScalarCongruency(self): with self.test_session(): bijector = exp_lib.Exp() bijector_test_util.assert_scalar_congruency(bijector, lower_x=-2., upper_x=1.5, rtol=0.05)
def testScalarCongruency(self): with self.test_session(): bijector = chain_lib.Chain( (exp_lib.Exp(), softplus_lib.Softplus())) bijector_test_util.assert_scalar_congruency(bijector, lower_x=1e-3, upper_x=1.5, rtol=0.05)
def testBijector(self): with self.test_session(): chain = chain_lib.Chain((exp_lib.Exp(event_ndims=1), softplus_lib.Softplus(event_ndims=1))) self.assertEqual("chain_of_exp_of_softplus", chain.name) x = np.asarray([[[1., 2.], [2., 3.]]]) self.assertAllClose(1. + np.exp(x), chain.forward(x).eval()) self.assertAllClose(np.log(x - 1.), chain.inverse(x).eval()) self.assertAllClose(-np.sum(np.log(x - 1.), axis=2), chain.inverse_log_det_jacobian(x).eval()) self.assertAllClose(np.sum(x, axis=2), chain.forward_log_det_jacobian(x).eval())
def testBijector(self): with self.test_session(): bijector = exp_lib.Exp(event_ndims=1) self.assertEqual("exp", bijector.name) x = [[[1.], [2.]]] y = np.exp(x) self.assertAllClose(y, bijector.forward(x).eval()) self.assertAllClose(x, bijector.inverse(y).eval()) self.assertAllClose( -np.sum(np.log(y), axis=-1), bijector.inverse_log_det_jacobian(y).eval()) self.assertAllClose(-bijector.inverse_log_det_jacobian(np.exp(x)).eval(), bijector.forward_log_det_jacobian(x).eval())
def testBijectiveAndFinite(self): with self.test_session(): bijector = exp_lib.Exp(event_ndims=0) x = np.linspace(-10, 10, num=10).astype(np.float32) y = np.logspace(-10, 10, num=10).astype(np.float32) bijector_test_util.assert_bijective_and_finite(bijector, x, y)