aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/python
diff options
context:
space:
mode:
authorGravatar Andrew Selle <aselle@google.com>2016-12-07 10:26:42 -0800
committerGravatar TensorFlower Gardener <gardener@tensorflow.org>2016-12-07 10:42:28 -0800
commit878f5fcb8103cfc7e28bd86f7d0c722e053588d1 (patch)
treed8311d6739ee5fb77f6ac5ad7f195273df209b77 /tensorflow/python
parent8d191fd0c415428803de170df1581be5f3af01b7 (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.py42
-rw-r--r--tensorflow/python/ops/array_grad.py4
-rw-r--r--tensorflow/python/ops/array_ops.py1
-rw-r--r--tensorflow/python/ops/hidden_ops.txt1
-rw-r--r--tensorflow/python/ops/image_ops_impl.py44
-rw-r--r--tensorflow/python/ops/math_grad.py2
-rw-r--r--tensorflow/python/ops/nn_ops.py4
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,