Source code for pyqit.core.losses.hinge
import pennylane.numpy as pnp
from pyqit.core.losses.base import BaseLoss
def hinge_loss(preds, targets):
"""Hinge loss function for binary classification.
Parameters
----------
preds : array-like
Class-1 probabilities from the model, mapped back to signed scores
in ``[-1, 1]`` so a confident correct prediction reaches zero loss.
targets : array-like
The ground truth binary labels, expected to be encoded as 0 or 1.
Returns
-------
float or tensor
The computed mean hinge loss across the batch."""
y_signed = 2.0 * targets - 1.0
scores = 2.0 * preds - 1.0
return pnp.mean(pnp.maximum(0, 1 - scores * y_signed))
[docs]
class HingeLoss(BaseLoss):
"""Hinge loss for binary labels encoded as 0/1.
Select it with ``Trainer(loss_fn="hinge")``. Models emit class-1
probabilities, so both the probability and the label are mapped onto
``[-1, 1]`` before the margin is taken. A confident correct prediction
reaches zero loss.
"""
_tags = {"name": "hinge"}
def _pennylane(self, preds, targets):
return hinge_loss(preds, targets)
def _torch(self, preds, targets):
import torch
y_signed = 2.0 * targets.to(preds.dtype) - 1.0
scores = 2.0 * preds - 1.0
return torch.clamp(1.0 - y_signed * scores, min=0.0).mean()