diff options
Diffstat (limited to 'tensorflow/contrib/distributions/python/kernel_tests/laplace_test.py')
-rw-r--r-- | tensorflow/contrib/distributions/python/kernel_tests/laplace_test.py | 130 |
1 files changed, 72 insertions, 58 deletions
diff --git a/tensorflow/contrib/distributions/python/kernel_tests/laplace_test.py b/tensorflow/contrib/distributions/python/kernel_tests/laplace_test.py index 32a3ce4afe..312b733f3d 100644 --- a/tensorflow/contrib/distributions/python/kernel_tests/laplace_test.py +++ b/tensorflow/contrib/distributions/python/kernel_tests/laplace_test.py @@ -19,31 +19,36 @@ from __future__ import print_function import numpy as np from scipy import stats -import tensorflow as tf +from tensorflow.contrib.distributions.python.ops import laplace as laplace_lib +from tensorflow.python.client import session +from tensorflow.python.framework import constant_op +from tensorflow.python.framework import tensor_shape +from tensorflow.python.ops import nn_ops +from tensorflow.python.platform import test -class LaplaceTest(tf.test.TestCase): +class LaplaceTest(test.TestCase): def testLaplaceShape(self): with self.test_session(): - loc = tf.constant([3.0] * 5) - scale = tf.constant(11.0) - laplace = tf.contrib.distributions.Laplace(loc=loc, scale=scale) + loc = constant_op.constant([3.0] * 5) + scale = constant_op.constant(11.0) + laplace = laplace_lib.Laplace(loc=loc, scale=scale) self.assertEqual(laplace.batch_shape().eval(), (5,)) - self.assertEqual(laplace.get_batch_shape(), tf.TensorShape([5])) + self.assertEqual(laplace.get_batch_shape(), tensor_shape.TensorShape([5])) self.assertAllEqual(laplace.event_shape().eval(), []) - self.assertEqual(laplace.get_event_shape(), tf.TensorShape([])) + self.assertEqual(laplace.get_event_shape(), tensor_shape.TensorShape([])) def testLaplaceLogPDF(self): with self.test_session(): batch_size = 6 - loc = tf.constant([2.0] * batch_size) - scale = tf.constant([3.0] * batch_size) + loc = constant_op.constant([2.0] * batch_size) + scale = constant_op.constant([3.0] * batch_size) loc_v = 2.0 scale_v = 3.0 x = np.array([2.5, 2.5, 4.0, 0.1, 1.0, 2.0], dtype=np.float32) - laplace = tf.contrib.distributions.Laplace(loc=loc, scale=scale) + laplace = laplace_lib.Laplace(loc=loc, scale=scale) expected_log_pdf = stats.laplace.logpdf(x, loc_v, scale=scale_v) log_pdf = laplace.log_pdf(x) self.assertEqual(log_pdf.get_shape(), (6,)) @@ -56,12 +61,12 @@ class LaplaceTest(tf.test.TestCase): def testLaplaceLogPDFMultidimensional(self): with self.test_session(): batch_size = 6 - loc = tf.constant([[2.0, 4.0]] * batch_size) - scale = tf.constant([[3.0, 4.0]] * batch_size) + loc = constant_op.constant([[2.0, 4.0]] * batch_size) + scale = constant_op.constant([[3.0, 4.0]] * batch_size) loc_v = np.array([2.0, 4.0]) scale_v = np.array([3.0, 4.0]) x = np.array([[2.5, 2.5, 4.0, 0.1, 1.0, 2.0]], dtype=np.float32).T - laplace = tf.contrib.distributions.Laplace(loc=loc, scale=scale) + laplace = laplace_lib.Laplace(loc=loc, scale=scale) expected_log_pdf = stats.laplace.logpdf(x, loc_v, scale=scale_v) log_pdf = laplace.log_pdf(x) log_pdf_values = log_pdf.eval() @@ -76,12 +81,12 @@ class LaplaceTest(tf.test.TestCase): def testLaplaceLogPDFMultidimensionalBroadcasting(self): with self.test_session(): batch_size = 6 - loc = tf.constant([[2.0, 4.0]] * batch_size) - scale = tf.constant(3.0) + loc = constant_op.constant([[2.0, 4.0]] * batch_size) + scale = constant_op.constant(3.0) loc_v = np.array([2.0, 4.0]) scale_v = 3.0 x = np.array([[2.5, 2.5, 4.0, 0.1, 1.0, 2.0]], dtype=np.float32).T - laplace = tf.contrib.distributions.Laplace(loc=loc, scale=scale) + laplace = laplace_lib.Laplace(loc=loc, scale=scale) expected_log_pdf = stats.laplace.logpdf(x, loc_v, scale=scale_v) log_pdf = laplace.log_pdf(x) log_pdf_values = log_pdf.eval() @@ -96,13 +101,13 @@ class LaplaceTest(tf.test.TestCase): def testLaplaceCDF(self): with self.test_session(): batch_size = 6 - loc = tf.constant([2.0] * batch_size) - scale = tf.constant([3.0] * batch_size) + loc = constant_op.constant([2.0] * batch_size) + scale = constant_op.constant([3.0] * batch_size) loc_v = 2.0 scale_v = 3.0 x = np.array([2.5, 2.5, 4.0, 0.1, 1.0, 2.0], dtype=np.float32) - laplace = tf.contrib.distributions.Laplace(loc=loc, scale=scale) + laplace = laplace_lib.Laplace(loc=loc, scale=scale) expected_cdf = stats.laplace.cdf(x, loc_v, scale=scale_v) cdf = laplace.cdf(x) @@ -113,7 +118,7 @@ class LaplaceTest(tf.test.TestCase): with self.test_session(): loc_v = np.array([1.0, 3.0, 2.5]) scale_v = np.array([1.0, 4.0, 5.0]) - laplace = tf.contrib.distributions.Laplace(loc=loc_v, scale=scale_v) + laplace = laplace_lib.Laplace(loc=loc_v, scale=scale_v) expected_means = stats.laplace.mean(loc_v, scale=scale_v) self.assertEqual(laplace.mean().get_shape(), (3,)) self.assertAllClose(laplace.mean().eval(), expected_means) @@ -122,7 +127,7 @@ class LaplaceTest(tf.test.TestCase): with self.test_session(): loc_v = np.array([0.5, 3.0, 2.5]) scale_v = np.array([1.0, 4.0, 5.0]) - laplace = tf.contrib.distributions.Laplace(loc=loc_v, scale=scale_v) + laplace = laplace_lib.Laplace(loc=loc_v, scale=scale_v) self.assertEqual(laplace.mode().get_shape(), (3,)) self.assertAllClose(laplace.mode().eval(), loc_v) @@ -130,7 +135,7 @@ class LaplaceTest(tf.test.TestCase): with self.test_session(): loc_v = np.array([1.0, 3.0, 2.5]) scale_v = np.array([1.0, 4.0, 5.0]) - laplace = tf.contrib.distributions.Laplace(loc=loc_v, scale=scale_v) + laplace = laplace_lib.Laplace(loc=loc_v, scale=scale_v) expected_variances = stats.laplace.var(loc_v, scale=scale_v) self.assertEqual(laplace.variance().get_shape(), (3,)) self.assertAllClose(laplace.variance().eval(), expected_variances) @@ -139,7 +144,7 @@ class LaplaceTest(tf.test.TestCase): with self.test_session(): loc_v = np.array([1.0, 3.0, 2.5]) scale_v = np.array([1.0, 4.0, 5.0]) - laplace = tf.contrib.distributions.Laplace(loc=loc_v, scale=scale_v) + laplace = laplace_lib.Laplace(loc=loc_v, scale=scale_v) expected_std = stats.laplace.std(loc_v, scale=scale_v) self.assertEqual(laplace.std().get_shape(), (3,)) self.assertAllClose(laplace.std().eval(), expected_std) @@ -149,35 +154,40 @@ class LaplaceTest(tf.test.TestCase): loc_v = np.array([1.0, 3.0, 2.5]) scale_v = np.array([1.0, 4.0, 5.0]) expected_entropy = stats.laplace.entropy(loc_v, scale=scale_v) - laplace = tf.contrib.distributions.Laplace(loc=loc_v, scale=scale_v) + laplace = laplace_lib.Laplace(loc=loc_v, scale=scale_v) self.assertEqual(laplace.entropy().get_shape(), (3,)) self.assertAllClose(laplace.entropy().eval(), expected_entropy) def testLaplaceSample(self): - with tf.Session(): + with session.Session(): loc_v = 4.0 scale_v = 3.0 - loc = tf.constant(loc_v) - scale = tf.constant(scale_v) + loc = constant_op.constant(loc_v) + scale = constant_op.constant(scale_v) n = 100000 - laplace = tf.contrib.distributions.Laplace(loc=loc, scale=scale) + laplace = laplace_lib.Laplace(loc=loc, scale=scale) samples = laplace.sample(n, seed=137) sample_values = samples.eval() self.assertEqual(samples.get_shape(), (n,)) self.assertEqual(sample_values.shape, (n,)) - self.assertAllClose(sample_values.mean(), - stats.laplace.mean(loc_v, scale=scale_v), - rtol=0.05, atol=0.) - self.assertAllClose(sample_values.var(), - stats.laplace.var(loc_v, scale=scale_v), - rtol=0.05, atol=0.) + self.assertAllClose( + sample_values.mean(), + stats.laplace.mean( + loc_v, scale=scale_v), + rtol=0.05, + atol=0.) + self.assertAllClose( + sample_values.var(), + stats.laplace.var(loc_v, scale=scale_v), + rtol=0.05, + atol=0.) self.assertTrue(self._kstest(loc_v, scale_v, sample_values)) def testLaplaceSampleMultiDimensional(self): - with tf.Session(): + with session.Session(): loc_v = np.array([np.arange(1, 101, dtype=np.float32)]) # 1 x 100 scale_v = np.array([np.arange(1, 11, dtype=np.float32)]).T # 10 x 1 - laplace = tf.contrib.distributions.Laplace(loc=loc_v, scale=scale_v) + laplace = laplace_lib.Laplace(loc=loc_v, scale=scale_v) n = 10000 samples = laplace.sample(n, seed=137) sample_values = samples.eval() @@ -188,12 +198,15 @@ class LaplaceTest(tf.test.TestCase): scale_bc = scale_v + zeros self.assertAllClose( sample_values.mean(axis=0), - stats.laplace.mean(loc_bc, scale=scale_bc), - rtol=0.35, atol=0.) + stats.laplace.mean( + loc_bc, scale=scale_bc), + rtol=0.35, + atol=0.) self.assertAllClose( sample_values.var(axis=0), stats.laplace.var(loc_bc, scale=scale_bc), - rtol=0.10, atol=0.) + rtol=0.10, + atol=0.) fails = 0 trials = 0 for ai, a in enumerate(np.reshape(loc_v, [-1])): @@ -210,9 +223,8 @@ class LaplaceTest(tf.test.TestCase): return ks < 0.02 def testLaplacePdfOfSampleMultiDims(self): - with tf.Session() as sess: - laplace = tf.contrib.distributions.Laplace( - loc=[7., 11.], scale=[[5.], [6.]]) + with session.Session() as sess: + laplace = laplace_lib.Laplace(loc=[7., 11.], scale=[[5.], [6.]]) num = 50000 samples = laplace.sample(num, seed=137) pdfs = laplace.pdf(samples) @@ -220,15 +232,17 @@ class LaplaceTest(tf.test.TestCase): self.assertEqual(samples.get_shape(), (num, 2, 2)) self.assertEqual(pdfs.get_shape(), (num, 2, 2)) self.assertAllClose( - stats.laplace.mean([[7., 11.], [7., 11.]], - scale=np.array([[5., 5.], [6., 6.]])), + stats.laplace.mean( + [[7., 11.], [7., 11.]], scale=np.array([[5., 5.], [6., 6.]])), sample_vals.mean(axis=0), - rtol=0.05, atol=0.) + rtol=0.05, + atol=0.) self.assertAllClose( stats.laplace.var([[7., 11.], [7., 11.]], scale=np.array([[5., 5.], [6., 6.]])), sample_vals.var(axis=0), - rtol=0.05, atol=0.) + rtol=0.05, + atol=0.) self._assertIntegral(sample_vals[:, 0, 0], pdf_vals[:, 0, 0], err=0.02) self._assertIntegral(sample_vals[:, 0, 1], pdf_vals[:, 0, 1], err=0.02) self._assertIntegral(sample_vals[:, 1, 0], pdf_vals[:, 1, 0], err=0.02) @@ -246,27 +260,27 @@ class LaplaceTest(tf.test.TestCase): def testLaplaceNonPositiveInitializationParamsRaises(self): with self.test_session(): - loc_v = tf.constant(0.0, name="loc") - scale_v = tf.constant(-1.0, name="scale") - laplace = tf.contrib.distributions.Laplace( + loc_v = constant_op.constant(0.0, name="loc") + scale_v = constant_op.constant(-1.0, name="scale") + laplace = laplace_lib.Laplace( loc=loc_v, scale=scale_v, validate_args=True) with self.assertRaisesOpError("scale"): laplace.mean().eval() - loc_v = tf.constant(1.0, name="loc") - scale_v = tf.constant(0.0, name="scale") - laplace = tf.contrib.distributions.Laplace( + loc_v = constant_op.constant(1.0, name="loc") + scale_v = constant_op.constant(0.0, name="scale") + laplace = laplace_lib.Laplace( loc=loc_v, scale=scale_v, validate_args=True) with self.assertRaisesOpError("scale"): laplace.mean().eval() def testLaplaceWithSoftplusScale(self): with self.test_session(): - loc_v = tf.constant([0.0, 1.0], name="loc") - scale_v = tf.constant([-1.0, 2.0], name="scale") - laplace = tf.contrib.distributions.LaplaceWithSoftplusScale( - loc=loc_v, scale=scale_v) - self.assertAllClose(tf.nn.softplus(scale_v).eval(), laplace.scale.eval()) + loc_v = constant_op.constant([0.0, 1.0], name="loc") + scale_v = constant_op.constant([-1.0, 2.0], name="scale") + laplace = laplace_lib.LaplaceWithSoftplusScale(loc=loc_v, scale=scale_v) + self.assertAllClose(nn_ops.softplus(scale_v).eval(), laplace.scale.eval()) self.assertAllClose(loc_v.eval(), laplace.loc.eval()) + if __name__ == "__main__": - tf.test.main() + test.main() |