コード例 #1
0
 def testAsserts(self):
     with self.assertRaisesOpError('Argument `scale` must be positive.'):
         b = tfb.Weibull(concentration=1., scale=-1., validate_args=True)
         self.evaluate(b.forward(-3.))
     with self.assertRaisesOpError(
             'Argument `concentration` must be positive.'):
         b = tfb.Weibull(concentration=-1., scale=1., validate_args=True)
         self.evaluate(b.forward(-3.))
コード例 #2
0
 def testBijector(self):
     with self.test_session():
         scale = 5.
         concentration = 0.3
         bijector = tfb.Weibull(scale=scale,
                                concentration=concentration,
                                validate_args=True)
         self.assertEqual("weibull", bijector.name)
         x = np.array([[[0.], [1.], [14.], [20.], [100.]]],
                      dtype=np.float32)
         # Weibull distribution
         weibull_dist = stats.frechet_r(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.)
コード例 #3
0
 def testScalarCongruency(self):
     bijector_test_util.assert_scalar_congruency(tfb.Weibull(
         scale=20., concentration=0.3),
                                                 lower_x=1.,
                                                 upper_x=100.,
                                                 eval_func=self.evaluate,
                                                 rtol=0.05)
コード例 #4
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.Weibull(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))
コード例 #5
0
 def testBijectiveAndFinite(self):
   bijector = tfb.Weibull(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)
コード例 #6
0
 def testVariableAssertsScale(self):
   concentration = tf.Variable(1.)
   scale = tf.Variable(1.)
   b = tfb.Weibull(
       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 testVariableAsserts(self):
     concentration = tf.Variable(1.)
     scale = tf.Variable(1.)
     b = tfb.Weibull(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.))
     with self.assertRaisesOpError(
             'Argument `concentration` must be positive.'):
         with tf.control_dependencies(
             [scale.assign(1.), concentration.assign(-1.)]):
             self.evaluate(b.forward(-3.))
コード例 #8
0
 def testScalarCongruency(self):
     with self.test_session():
         assert_scalar_congruency(tfb.Weibull(scale=20., concentration=0.3),
                                  lower_x=1.,
                                  upper_x=100.,
                                  rtol=0.02)