diff --git a/tensorflow/python/keras/layers/convolutional.py b/tensorflow/python/keras/layers/convolutional.py index 2c3a8a34427740..26f03a206ee6c2 100644 --- a/tensorflow/python/keras/layers/convolutional.py +++ b/tensorflow/python/keras/layers/convolutional.py @@ -168,6 +168,10 @@ def _validate_init(self): 'The number of filters must be evenly divisible by the number of ' 'groups. Received: groups={}, filters={}'.format( self.groups, self.filters)) + + if self.filters == 0: + raise ValueError('The value of the `filters` argument should not ' + 'be zero') if not all(self.kernel_size): raise ValueError('The argument `kernel_size` cannot contain 0(s). ' diff --git a/tensorflow/python/keras/layers/convolutional_test.py b/tensorflow/python/keras/layers/convolutional_test.py index 8c5ce10c002aa3..49794f31622895 100644 --- a/tensorflow/python/keras/layers/convolutional_test.py +++ b/tensorflow/python/keras/layers/convolutional_test.py @@ -166,6 +166,12 @@ def fn(inpt): fn(inpt2) self.assertEqual(outp1_shape, layer(inpt1).shape) + def test_conv1d_zero_filters(self): + kwargs = {'filters': 0, 'kernel_size': 2} + with self.assertRaisesRegex(ValueError, 'The value of the `filters` ' + 'argument should not be zero'): + keras.layers.Conv1D(**kwargs) + @keras_parameterized.run_all_keras_modes class Conv2DTest(keras_parameterized.TestCase): @@ -298,6 +304,12 @@ def test_conv2d_zero_kernel_size(self): with self.assertRaises(ValueError): keras.layers.Conv2D(**kwargs) + def test_conv2d_zero_filters(self): + kwargs = {'filters': 0, 'kernel_size': 2} + with self.assertRaisesRegex(ValueError, 'The value of the `filters` ' + 'argument should not be zero'): + keras.layers.Conv2D(**kwargs) + @keras_parameterized.run_all_keras_modes class Conv3DTest(keras_parameterized.TestCase): @@ -433,6 +445,12 @@ def test_conv3d_dynamic_shape(self): input_shape=(None, 3, None, None, None), input_data=input_data) + def test_conv3d_zero_filters(self): + kwargs = {'filters': 0, 'kernel_size': 2} + with self.assertRaisesRegex(ValueError, 'The value of the `filters` ' + 'argument should not be zero'): + keras.layers.Conv3D(**kwargs) + @keras_parameterized.run_all_keras_modes(always_skip_v1=True) class GroupedConvTest(keras_parameterized.TestCase): @@ -518,6 +536,12 @@ def test_conv1d_transpose(self, kwargs, expected_output_shape=None): test.is_gpu_available(cuda_only=True)): self._run_test(kwargs, expected_output_shape) + def test_conv1d_transpose_zero_filters(self): + kwargs = {'filters': 0, 'kernel_size': 2} + with self.assertRaisesRegex(ValueError, 'The value of the `filters` ' + 'argument should not be zero'): + keras.layers.Conv1DTranspose(**kwargs) + @keras_parameterized.run_all_keras_modes class Conv3DTransposeTest(keras_parameterized.TestCase): @@ -551,6 +575,12 @@ def test_conv3d_transpose(self, kwargs, expected_output_shape=None): if 'data_format' not in kwargs or test.is_gpu_available(cuda_only=True): self._run_test(kwargs, expected_output_shape) + def test_conv3d_transpose_zero_filters(self): + kwargs = {'filters': 0, 'kernel_size': 2} + with self.assertRaisesRegex(ValueError, 'The value of the `filters` ' + 'argument should not be zero'): + keras.layers.Conv3DTranspose(**kwargs) + @keras_parameterized.run_all_keras_modes class ConvSequentialTest(keras_parameterized.TestCase):