diff options
author | Andrew Selle <aselle@google.com> | 2016-12-07 10:26:42 -0800 |
---|---|---|
committer | TensorFlower Gardener <gardener@tensorflow.org> | 2016-12-07 10:42:28 -0800 |
commit | 878f5fcb8103cfc7e28bd86f7d0c722e053588d1 (patch) | |
tree | d8311d6739ee5fb77f6ac5ad7f195273df209b77 /tensorflow/python | |
parent | 8d191fd0c415428803de170df1581be5f3af01b7 (diff) |
Remove remaining uses of tf.reverse() and remove tf.reverse()
from API. On a subsequent commit tf.reverse() will be reintroduced but
taking a list of integer axes to reverse.
Change: 141325033
Diffstat (limited to 'tensorflow/python')
-rw-r--r-- | tensorflow/python/kernel_tests/array_ops_test.py | 42 | ||||
-rw-r--r-- | tensorflow/python/ops/array_grad.py | 4 | ||||
-rw-r--r-- | tensorflow/python/ops/array_ops.py | 1 | ||||
-rw-r--r-- | tensorflow/python/ops/hidden_ops.txt | 1 | ||||
-rw-r--r-- | tensorflow/python/ops/image_ops_impl.py | 44 | ||||
-rw-r--r-- | tensorflow/python/ops/math_grad.py | 2 | ||||
-rw-r--r-- | tensorflow/python/ops/nn_ops.py | 4 |
7 files changed, 41 insertions, 57 deletions
diff --git a/tensorflow/python/kernel_tests/array_ops_test.py b/tensorflow/python/kernel_tests/array_ops_test.py index fb81f06472..4757558a9d 100644 --- a/tensorflow/python/kernel_tests/array_ops_test.py +++ b/tensorflow/python/kernel_tests/array_ops_test.py @@ -201,48 +201,6 @@ class OperatorShapeTest(test_util.TensorFlowTestCase): self.assertEqual(matrix_squeezed.get_shape(), (3)) -class ReverseTest(test_util.TensorFlowTestCase): - - def testReverse0DimAuto(self): - x_np = 4 - for use_gpu in [False, True]: - with self.test_session(use_gpu=use_gpu): - x_tf = array_ops.reverse(x_np, []).eval() - self.assertAllEqual(x_tf, x_np) - - def _reverse1DimAuto(self, np_dtype): - x_np = np.array([1, 2, 3, 4, 5], dtype=np_dtype) - - for use_gpu in [False, True]: - with self.test_session(use_gpu=use_gpu): - x_tf = array_ops.reverse(x_np, [True]).eval() - self.assertAllEqual(x_tf, np.asarray(x_np)[::-1]) - - def testReverse1DimAuto(self): - for dtype in [np.uint8, np.int8, np.int32, np.int64, np.bool, np.float16, - np.float32, np.float64, np.complex64, np.complex128]: - self._reverse1DimAuto(dtype) - - def testUnknownDims(self): - data_t = tf.placeholder(tf.float32) - dims_known_t = tf.placeholder(tf.bool, shape=[3]) - reverse_known_t = tf.reverse(data_t, dims_known_t) - self.assertEqual(3, reverse_known_t.get_shape().ndims) - - dims_unknown_t = tf.placeholder(tf.bool) - reverse_unknown_t = tf.reverse(data_t, dims_unknown_t) - self.assertIs(None, reverse_unknown_t.get_shape().ndims) - - data_2d_t = tf.placeholder(tf.float32, shape=[None, None]) - dims_2d_t = tf.placeholder(tf.bool, shape=[2]) - reverse_2d_t = tf.reverse(data_2d_t, dims_2d_t) - self.assertEqual(2, reverse_2d_t.get_shape().ndims) - - dims_3d_t = tf.placeholder(tf.bool, shape=[3]) - with self.assertRaisesRegexp(ValueError, "must be rank 3"): - tf.reverse(data_2d_t, dims_3d_t) - - class ReverseV2Test(test_util.TensorFlowTestCase): def testReverse0DimAuto(self): diff --git a/tensorflow/python/ops/array_grad.py b/tensorflow/python/ops/array_grad.py index 7efdb281ae..e0d19bf5ea 100644 --- a/tensorflow/python/ops/array_grad.py +++ b/tensorflow/python/ops/array_grad.py @@ -474,7 +474,9 @@ def _ReverseSequenceGrad(op, grad): @ops.RegisterGradient("Reverse") def _ReverseGrad(op, grad): reverse_dims = op.inputs[1] - return array_ops.reverse(grad, reverse_dims), None + # pylint: disable=protected-access + return array_ops._reverse(grad, reverse_dims), None + # pylint: enable=protected-access @ops.RegisterGradient("ReverseV2") diff --git a/tensorflow/python/ops/array_ops.py b/tensorflow/python/ops/array_ops.py index b9f893aa07..2008cdefea 100644 --- a/tensorflow/python/ops/array_ops.py +++ b/tensorflow/python/ops/array_ops.py @@ -60,7 +60,6 @@ or join multiple tensors together. @@unstack @@unpack @@reverse_sequence -@@reverse @@reverse_v2 @@transpose @@extract_image_patches diff --git a/tensorflow/python/ops/hidden_ops.txt b/tensorflow/python/ops/hidden_ops.txt index a4aca2b838..4cec78ada2 100644 --- a/tensorflow/python/ops/hidden_ops.txt +++ b/tensorflow/python/ops/hidden_ops.txt @@ -15,6 +15,7 @@ Pack Pad Placeholder RefIdentity +Reverse SpaceToBatch Split SplitV diff --git a/tensorflow/python/ops/image_ops_impl.py b/tensorflow/python/ops/image_ops_impl.py index 5397b68b00..639df5d845 100644 --- a/tensorflow/python/ops/image_ops_impl.py +++ b/tensorflow/python/ops/image_ops_impl.py @@ -24,6 +24,7 @@ import os from tensorflow.python.framework import constant_op from tensorflow.python.framework import dtypes from tensorflow.python.framework import ops +from tensorflow.python.framework import tensor_shape from tensorflow.python.framework import tensor_util from tensorflow.python.ops import array_ops from tensorflow.python.ops import check_ops @@ -158,6 +159,25 @@ def _CheckAtLeast3DImage(image): image.get_shape()) +def fix_image_flip_shape(image, result): + """Set the shape to 3 dimensional if we don't know anything else. + + Args: + image: original image size + result: flipped or transformed image + + Returns: + An image whose shape is at least None,None,None. + """ + + image_shape = image.get_shape() + if image_shape == tensor_shape.unknown_shape(): + result.set_shape([None, None, None]) + else: + result.set_shape(image_shape) + return result + + def random_flip_up_down(image, seed=None): """Randomly flips an image vertically (upside down). @@ -179,8 +199,10 @@ def random_flip_up_down(image, seed=None): image = ops.convert_to_tensor(image, name='image') _Check3DImage(image, require_static=False) uniform_random = random_ops.random_uniform([], 0, 1.0, seed=seed) - mirror = math_ops.less(array_ops.pack([uniform_random, 1.0, 1.0]), 0.5) - return array_ops.reverse(image, mirror) + mirror_cond = math_ops.less(uniform_random, .5) + stride = array_ops.where(mirror_cond, -1, 1) + result = image[::stride, :, :] + return fix_image_flip_shape(image, result) def random_flip_left_right(image, seed=None): @@ -204,8 +226,10 @@ def random_flip_left_right(image, seed=None): image = ops.convert_to_tensor(image, name='image') _Check3DImage(image, require_static=False) uniform_random = random_ops.random_uniform([], 0, 1.0, seed=seed) - mirror = math_ops.less(array_ops.pack([1.0, uniform_random, 1.0]), 0.5) - return array_ops.reverse(image, mirror) + mirror_cond = math_ops.less(uniform_random, .5) + stride = array_ops.where(mirror_cond, -1, 1) + result = image[:, ::stride, :] + return fix_image_flip_shape(image, result) def flip_left_right(image): @@ -227,7 +251,7 @@ def flip_left_right(image): """ image = ops.convert_to_tensor(image, name='image') _Check3DImage(image, require_static=False) - return array_ops.reverse(image, [False, True, False]) + return fix_image_flip_shape(image, image[:, ::-1, :]) def flip_up_down(image): @@ -249,7 +273,7 @@ def flip_up_down(image): """ image = ops.convert_to_tensor(image, name='image') _Check3DImage(image, require_static=False) - return array_ops.reverse(image, [True, False, False]) + return fix_image_flip_shape(image, array_ops.reverse_v2(image, [0])) def rot90(image, k=1, name=None): @@ -271,13 +295,13 @@ def rot90(image, k=1, name=None): k = math_ops.mod(k, 4) def _rot90(): - return array_ops.transpose(array_ops.reverse(image, [False, True, False]), + return array_ops.transpose(array_ops.reverse_v2(image, [1]), [1, 0, 2]) def _rot180(): - return array_ops.reverse(image, [True, True, False]) + return array_ops.reverse_v2(image, [0, 1]) def _rot270(): - return array_ops.reverse(array_ops.transpose(image, [1, 0, 2]), - [False, True, False]) + return array_ops.reverse_v2(array_ops.transpose(image, [1, 0, 2]), + [1]) cases = [(math_ops.equal(k, 1), _rot90), (math_ops.equal(k, 2), _rot180), (math_ops.equal(k, 3), _rot270)] diff --git a/tensorflow/python/ops/math_grad.py b/tensorflow/python/ops/math_grad.py index 9ba05f0a24..e4d42a4311 100644 --- a/tensorflow/python/ops/math_grad.py +++ b/tensorflow/python/ops/math_grad.py @@ -921,7 +921,7 @@ def _CastGrad(op, grad): def _FFTSizeForGrad(grad, rank): return math_ops.reduce_prod( array_ops.slice( - array_ops.reverse(array_ops.shape(grad), (True,)), (0,), (rank,))) + array_ops.reverse_v2(array_ops.shape(grad), [0]), (0,), (rank,))) @ops.RegisterGradient("FFT") diff --git a/tensorflow/python/ops/nn_ops.py b/tensorflow/python/ops/nn_ops.py index 666fb3f475..bb55249ff0 100644 --- a/tensorflow/python/ops/nn_ops.py +++ b/tensorflow/python/ops/nn_ops.py @@ -2077,8 +2077,8 @@ def erosion2d(value, kernel, strides, rates, padding, name=None): with ops.name_scope(name, "erosion2d", [value, kernel]) as name: # Reduce erosion to dilation by duality. return math_ops.neg(gen_nn_ops.dilation2d(input=math_ops.neg(value), - filter=array_ops.reverse( - kernel, [True, True, False]), + filter=array_ops.reverse_v2( + kernel, [0, 1]), strides=strides, rates=rates, padding=padding, |