nn_smooth_l1_loss function

Smooth L1 loss

Smooth L1 loss

Creates a criterion that uses a squared term if the absolute element-wise error falls below 1 and an L1 term otherwise. It is less sensitive to outliers than the MSELoss and in some cases prevents exploding gradients (e.g. see Fast R-CNN paper by Ross Girshick). Also known as the Huber loss:

nn_smooth_l1_loss(reduction = "mean")

Arguments

  • reduction: (string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed.

Details

\mboxloss(x,y)=1nizi \mbox{loss}(x, y) = \frac{1}{n} \sum_{i} z_{i}

where ziz_{i} is given by:

zi=0.5(xiyi)2,\mboxifxiyi<1xiyi0.5,\mboxotherwise z_{i} =\begin{array}{ll}0.5 (x_i - y_i)^2, & \mbox{if } |x_i - y_i| < 1 \\|x_i - y_i| - 0.5, & \mbox{otherwise }\end{array}

xx and yy arbitrary shapes with a total of nn elements each the sum operation still operates over all the elements, and divides by nn. The division by nn can be avoided if sets reduction = 'sum'.

Shape

  • Input: (N,)(N, *) where * means, any number of additional dimensions
  • Target: (N,)(N, *), same shape as the input
  • Output: scalar. If reduction is 'none', then (N,)(N, *), same shape as the input
  • Maintainer: Daniel Falbel
  • License: MIT + file LICENSE
  • Last published: 2025-02-14