Require that strides to pooling ops be non-zero and that its length match the tensor rank.

PiperOrigin-RevId: 332386479
Change-Id: I0ab452b311279927bdf8fb7caeace006abe8af69
This commit is contained in:
A. Unique TensorFlower 2020-09-17 22:28:10 -07:00 committed by TensorFlower Gardener
parent 8406e461ca
commit 643c2d27f9
3 changed files with 12 additions and 34 deletions

View File

@ -128,18 +128,6 @@ PoolParameters::PoolParameters(OpKernelContext* context,
errors::InvalidArgument(
"tensor_in_shape must have 2 spatial dimensions. ",
tensor_in_shape.dims(), " ", data_format));
OP_REQUIRES(context, stride.size() == tensor_in_shape.dims(),
errors::InvalidArgument("Number of strides (", stride.size(),
") != tensor rank (",
tensor_in_shape.dims(), ")"));
if (tensor_in_shape.num_elements() > 0) {
for (int i = 0; i < stride.size(); i++) {
OP_REQUIRES(
context, stride[i] != 0,
errors::InvalidArgument(
"Pooling stride must be non-zero, got stride[", i, "] == 0"));
}
}
this->data_format = data_format;
depth = GetTensorDim(tensor_in_shape, data_format, 'C') *

View File

@ -21,7 +21,6 @@ from __future__ import print_function
import numpy as np
from tensorflow.python.framework import constant_op
from tensorflow.python.framework import errors_impl
from tensorflow.python.framework import test_util
from tensorflow.python.ops import gradient_checker
from tensorflow.python.ops import gradients_impl
@ -153,14 +152,6 @@ class PoolingTest(test.TestCase):
padding="SAME",
expected=expected_output)
def testInvalidStrides(self):
for op in (nn_ops.avg_pool3d, nn_ops.max_pool3d):
with self.cached_session(use_gpu=True):
t = constant_op.constant([[[[[1e+40]]]]], dtype=np.float32)
with self.assertRaises((ValueError, errors_impl.InvalidArgumentError,
errors_impl.UnimplementedError)):
self.evaluate(op(t, ksize=1, strides=0, padding="SAME"))
# Test pooling on a larger input, with different stride and kernel
# size for the 'z' dimension.

View File

@ -70,7 +70,7 @@ def GetTestConfigs(include_nchw_vect_c=False, one_dimensional=False):
tf_logging.info("NCHW and NCHW_VECT_C tests skipped because not run with "
"--config=cuda or no GPUs available.")
return test_configs
# "NCHW" format is currently supported exclusively on CUDA GPUs.
# "NCHW" format is currently supported exclusively on CUDA GPUs.
test_configs += [("NCHW", True)]
if include_nchw_vect_c:
if test.is_gpu_available(
@ -285,6 +285,17 @@ class PoolingTest(test.TestCase):
expected=expected_output,
use_gpu=use_gpu)
def _testAvgPoolEmpty(self, use_gpu):
expected_output = [7.0, 8.0, 9.0]
self._VerifyValues(
nn_ops.avg_pool,
input_sizes=[1, 3, 3, 0],
ksize=[1, 2, 2, 1],
strides=[1, 2, 2, 1],
padding="VALID",
expected=expected_output,
use_gpu=use_gpu)
def _testAvgPoolSamePadding(self, use_gpu):
expected_output = [8.5, 9.5, 10.5, 14.5, 15.5, 16.5]
self._VerifyValues(
@ -431,18 +442,6 @@ class PoolingTest(test.TestCase):
expected=[],
use_gpu=use_gpu)
def testInvalidStrides(self):
strides = [1, 1, 1, 1]
for op in (nn_ops.avg_pool, nn_ops.max_pool):
for zero_dim in range(4):
bad_strides = strides
bad_strides[zero_dim] = 0
with self.cached_session(use_gpu=True):
t = constant_op.constant(1.0, shape=[3, 3, 3, 3])
with self.assertRaises((ValueError, errors_impl.UnimplementedError)):
self.evaluate(
op(t, ksize=[2, 2, 2, 2], strides=bad_strides, padding="SAME"))
@test_util.run_deprecated_v1
def testAvgPooling(self):
for use_gpu in True, False: