From 55240a22f10a9a6cf3cf8ba3d35e16d88f5925f6 Mon Sep 17 00:00:00 2001 From: Pavithra Vijay Date: Mon, 4 Mar 2019 11:55:34 -0800 Subject: [PATCH] Remove logloss v2 as this is a duplication of bce with probabilities. PiperOrigin-RevId: 236696942 --- tensorflow/python/keras/losses.py | 37 -------- tensorflow/python/keras/losses_test.py | 91 ------------------- .../tensorflow.keras.losses.-log-loss.pbtxt | 23 ----- .../golden/v1/tensorflow.keras.losses.pbtxt | 4 - .../tensorflow.keras.losses.-log-loss.pbtxt | 23 ----- .../golden/v2/tensorflow.keras.losses.pbtxt | 4 - .../v2/tensorflow.losses.-log-loss.pbtxt | 23 ----- .../api/golden/v2/tensorflow.losses.pbtxt | 4 - 8 files changed, 209 deletions(-) delete mode 100644 tensorflow/tools/api/golden/v1/tensorflow.keras.losses.-log-loss.pbtxt delete mode 100644 tensorflow/tools/api/golden/v2/tensorflow.keras.losses.-log-loss.pbtxt delete mode 100644 tensorflow/tools/api/golden/v2/tensorflow.losses.-log-loss.pbtxt diff --git a/tensorflow/python/keras/losses.py b/tensorflow/python/keras/losses.py index 2d8358cab43..62bfcc53889 100644 --- a/tensorflow/python/keras/losses.py +++ b/tensorflow/python/keras/losses.py @@ -532,34 +532,6 @@ class CategoricalHinge(LossFunctionWrapper): categorical_hinge, name=name, reduction=reduction) -@keras_export('keras.losses.LogLoss') -class LogLoss(LossFunctionWrapper): - """Computes the log loss between `y_true` and `y_pred`. - - `logloss = - y_true * log(y_pred) - (1 - y_true) * log(1 - y_pred)` - - Usage: - - ```python - l = tf.keras.losses.LogLoss() - loss = l([0., 1., 1.], [1., 0., 1.]) - print('Loss: ', loss.numpy()) # Loss: 10.745 - ``` - - Usage with tf.keras API: - - ```python - model = tf.keras.Model(inputs, outputs) - model.compile('sgd', loss=tf.keras.losses.LogLoss()) - ``` - """ - - def __init__(self, - reduction=losses_utils.ReductionV2.SUM_OVER_BATCH_SIZE, - name='logloss'): - super(LogLoss, self).__init__(logloss, name=name, reduction=reduction) - - @keras_export('keras.losses.Poisson') class Poisson(LossFunctionWrapper): """Computes the Poisson loss between `y_true` and `y_pred`. @@ -801,15 +773,6 @@ def categorical_hinge(y_true, y_pred): return math_ops.maximum(0., neg - pos + 1.) -def logloss(y_true, y_pred): - y_pred = ops.convert_to_tensor(y_pred) - y_true = math_ops.cast(y_true, y_pred.dtype) - losses = math_ops.multiply(y_true, math_ops.log(y_pred + K.epsilon())) - losses += math_ops.multiply((1 - y_true), - math_ops.log(1 - y_pred + K.epsilon())) - return K.mean(-losses, axis=-1) - - def huber_loss(y_true, y_pred, delta=1.0): """Computes Huber loss value. diff --git a/tensorflow/python/keras/losses_test.py b/tensorflow/python/keras/losses_test.py index 6fe68335e85..766a7e2e84f 100644 --- a/tensorflow/python/keras/losses_test.py +++ b/tensorflow/python/keras/losses_test.py @@ -1193,97 +1193,6 @@ class CategoricalHingeTest(test.TestCase): self.assertAlmostEqual(self.evaluate(loss), 0., 3) -@test_util.run_all_in_graph_and_eager_modes -class LogLossTest(test.TestCase): - - def setup(self): - # TODO(psv): Change to setUp() after b/122319309 is fixed. - y_pred = np.asarray([.9, .2, .2, .8, .4, .6]).reshape((2, 3)) - y_true = np.asarray([1., 0., 1., 1., 0., 0.]).reshape((2, 3)) - epsilon = 1e-7 # to avoid log 0 - - self.batch_size = 6 - self.expected_losses = np.multiply(y_true, np.log(y_pred + epsilon)) - self.expected_losses += np.multiply(1 - y_true, - np.log(1 - y_pred + epsilon)) - self.expected_losses = -self.expected_losses - - self.y_pred = constant_op.constant(y_pred) - self.y_true = constant_op.constant(y_true) - - def test_config(self): - log_loss_obj = keras.losses.LogLoss( - reduction=losses_utils.ReductionV2.SUM, name='log') - self.assertEqual(log_loss_obj.name, 'log') - self.assertEqual(log_loss_obj.reduction, losses_utils.ReductionV2.SUM) - - def test_all_correct(self): - self.setup() - log_loss_obj = keras.losses.LogLoss() - loss = log_loss_obj(self.y_true, self.y_true) - self.assertAlmostEqual(self.evaluate(loss), 0.0, 3) - - def test_unweighted(self): - self.setup() - log_loss_obj = keras.losses.LogLoss() - loss = log_loss_obj(self.y_true, self.y_pred) - actual_loss = np.sum(self.expected_losses) / self.batch_size - self.assertAlmostEqual(self.evaluate(loss), actual_loss, 3) - - def test_scalar_weighted(self): - self.setup() - log_loss_obj = keras.losses.LogLoss() - sample_weight = 2.3 - loss = log_loss_obj(self.y_true, self.y_pred, sample_weight=sample_weight) - actual_loss = sample_weight * np.sum(self.expected_losses) / self.batch_size - self.assertAlmostEqual(self.evaluate(loss), actual_loss, 3) - - # Verify we get the same output when the same input is given - loss_2 = log_loss_obj(self.y_true, self.y_pred, sample_weight=sample_weight) - self.assertAlmostEqual(self.evaluate(loss), self.evaluate(loss_2), 3) - - def test_sample_weighted(self): - self.setup() - log_loss_obj = keras.losses.LogLoss() - sample_weight = constant_op.constant((1.2, 3.4), shape=(2, 1)) - - loss = log_loss_obj(self.y_true, self.y_pred, sample_weight=sample_weight) - actual_loss = np.multiply( - self.expected_losses, - np.asarray([1.2, 1.2, 1.2, 3.4, 3.4, 3.4]).reshape((2, 3))) - actual_loss = np.sum(actual_loss) / self.batch_size - self.assertAlmostEqual(self.evaluate(loss), actual_loss, 3) - - def test_timestep_weighted(self): - log_loss_obj = keras.losses.LogLoss() - - y_pred = np.asarray([.9, .2, .2, .8, .4, .6]).reshape((2, 3, 1)) - y_true = np.asarray([1., 0., 1., 1., 0., 0.]).reshape((2, 3, 1)) - epsilon = 1e-7 # to avoid log 0 - batch_size = 6 - - expected_losses = np.multiply(y_true, np.log(y_pred + epsilon)) - expected_losses += np.multiply(1 - y_true, np.log(1 - y_pred + epsilon)) - - y_pred = constant_op.constant(y_pred) - y_true = constant_op.constant(y_true) - sample_weight = np.array([3, 6, 5, 0, 4, 2]).reshape((2, 3, 1)) - loss = log_loss_obj( - y_true, - y_pred, - sample_weight=constant_op.constant(sample_weight, shape=(2, 3))) - actual_loss = np.multiply(-expected_losses, sample_weight) - actual_loss = np.sum(actual_loss) / batch_size - self.assertAlmostEqual(self.evaluate(loss), actual_loss, 3) - - def test_zero_weighted(self): - self.setup() - log_loss_obj = keras.losses.LogLoss() - sample_weight = 0 - loss = log_loss_obj(self.y_true, self.y_pred, sample_weight=sample_weight) - self.assertAlmostEqual(self.evaluate(loss), 0., 3) - - @test_util.run_all_in_graph_and_eager_modes class LogCoshTest(test.TestCase): diff --git a/tensorflow/tools/api/golden/v1/tensorflow.keras.losses.-log-loss.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.keras.losses.-log-loss.pbtxt deleted file mode 100644 index 40ca239ccee..00000000000 --- a/tensorflow/tools/api/golden/v1/tensorflow.keras.losses.-log-loss.pbtxt +++ /dev/null @@ -1,23 +0,0 @@ -path: "tensorflow.keras.losses.LogLoss" -tf_class { - is_instance: "" - is_instance: "" - is_instance: "" - is_instance: "" - member_method { - name: "__init__" - argspec: "args=[\'self\', \'reduction\', \'name\'], varargs=None, keywords=None, defaults=[\'sum_over_batch_size\', \'logloss\'], " - } - member_method { - name: "call" - argspec: "args=[\'self\', \'y_true\', \'y_pred\'], varargs=None, keywords=None, defaults=None" - } - member_method { - name: "from_config" - argspec: "args=[\'cls\', \'config\'], varargs=None, keywords=None, defaults=None" - } - member_method { - name: "get_config" - argspec: "args=[\'self\'], varargs=None, keywords=None, defaults=None" - } -} diff --git a/tensorflow/tools/api/golden/v1/tensorflow.keras.losses.pbtxt b/tensorflow/tools/api/golden/v1/tensorflow.keras.losses.pbtxt index 7e90b36ead9..e24947ad19a 100644 --- a/tensorflow/tools/api/golden/v1/tensorflow.keras.losses.pbtxt +++ b/tensorflow/tools/api/golden/v1/tensorflow.keras.losses.pbtxt @@ -32,10 +32,6 @@ tf_module { name: "LogCosh" mtype: "" } - member { - name: "LogLoss" - mtype: "" - } member { name: "Loss" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.keras.losses.-log-loss.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.keras.losses.-log-loss.pbtxt deleted file mode 100644 index 40ca239ccee..00000000000 --- a/tensorflow/tools/api/golden/v2/tensorflow.keras.losses.-log-loss.pbtxt +++ /dev/null @@ -1,23 +0,0 @@ -path: "tensorflow.keras.losses.LogLoss" -tf_class { - is_instance: "" - is_instance: "" - is_instance: "" - is_instance: "" - member_method { - name: "__init__" - argspec: "args=[\'self\', \'reduction\', \'name\'], varargs=None, keywords=None, defaults=[\'sum_over_batch_size\', \'logloss\'], " - } - member_method { - name: "call" - argspec: "args=[\'self\', \'y_true\', \'y_pred\'], varargs=None, keywords=None, defaults=None" - } - member_method { - name: "from_config" - argspec: "args=[\'cls\', \'config\'], varargs=None, keywords=None, defaults=None" - } - member_method { - name: "get_config" - argspec: "args=[\'self\'], varargs=None, keywords=None, defaults=None" - } -} diff --git a/tensorflow/tools/api/golden/v2/tensorflow.keras.losses.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.keras.losses.pbtxt index 4ec0e887fc0..a8a4134df5e 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.keras.losses.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.keras.losses.pbtxt @@ -32,10 +32,6 @@ tf_module { name: "LogCosh" mtype: "" } - member { - name: "LogLoss" - mtype: "" - } member { name: "Loss" mtype: "" diff --git a/tensorflow/tools/api/golden/v2/tensorflow.losses.-log-loss.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.losses.-log-loss.pbtxt deleted file mode 100644 index 65b1feaefdd..00000000000 --- a/tensorflow/tools/api/golden/v2/tensorflow.losses.-log-loss.pbtxt +++ /dev/null @@ -1,23 +0,0 @@ -path: "tensorflow.losses.LogLoss" -tf_class { - is_instance: "" - is_instance: "" - is_instance: "" - is_instance: "" - member_method { - name: "__init__" - argspec: "args=[\'self\', \'reduction\', \'name\'], varargs=None, keywords=None, defaults=[\'sum_over_batch_size\', \'logloss\'], " - } - member_method { - name: "call" - argspec: "args=[\'self\', \'y_true\', \'y_pred\'], varargs=None, keywords=None, defaults=None" - } - member_method { - name: "from_config" - argspec: "args=[\'cls\', \'config\'], varargs=None, keywords=None, defaults=None" - } - member_method { - name: "get_config" - argspec: "args=[\'self\'], varargs=None, keywords=None, defaults=None" - } -} diff --git a/tensorflow/tools/api/golden/v2/tensorflow.losses.pbtxt b/tensorflow/tools/api/golden/v2/tensorflow.losses.pbtxt index f688a32db7a..e681f29b99c 100644 --- a/tensorflow/tools/api/golden/v2/tensorflow.losses.pbtxt +++ b/tensorflow/tools/api/golden/v2/tensorflow.losses.pbtxt @@ -32,10 +32,6 @@ tf_module { name: "LogCosh" mtype: "" } - member { - name: "LogLoss" - mtype: "" - } member { name: "Loss" mtype: ""