fusionlab.nn.losses.objective_loss

fusionlab.nn.losses.objective_loss(multi_obj_loss, anomaly_scores=None)[source]

Create a multi-objective Keras loss function that wraps a MultiObjectiveLoss layer, optionally including anomaly scores.

Parameters:
  • multi_obj_loss (MultiObjectiveLoss) –

    A MultiObjectiveLoss instance that combines quantile loss and anomaly loss. Typically you create it via:

    MultiObjectiveLoss(

    quantile_loss_fn=AdaptiveQuantileLoss(…), anomaly_loss_fn=AnomalyLoss(…)

    )

  • anomaly_scores (tf.Tensor or None, optional) – Tensor of shape (B, H, D) representing anomaly scores. If None, anomaly loss is omitted. Defaults to None.

Returns:

A function loss_fn(y_true, y_pred) -> scalar, suitable for model.compile(loss=…).

Return type:

callable

Notes

This function is “Keras-serializable” in that you can save and load models using it. Under the hood, it calls multi_obj_loss(y_true, y_pred, anomaly_scores). If anomaly_scores is None, only the quantile loss is used.

Examples

>>> from fusionlab.nn.components import (
...    MultiObjectiveLoss, AdaptiveQuantileLoss, AnomalyLoss
... )
>>> mo_loss = MultiObjectiveLoss(
...     quantile_loss_fn=AdaptiveQuantileLoss([0.1, 0.5, 0.9]),
...     anomaly_loss_fn=AnomalyLoss(weight=1.5)
... )
>>> # Suppose anomaly_scores is some Tensor
>>> anomaly_scores = tf.random.normal((32, 10, 8))
>>> # Wrap everything as a single Keras loss function
>>> loss_fn = objective_loss(
...     multi_obj_loss=mo_loss,
...     anomaly_scores=anomaly_scores
... )
>>> # Now you can do:
... model.compile(optimizer="adam", loss=loss_fn)

See also

fusionlab.nn.losses.MultiObjectiveLoss

The layer combining quantile + anomaly losses.