From ae53ab4d2209951596fccbe4a1681b5e47ad1528 Mon Sep 17 00:00:00 2001 From: Xiaoquan Kong Date: Tue, 2 Jun 2020 15:40:39 +0800 Subject: [PATCH 1/5] bugfix: add method to check penalty number availability --- tensorflow/python/keras/regularizers.py | 29 +++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/tensorflow/python/keras/regularizers.py b/tensorflow/python/keras/regularizers.py index b8bae4cc155..2105fe8be43 100644 --- a/tensorflow/python/keras/regularizers.py +++ b/tensorflow/python/keras/regularizers.py @@ -19,6 +19,8 @@ from __future__ import absolute_import from __future__ import division from __future__ import print_function +import math + import six from tensorflow.python.keras import backend @@ -192,6 +194,24 @@ class Regularizer(object): """ raise NotImplementedError(str(self) + ' does not implement get_config()') + def _check_penalty_number(self, x): + """check penalty number availability, raise ValueError if failed""" + if not isinstance(x, (float, int)): + raise ValueError( + ( + "Value: {} is not a valid regularization penalty number, " + "expected an int or float value" + ).format(x) + ) + + if math.isinf(x) or math.isnan(x): + raise ValueError( + ( + "Value: {} is not a valid regularization penalty number, " + "a positive/negative infinity or NaN is not a property value" + ) + ) + @keras_export('keras.regularizers.L1L2') class L1L2(Regularizer): @@ -215,6 +235,9 @@ class L1L2(Regularizer): """ def __init__(self, l1=0., l2=0.): # pylint: disable=redefined-outer-name + self._check_penalty_number(l1) + self._check_penalty_number(l2) + self.l1 = backend.cast_to_floatx(l1) self.l2 = backend.cast_to_floatx(l2) @@ -251,6 +274,9 @@ class L1(Regularizer): l1 = kwargs.pop('l', l1) # Backwards compatibility if kwargs: raise TypeError('Argument(s) not recognized: %s' % (kwargs,)) + + self._check_penalty_number(l1) + self.l1 = backend.cast_to_floatx(l1) def __call__(self, x): @@ -281,6 +307,9 @@ class L2(Regularizer): l2 = kwargs.pop('l', l2) # Backwards compatibility if kwargs: raise TypeError('Argument(s) not recognized: %s' % (kwargs,)) + + self._check_penalty_number(l2) + self.l2 = backend.cast_to_floatx(l2) def __call__(self, x): From 56ff49b74aab14c609975dc2f4a4af09d48070a0 Mon Sep 17 00:00:00 2001 From: Xiaoquan Kong Date: Tue, 2 Jun 2020 16:27:29 +0800 Subject: [PATCH 2/5] bugfix: missing format string part --- tensorflow/python/keras/regularizers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tensorflow/python/keras/regularizers.py b/tensorflow/python/keras/regularizers.py index 2105fe8be43..7c1b280a1dc 100644 --- a/tensorflow/python/keras/regularizers.py +++ b/tensorflow/python/keras/regularizers.py @@ -209,7 +209,7 @@ class Regularizer(object): ( "Value: {} is not a valid regularization penalty number, " "a positive/negative infinity or NaN is not a property value" - ) + ).format(x) ) From e0a29900c5d8986b127941743082d46c28dad79b Mon Sep 17 00:00:00 2001 From: Xiaoquan Kong Date: Wed, 3 Jun 2020 14:24:36 +0800 Subject: [PATCH 3/5] refactor: change check_penalty_number from instance method to function --- tensorflow/python/keras/regularizers.py | 45 +++++++++++++------------ 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/tensorflow/python/keras/regularizers.py b/tensorflow/python/keras/regularizers.py index 7c1b280a1dc..bc032d9a1e2 100644 --- a/tensorflow/python/keras/regularizers.py +++ b/tensorflow/python/keras/regularizers.py @@ -30,6 +30,25 @@ from tensorflow.python.ops import math_ops from tensorflow.python.util.tf_export import keras_export +def _check_penalty_number(self, x): + """check penalty number availability, raise ValueError if failed""" + if not isinstance(x, (float, int)): + raise ValueError( + ( + "Value: {} is not a valid regularization penalty number, " + "expected an int or float value" + ).format(x) + ) + + if math.isinf(x) or math.isnan(x): + raise ValueError( + ( + "Value: {} is not a valid regularization penalty number, " + "a positive/negative infinity or NaN is not a property value" + ).format(x) + ) + + @keras_export('keras.regularizers.Regularizer') class Regularizer(object): """Regularizer base class. @@ -194,24 +213,6 @@ class Regularizer(object): """ raise NotImplementedError(str(self) + ' does not implement get_config()') - def _check_penalty_number(self, x): - """check penalty number availability, raise ValueError if failed""" - if not isinstance(x, (float, int)): - raise ValueError( - ( - "Value: {} is not a valid regularization penalty number, " - "expected an int or float value" - ).format(x) - ) - - if math.isinf(x) or math.isnan(x): - raise ValueError( - ( - "Value: {} is not a valid regularization penalty number, " - "a positive/negative infinity or NaN is not a property value" - ).format(x) - ) - @keras_export('keras.regularizers.L1L2') class L1L2(Regularizer): @@ -235,8 +236,8 @@ class L1L2(Regularizer): """ def __init__(self, l1=0., l2=0.): # pylint: disable=redefined-outer-name - self._check_penalty_number(l1) - self._check_penalty_number(l2) + _check_penalty_number(l1) + _check_penalty_number(l2) self.l1 = backend.cast_to_floatx(l1) self.l2 = backend.cast_to_floatx(l2) @@ -275,7 +276,7 @@ class L1(Regularizer): if kwargs: raise TypeError('Argument(s) not recognized: %s' % (kwargs,)) - self._check_penalty_number(l1) + _check_penalty_number(l1) self.l1 = backend.cast_to_floatx(l1) @@ -308,7 +309,7 @@ class L2(Regularizer): if kwargs: raise TypeError('Argument(s) not recognized: %s' % (kwargs,)) - self._check_penalty_number(l2) + _check_penalty_number(l2) self.l2 = backend.cast_to_floatx(l2) From 4f96acb5fdaf5d2e09e125d2d76874bebd52650c Mon Sep 17 00:00:00 2001 From: Xiaoquan Kong Date: Wed, 3 Jun 2020 14:39:38 +0800 Subject: [PATCH 4/5] bugfix --- tensorflow/python/keras/regularizers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tensorflow/python/keras/regularizers.py b/tensorflow/python/keras/regularizers.py index bc032d9a1e2..d8b688ed3b9 100644 --- a/tensorflow/python/keras/regularizers.py +++ b/tensorflow/python/keras/regularizers.py @@ -30,7 +30,7 @@ from tensorflow.python.ops import math_ops from tensorflow.python.util.tf_export import keras_export -def _check_penalty_number(self, x): +def _check_penalty_number(x): """check penalty number availability, raise ValueError if failed""" if not isinstance(x, (float, int)): raise ValueError( From b79a1ae8d7f78462f84a31a5a6789f603ca930fd Mon Sep 17 00:00:00 2001 From: Xiaoquan Kong Date: Wed, 3 Jun 2020 14:53:56 +0800 Subject: [PATCH 5/5] stylefix: fix code style --- tensorflow/python/keras/regularizers.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tensorflow/python/keras/regularizers.py b/tensorflow/python/keras/regularizers.py index d8b688ed3b9..b0198e7a44b 100644 --- a/tensorflow/python/keras/regularizers.py +++ b/tensorflow/python/keras/regularizers.py @@ -34,18 +34,18 @@ def _check_penalty_number(x): """check penalty number availability, raise ValueError if failed""" if not isinstance(x, (float, int)): raise ValueError( - ( - "Value: {} is not a valid regularization penalty number, " - "expected an int or float value" - ).format(x) + ( + "Value: {} is not a valid regularization penalty number, " + "expected an int or float value" + ).format(x) ) if math.isinf(x) or math.isnan(x): raise ValueError( - ( - "Value: {} is not a valid regularization penalty number, " - "a positive/negative infinity or NaN is not a property value" - ).format(x) + ( + "Value: {} is not a valid regularization penalty number, " + "a positive/negative infinity or NaN is not a property value" + ).format(x) )