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.TensororNone, 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.MultiObjectiveLossThe layer combining quantile + anomaly losses.