def testBijector(self): loc = 0.3 scale = 5. concentration = np.array([[[-5.5], [-20], [0.], [1.]]], dtype=np.float32) bijector = tfb.GeneralizedExtremeValueCDF(loc=loc, scale=scale, concentration=concentration, validate_args=True) self.assertStartsWith(bijector.name, "generalizedextremevalue") x = np.array([[[0.], [-3.], [0.], [4.2]]], dtype=np.float32) # GeneralizedExtremeValue distribution gev_dist = stats.genextreme(-concentration, loc=loc, scale=scale) y = gev_dist.cdf(x).astype(np.float32) self.assertAllClose(y, self.evaluate(bijector.forward(x))) self.assertAllClose(x, self.evaluate(bijector.inverse(y))) self.assertAllClose( np.squeeze(gev_dist.logpdf(x), axis=-1), self.evaluate(bijector.forward_log_det_jacobian(x, event_ndims=1))) self.assertAllClose( self.evaluate( -bijector.inverse_log_det_jacobian(y, event_ndims=1)), self.evaluate(bijector.forward_log_det_jacobian(x, event_ndims=1)), rtol=1e-4, atol=0.)
def testScalarCongruency(self): bijector_test_util.assert_scalar_congruency( tfb.GeneralizedExtremeValueCDF(loc=0.3, scale=20., concentration=0.2), lower_x=1., upper_x=100., eval_func=self.evaluate, rtol=0.05)
def testVariableScale(self): x = tf.Variable(1.) b = tfb.GeneralizedExtremeValueCDF(loc=0., scale=x, concentration=0.6, validate_args=True) self.evaluate(x.initializer) self.assertIs(x, b.scale) self.assertEqual((), self.evaluate(b.forward(1.)).shape) with self.assertRaisesOpError("Argument `scale` must be positive."): with tf.control_dependencies([x.assign(-1.)]): self.evaluate(b.forward(2.))
def testBijectiveAndFinite(self): bijector = tfb.GeneralizedExtremeValueCDF(loc=0., scale=3.0, concentration=2.0, validate_args=True) x = np.linspace(-1.4, 10., num=10).astype(np.float32) y = np.linspace(0.01, 0.99, num=10).astype(np.float32) bijector_test_util.assert_bijective_and_finite(bijector, x, y, eval_func=self.evaluate, event_ndims=0, rtol=1e-3)