def _fn(dtype, shape, name, trainable, add_variable_fn): """Creates a batch of `Deterministic` or `Normal` distributions.""" loc, scale = loc_scale_fn_(dtype, shape, name, trainable, add_variable_fn) if scale is None: return deterministic_lib.Deterministic(loc=loc) return normal_lib.Normal(loc=loc, scale=scale)
def testInvalidTolRaises(self): loc = rng.rand(2, 3, 4).astype(np.float32) with self.assertRaisesRegexp(errors.InvalidArgumentError, "Condition x >= 0"): _ = deterministic_lib.Deterministic(loc, atol=-1, validate_args=True)
def testSampleNoBatchDims(self): deterministic = deterministic_lib.Deterministic(0.) for sample_shape in [(), (4, )]: with self.cached_session(): sample = deterministic.sample(sample_shape) self.assertAllEqual(sample_shape, sample.get_shape()) self.assertAllClose( np.zeros(sample_shape).astype(np.float32), sample.eval())
def testInvalidTolRaises(self): loc = rng.rand(2, 3, 4).astype(np.float32) deterministic = deterministic_lib.Deterministic(loc, atol=-1, validate_args=True) with self.cached_session(): with self.assertRaisesOpError("Condition x >= 0"): deterministic.prob(0.).eval()
def testProbWithDefaultTol(self): loc = [[0., 1.], [2., 3.]] x = [[0., 1.1], [1.99, 3.]] deterministic = deterministic_lib.Deterministic(loc) expected_prob = [[1., 0.], [0., 1.]] with self.cached_session(): prob = deterministic.prob(x) self.assertAllEqual((2, 2), prob.get_shape()) self.assertAllEqual(expected_prob, prob.eval())
def testCdfWithNonzeroRTol(self): loc = [[1., 1.], [100., 100.]] x = [[0.9, 1.], [99.9, 97]] deterministic = deterministic_lib.Deterministic(loc, rtol=0.01) expected_cdf = [[0., 1.], [1., 0.]] with self.cached_session(): cdf = deterministic.cdf(x) self.assertAllEqual((2, 2), cdf.get_shape()) self.assertAllEqual(expected_cdf, cdf.eval())
def testCdfWithNonzeroATol(self): loc = [[0., 0.], [0., 0.]] x = [[-1., -0.1], [-0.01, 1.000001]] deterministic = deterministic_lib.Deterministic(loc, atol=0.05) expected_cdf = [[0., 0.], [1., 1.]] with self.cached_session(): cdf = deterministic.cdf(x) self.assertAllEqual((2, 2), cdf.get_shape()) self.assertAllEqual(expected_cdf, cdf.eval())
def testProbWithNonzeroATolIntegerType(self): loc = [[0, 1], [2, 3]] x = [[0, 2], [4, 2]] deterministic = deterministic_lib.Deterministic(loc, atol=1) expected_prob = [[1, 1], [0, 1]] with self.cached_session(): prob = deterministic.prob(x) self.assertAllEqual((2, 2), prob.get_shape()) self.assertAllEqual(expected_prob, prob.eval())
def testProbWithNonzeroATol(self): loc = [[0., 1.], [2., 3.]] x = [[0., 1.1], [1.99, 3.]] deterministic = deterministic_lib.Deterministic(loc, atol=0.05) expected_prob = [[1., 0.], [1., 1.]] with self.test_session(): prob = deterministic.prob(x) self.assertAllEqual((2, 2), prob.get_shape()) self.assertAllEqual(expected_prob, prob.eval())
def testSampleWithBatchDims(self): deterministic = deterministic_lib.Deterministic([0., 0.]) for sample_shape in [(), (4, )]: with self.test_session(): sample = deterministic.sample(sample_shape) self.assertAllEqual(sample_shape + (2, ), sample.get_shape()) self.assertAllClose( np.zeros(sample_shape + (2, )).astype(np.float32), sample.eval())
def testProbWithNonzeroRTol(self): loc = [[0., 1.], [100., 100.]] x = [[0., 1.1], [100.1, 103.]] deterministic = deterministic_lib.Deterministic(loc, rtol=0.01) expected_prob = [[1., 0.], [1., 0.]] with self.cached_session(): prob = deterministic.prob(x) self.assertAllEqual((2, 2), prob.get_shape()) self.assertAllEqual(expected_prob, prob.eval())
def _fn(dtype, shape, name, trainable, add_variable_fn): """Creates multivariate `Deterministic` or `Normal` distribution.""" loc, scale = loc_scale_fn_(dtype, shape, name, trainable, add_variable_fn) if scale is None: dist = deterministic_lib.Deterministic(loc=loc) else: dist = normal_lib.Normal(loc=loc, scale=scale) reinterpreted_batch_ndims = array_ops.shape(dist.batch_shape_tensor())[0] return independent_lib.Independent( dist, reinterpreted_batch_ndims=reinterpreted_batch_ndims)
def testProbWithNonzeroRTolIntegerType(self): loc = [[10, 10, 10], [10, 10, 10]] x = [[10, 20, 30], [10, 20, 30]] # Batch 0 will have rtol = 0 # Batch 1 will have rtol = 1 (100% slack allowed) deterministic = deterministic_lib.Deterministic(loc, rtol=[[0], [1]]) expected_prob = [[1, 0, 0], [1, 1, 0]] with self.cached_session(): prob = deterministic.prob(x) self.assertAllEqual((2, 3), prob.get_shape()) self.assertAllEqual(expected_prob, prob.eval())
def testShape(self): with self.cached_session(): loc = rng.rand(2, 3, 4) deterministic = deterministic_lib.Deterministic(loc) self.assertAllEqual(deterministic.batch_shape_tensor().eval(), (2, 3, 4)) self.assertAllEqual(deterministic.batch_shape, (2, 3, 4)) self.assertAllEqual(deterministic.event_shape_tensor().eval(), []) self.assertEqual(deterministic.event_shape, tensor_shape.TensorShape([]))
def testSampleDynamicWithBatchDims(self): loc = array_ops.placeholder(np.float32) sample_shape = array_ops.placeholder(np.int32) deterministic = deterministic_lib.Deterministic(loc) for sample_shape_ in [(), (4, )]: with self.cached_session(): sample_ = deterministic.sample(sample_shape).eval( feed_dict={ loc: [0., 0.], sample_shape: sample_shape_ }) self.assertAllClose( np.zeros(sample_shape_ + (2, )).astype(np.float32), sample_)
def testEntropy(self): loc = np.array([-0.1, -3.2, 7.]) deterministic = deterministic_lib.Deterministic(loc=loc) with self.cached_session() as sess: entropy_ = sess.run(deterministic.entropy()) self.assertAllEqual(np.zeros(3), entropy_)
def testProbWithNoBatchDims(self): deterministic = deterministic_lib.Deterministic(0.) with self.cached_session(): self.assertAllClose(1., deterministic.prob(0.).eval()) self.assertAllClose(0., deterministic.prob(2.).eval()) self.assertAllClose([1., 0.], deterministic.prob([0., 2.]).eval())
def testProbWithNoBatchDimsIntegerType(self): deterministic = deterministic_lib.Deterministic(0) with self.cached_session(): self.assertAllClose(1, deterministic.prob(0).eval()) self.assertAllClose(0, deterministic.prob(2).eval()) self.assertAllClose([1, 0], deterministic.prob([0, 2]).eval())