diff options
Diffstat (limited to 'tensorflow/python/kernel_tests/init_ops_test.py')
-rw-r--r-- | tensorflow/python/kernel_tests/init_ops_test.py | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/tensorflow/python/kernel_tests/init_ops_test.py b/tensorflow/python/kernel_tests/init_ops_test.py new file mode 100644 index 0000000000..4ce6081b7b --- /dev/null +++ b/tensorflow/python/kernel_tests/init_ops_test.py @@ -0,0 +1,252 @@ +"""Tests for tensorflow.ops.ops.""" +import tensorflow.python.platform + +import numpy as np +import tensorflow as tf + +from tensorflow.python.framework import random_seed +from tensorflow.python.ops import init_ops + + +# Returns true iff the two initalizers produce the same tensor to +# within a tiny tolerance. +def identicaltest(tc, init1, init2, use_gpu): + """Tests if two initializations are identical to within tiny tolerances. + + Args: + tc: An instance of TensorFlowTestCase. + init1: An Initializer that generates a tensor of a given shape + init2: An Initializer that generates a tensor of a given shape + use_gpu: Use gpu if true. + Returns: + True or False as determined by test. + """ + num = 100 + with tc.test_session(use_gpu=use_gpu, graph=tf.Graph()): + t1 = init1([num]).eval() + with tc.test_session(use_gpu=use_gpu, graph=tf.Graph()): + t2 = init2([num]).eval() + return np.allclose(t1, t2, rtol=1e-15, atol=1e-15) + + +def duplicated_initializer(tc, init, use_gpu, graph_seed): + """Tests duplicated random initializer within the same graph. + + This test generates two random kernels from the same initializer to the same + graph, and checks if the results are close enough. Even given the same global, + seed, two different instances of random kernels should generate different + results. + + Args: + tc: An instance of TensorFlowTestCase. + init: An Initializer that generates a tensor of a given shape + use_gpu: Use gpu if true. + graph_seed: A graph-level seed to use. + Returns: + True or False as determined by test. + """ + num = 100 + with tc.test_session(use_gpu=use_gpu, graph=tf.Graph()): + random_seed.set_random_seed(graph_seed) + t1 = init([num]).eval() + t2 = init([num]).eval() + return np.allclose(t1, t2, rtol=1e-15, atol=1e-15) + + +def _init_sampler(tc, init, num, use_gpu): + """Returns a func to generate a random tensor of shape [num]. + + Args: + tc: An instance of TensorFlowTestCase. + init: An Initializer that generates a tensor of a given shape + num: Size of 1D tensor to create. + use_gpu: Use gpu if true. + Returns: + Function to generate a random tensor. + """ + def func(): + with tc.test_session(use_gpu=use_gpu): + return init([num]).eval() + return func + + +class RandomNormalInitializationTest(tf.test.TestCase): + + def testInitializerIdentical(self): + for use_gpu in [False, True]: + init1 = tf.random_normal_initializer(0.0, 1.0, seed=1) + init2 = tf.random_normal_initializer(0.0, 1.0, seed=1) + self.assertTrue(identicaltest(self, init1, init2, use_gpu)) + + def testInitializerDifferent(self): + for use_gpu in [False, True]: + init1 = tf.random_normal_initializer(0.0, 1.0, seed=1) + init2 = tf.random_normal_initializer(0.0, 1.0, seed=2) + self.assertFalse(identicaltest(self, init1, init2, use_gpu=use_gpu)) + + def testDuplicatedInitializer(self): + for use_gpu in [False, True]: + init = tf.random_normal_initializer(0.0, 1.0) + self.assertFalse(duplicated_initializer(self, init, use_gpu, 1)) + + +class TruncatedNormalInitializationTest(tf.test.TestCase): + + def testInitializerIdentical(self): + for use_gpu in [False, True]: + init1 = tf.truncated_normal_initializer(0.0, 1.0, seed=1) + init2 = tf.truncated_normal_initializer(0.0, 1.0, seed=1) + self.assertTrue(identicaltest(self, init1, init2, use_gpu)) + + def testInitializerDifferent(self): + for use_gpu in [False, True]: + init1 = tf.truncated_normal_initializer(0.0, 1.0, seed=1) + init2 = tf.truncated_normal_initializer(0.0, 1.0, seed=2) + self.assertFalse(identicaltest(self, init1, init2, use_gpu=use_gpu)) + + def testDuplicatedInitializer(self): + for use_gpu in [False, True]: + init = tf.truncated_normal_initializer(0.0, 1.0) + self.assertFalse(duplicated_initializer(self, init, use_gpu, 1)) + + +class RandomUniformInitializationTest(tf.test.TestCase): + + def testInitializerIdentical(self): + for use_gpu in [False, True]: + init1 = tf.random_uniform_initializer(0.0, 1.0, seed=1) + init2 = tf.random_uniform_initializer(0.0, 1.0, seed=1) + self.assertTrue(identicaltest(self, init1, init2, use_gpu)) + + def testInitializerDifferent(self): + for use_gpu in [False, True]: + init1 = tf.random_uniform_initializer(0.0, 1.0, seed=1) + init2 = tf.random_uniform_initializer(0.0, 1.0, seed=2) + self.assertFalse(identicaltest(self, init1, init2, use_gpu)) + + def testDuplicatedInitializer(self): + for use_gpu in [False, True]: + init = tf.random_uniform_initializer(0.0, 1.0) + self.assertFalse(duplicated_initializer(self, init, use_gpu, 1)) + + +class UniformUnitScalingInitializationTest(tf.test.TestCase): + + def testInitializerIdentical(self): + for use_gpu in [False, True]: + init1 = tf.uniform_unit_scaling_initializer(seed=1) + init2 = tf.uniform_unit_scaling_initializer(seed=1) + self.assertTrue(identicaltest(self, init1, init2, use_gpu)) + init3 = tf.uniform_unit_scaling_initializer(1.5, seed=1) + init4 = tf.uniform_unit_scaling_initializer(1.5, seed=1) + self.assertTrue(identicaltest(self, init3, init4, use_gpu)) + + def testInitializerDifferent(self): + for use_gpu in [False, True]: + init1 = tf.uniform_unit_scaling_initializer(seed=1) + init2 = tf.uniform_unit_scaling_initializer(seed=2) + init3 = tf.uniform_unit_scaling_initializer(1.5, seed=1) + self.assertFalse(identicaltest(self, init1, init2, use_gpu)) + self.assertFalse(identicaltest(self, init1, init3, use_gpu)) + self.assertFalse(identicaltest(self, init2, init3, use_gpu)) + + def testDuplicatedInitializer(self): + for use_gpu in [False, True]: + init = tf.uniform_unit_scaling_initializer() + self.assertFalse(duplicated_initializer(self, init, use_gpu, 1)) + + +class RandomWalkShapeTest(tf.test.TestCase): + + def testRandomWalk(self): + # Fully known shape. + rnd1 = init_ops._random_walk([1, 2], tf.nn.relu) + self.assertEqual([1, 2], rnd1.get_shape()) + + +# TODO(vrv): move to sequence_ops_test? +class RangeTest(tf.test.TestCase): + + def _Range(self, start, limit, delta): + with self.test_session(): + tf_ans = tf.range(start, limit, delta, name="range") + self.assertEqual([len(range(start, limit, delta))], tf_ans.get_shape()) + return tf_ans.eval() + + def testBasic(self): + self.assertTrue(np.array_equal( + self._Range(0, 5, 1), np.array([0, 1, 2, 3, 4]))) + self.assertTrue(np.array_equal( + self._Range(0, 5, 2), np.array([0, 2, 4]))) + self.assertTrue(np.array_equal( + self._Range(0, 6, 2), np.array([0, 2, 4]))) + self.assertTrue(np.array_equal( + self._Range(13, 32, 7), np.array([13, 20, 27]))) + self.assertTrue(np.array_equal( + self._Range(100, 500, 100), np.array([100, 200, 300, 400]))) + self.assertEqual(tf.range(0, 5, 1).dtype, tf.int32) + + def testEmpty(self): + for start in 0, 5: + self.assertTrue(np.array_equal(self._Range(start, start, 1), [])) + + +# TODO(vrv): move to sequence_ops_test? +class LinSpaceTest(tf.test.TestCase): + + def _LinSpace(self, start, stop, num): + with self.test_session(): + tf_ans = tf.linspace(start, stop, num, name="linspace") + self.assertEqual([num], tf_ans.get_shape()) + return tf_ans.eval() + + def testPositive(self): + self.assertArrayNear(self._LinSpace(1., 5., 1), np.array([1.]), 1e-5) + self.assertArrayNear(self._LinSpace(1., 5., 2), np.array([1., 5.]), 1e-5) + self.assertArrayNear(self._LinSpace(1., 5., 3), + np.array([1., 3., 5.]), 1e-5) + self.assertArrayNear(self._LinSpace(1., 5., 4), + np.array([1., 7. / 3., 11. / 3., 5.]), 1e-5) + + def testNegative(self): + self.assertArrayNear(self._LinSpace(-1., -5., 1), np.array([-1.]), 1e-5) + self.assertArrayNear(self._LinSpace(-1., -5., 2), + np.array([-1., -5.]), 1e-5) + self.assertArrayNear(self._LinSpace(-1., -5., 3), + np.array([-1., -3., -5.]), 1e-5) + self.assertArrayNear(self._LinSpace(-1., -5., 4), + np.array([-1., -7. / 3., -11. / 3., -5.]), 1e-5) + + def testNegativeToPositive(self): + self.assertArrayNear(self._LinSpace(-1., 5., 1), np.array([-1.]), 1e-5) + self.assertArrayNear(self._LinSpace(-1., 5., 2), np.array([-1., 5.]), 1e-5) + self.assertArrayNear(self._LinSpace(-1., 5., 3), + np.array([-1., 2., 5.]), 1e-5) + self.assertArrayNear(self._LinSpace(-1., 5., 4), + np.array([-1., 1., 3., 5.]), 1e-5) + + def testPoint(self): + self.assertArrayNear(self._LinSpace(5., 5., 1), np.array([5.]), 1e-5) + self.assertArrayNear(self._LinSpace(5., 5., 2), np.array([5.] * 2), 1e-5) + self.assertArrayNear(self._LinSpace(5., 5., 3), np.array([5.] * 3), 1e-5) + self.assertArrayNear(self._LinSpace(5., 5., 4), np.array([5.] * 4), 1e-5) + + +class DeviceTest(tf.test.TestCase): + + def testNoDevice(self): + with tf.Graph().as_default(): + var = tf.Variable([[1.0, 1.0]]) + self.assertEqual(None, var.device) + self.assertEqual(None, var.initializer.device) + + def testDevice(self): + with tf.Graph().as_default(): + with tf.device("/job:ps"): + var = tf.Variable([[1.0, 1.0]]) + self.assertEqual("/job:ps", var.device) + self.assertEqual("/job:ps", var.initializer.device) + + +if __name__ == "__main__": + tf.test.main() |