124 lines
4.6 KiB
Python
124 lines
4.6 KiB
Python
|
import numpy as np
|
||
|
|
||
|
from keras_core import operations as ops
|
||
|
from keras_core import testing
|
||
|
from keras_core.losses import losses
|
||
|
|
||
|
|
||
|
class MeanSquaredErrorTest(testing.TestCase):
|
||
|
def test_all_correct_unweighted(self):
|
||
|
mse_obj = losses.MeanSquaredError()
|
||
|
y_true = np.array([[4, 8, 12], [8, 1, 3]])
|
||
|
loss = mse_obj(y_true, y_true)
|
||
|
self.assertAllEqual(loss, 0.0)
|
||
|
|
||
|
def test_unweighted(self):
|
||
|
mse_obj = losses.MeanSquaredError()
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
loss = mse_obj(y_true, y_pred)
|
||
|
self.assertAllEqual(loss, 49.5)
|
||
|
|
||
|
def test_scalar_weighted(self):
|
||
|
mse_obj = losses.MeanSquaredError()
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
loss = mse_obj(y_true, y_pred, sample_weight=2.3)
|
||
|
self.assertAllEqual(loss, 113.85)
|
||
|
|
||
|
def test_sample_weighted(self):
|
||
|
mse_obj = losses.MeanSquaredError()
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
sample_weight = np.array([[1.2], [3.4]])
|
||
|
loss = mse_obj(y_true, y_pred, sample_weight=sample_weight)
|
||
|
self.assertAllEqual(loss, 767.8 / 6)
|
||
|
|
||
|
def test_timestep_weighted(self):
|
||
|
# TODO
|
||
|
pass
|
||
|
|
||
|
def test_zero_weighted(self):
|
||
|
mse_obj = losses.MeanSquaredError()
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
loss = mse_obj(y_true, y_pred, sample_weight=0)
|
||
|
self.assertAllEqual(loss, 0.0)
|
||
|
|
||
|
def test_invalid_sample_weight(self):
|
||
|
# TODO
|
||
|
pass
|
||
|
|
||
|
def test_no_reduction(self):
|
||
|
mse_obj = losses.MeanSquaredError(reduction=None)
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
loss = mse_obj(y_true, y_pred, sample_weight=2.3)
|
||
|
self.assertAllEqual(loss, [84.3333, 143.3666])
|
||
|
|
||
|
def test_sum_reduction(self):
|
||
|
mse_obj = losses.MeanSquaredError(reduction="sum")
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
loss = mse_obj(y_true, y_pred, sample_weight=2.3)
|
||
|
self.assertAllEqual(loss, 227.69998)
|
||
|
|
||
|
|
||
|
class MeanAbsoluteErrorTest(testing.TestCase):
|
||
|
def test_all_correct_unweighted(self):
|
||
|
mae_obj = losses.MeanAbsoluteError()
|
||
|
y_true = np.array([[4, 8, 12], [8, 1, 3]])
|
||
|
loss = mae_obj(y_true, y_true)
|
||
|
self.assertAllEqual(loss, 0.0)
|
||
|
|
||
|
def test_unweighted(self):
|
||
|
mae_obj = losses.MeanAbsoluteError()
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
loss = mae_obj(y_true, y_pred)
|
||
|
self.assertAllEqual(loss, 5.5)
|
||
|
|
||
|
def test_scalar_weighted(self):
|
||
|
mae_obj = losses.MeanAbsoluteError()
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
loss = mae_obj(y_true, y_pred, sample_weight=2.3)
|
||
|
self.assertAllEqual(loss, 12.65)
|
||
|
|
||
|
def test_sample_weighted(self):
|
||
|
mae_obj = losses.MeanAbsoluteError()
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
sample_weight = np.array([[1.2], [3.4]])
|
||
|
loss = mae_obj(y_true, y_pred, sample_weight=sample_weight)
|
||
|
self.assertAllEqual(loss, 81.4 / 6)
|
||
|
|
||
|
def test_timestep_weighted(self):
|
||
|
# TODO
|
||
|
pass
|
||
|
|
||
|
def test_zero_weighted(self):
|
||
|
mae_obj = losses.MeanAbsoluteError()
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
loss = mae_obj(y_true, y_pred, sample_weight=0)
|
||
|
self.assertAllEqual(loss, 0.0)
|
||
|
|
||
|
def test_invalid_sample_weight(self):
|
||
|
# TODO
|
||
|
pass
|
||
|
|
||
|
def test_no_reduction(self):
|
||
|
mae_obj = losses.MeanAbsoluteError(reduction=None)
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
loss = mae_obj(y_true, y_pred, sample_weight=2.3)
|
||
|
self.assertAllEqual(loss, [10.7333, 14.5666])
|
||
|
|
||
|
def test_sum_reduction(self):
|
||
|
mae_obj = losses.MeanAbsoluteError(reduction="sum")
|
||
|
y_true = np.array([[1, 9, 2], [-5, -2, 6]])
|
||
|
y_pred = np.array([[4, 8, 12], [8, 1, 3]], dtype="float32")
|
||
|
loss = mae_obj(y_true, y_pred, sample_weight=2.3)
|
||
|
self.assertAllEqual(loss, 25.29999)
|