예제 #1
0
 def testAsserts(self):
     with self.assertRaisesOpError('Argument `scale` must be positive.'):
         b = tfb.WeibullCDF(concentration=1., scale=-1., validate_args=True)
         self.evaluate(b.forward(3.))
     with self.assertRaisesOpError(
             'Argument `concentration` must be positive.'):
         b = tfb.WeibullCDF(concentration=-1., scale=1., validate_args=True)
         self.evaluate(b.inverse(0.5))
예제 #2
0
 def testScalarCongruency(self):
     bijector_test_util.assert_scalar_congruency(tfb.WeibullCDF(
         scale=20., concentration=0.3),
                                                 lower_x=1.,
                                                 upper_x=100.,
                                                 eval_func=self.evaluate,
                                                 rtol=0.05)
예제 #3
0
 def testBijectorConcentration1LogDetJacobianFiniteAtZero(self):
   # When concentration = 1., forward_log_det_jacobian should be finite at
   # zero.
   scale = np.logspace(0.1, 10., num=20).astype(np.float32)
   bijector = tfb.WeibullCDF(scale, concentration=1.)
   fldj = self.evaluate(bijector.forward_log_det_jacobian(0., event_ndims=0))
   self.assertAllEqual(np.ones_like(fldj, dtype=np.bool_), np.isfinite(fldj))
예제 #4
0
 def testBijectiveAndFinite(self):
   bijector = tfb.WeibullCDF(scale=20., concentration=2., validate_args=True)
   x = np.linspace(1., 8., num=10).astype(np.float32)
   y = np.linspace(
       -np.expm1(-1 / 400.),
       -np.expm1(-16), 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)
예제 #5
0
 def testVariableAssertsScale(self):
   concentration = tf.Variable(1.)
   scale = tf.Variable(1.)
   b = tfb.WeibullCDF(
       concentration=concentration, scale=scale, validate_args=True)
   self.evaluate([concentration.initializer, scale.initializer])
   with self.assertRaisesOpError('Argument `scale` must be positive.'):
     with tf.control_dependencies([scale.assign(-1.)]):
       self.evaluate(b.forward(3.))
예제 #6
0
 def testVariableAssertsScale(self):
     concentration = tf.Variable(1.)
     scale = tf.Variable(1.)
     b = tfb.WeibullCDF(concentration=concentration,
                        scale=scale,
                        validate_args=True)
     # Use identities so that static asserts don't catch the error earlier
     # and raise 'Forward transformation input must be at least 0'
     minus_1 = tf.identity(tf.convert_to_tensor(-1.))
     minus_3 = tf.identity(tf.convert_to_tensor(-3.))
     self.evaluate([concentration.initializer, scale.initializer])
     with self.assertRaisesOpError('Argument `scale` must be positive.'):
         with tf.control_dependencies([scale.assign(minus_1)]):
             self.evaluate(b.forward(minus_3))
예제 #7
0
 def testBijector(self):
   scale = 5.
   concentration = 0.3
   bijector = tfb.WeibullCDF(
       scale=scale, concentration=concentration, validate_args=True)
   self.assertStartsWith(bijector.name, 'weibull')
   x = np.array([[[0.], [1.], [14.], [20.], [100.]]], dtype=np.float32)
   # Weibull distribution
   weibull_dist = stats.weibull_min(c=concentration, scale=scale)
   y = weibull_dist.cdf(x).astype(np.float32)
   self.assertAllClose(y, self.evaluate(bijector.forward(x)))
   self.assertAllClose(x, self.evaluate(bijector.inverse(y)))
   self.assertAllClose(
       weibull_dist.logpdf(x),
       self.evaluate(bijector.forward_log_det_jacobian(x, event_ndims=0)))
   self.assertAllClose(
       self.evaluate(-bijector.inverse_log_det_jacobian(y, event_ndims=0)),
       self.evaluate(bijector.forward_log_det_jacobian(x, event_ndims=0)),
       rtol=1e-4,
       atol=0.)