diff --git a/tensorflow/python/keras/layers/preprocessing/normalization.py b/tensorflow/python/keras/layers/preprocessing/normalization.py index 07f8d40ec24..4b75def0247 100644 --- a/tensorflow/python/keras/layers/preprocessing/normalization.py +++ b/tensorflow/python/keras/layers/preprocessing/normalization.py @@ -156,7 +156,8 @@ class Normalization(base_preprocessing_layer.CombinerPreprocessingLayer): # broadcasts the data correctly. mean = array_ops.reshape(self.mean, self._broadcast_shape) variance = array_ops.reshape(self.variance, self._broadcast_shape) - return (inputs - mean) / math_ops.sqrt(variance) + return ((inputs - mean) / + math_ops.maximum(math_ops.sqrt(variance), K.epsilon())) def compute_output_shape(self, input_shape): return input_shape diff --git a/tensorflow/python/keras/layers/preprocessing/normalization_test.py b/tensorflow/python/keras/layers/preprocessing/normalization_test.py index f97b8db50ec..69eafc54adc 100644 --- a/tensorflow/python/keras/layers/preprocessing/normalization_test.py +++ b/tensorflow/python/keras/layers/preprocessing/normalization_test.py @@ -97,6 +97,16 @@ def _get_layer_computation_test_cases(): np.float32), "testcase_name": "3d_multiple_axis" + }, { + "adapt_data": + np.zeros((3, 4)), + "axis": -1, + "test_data": + np.zeros((3, 4)), + "expected": + np.zeros((3, 4)), + "testcase_name": + "zero_variance" }) crossed_test_cases = []