L1Loss

Contents

L1Loss#

class braintools.metric.L1Loss(reduction='mean')[source]#

Creates a criterion that measures the mean absolute error (MAE) between each element in the input \(x\) and target \(y\).

The unreduced (i.e. with reduction set to 'none') loss can be described as:

\[\ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad l_n = \left| x_n - y_n \right|,\]

where \(N\) is the batch size. If reduction is not 'none' (default 'mean'), then:

\[\begin{split}\ell(x, y) = \begin{cases} \operatorname{mean}(L), & \text{if reduction} = \text{`mean';}\\ \operatorname{sum}(L), & \text{if reduction} = \text{`sum'.} \end{cases}\end{split}\]

\(x\) and \(y\) are tensors of arbitrary shapes with a total of \(n\) elements each.

The mean operation divides by the total number of elements \(n\).

The division by \(n\) can be avoided if one sets reduction = 'sum'.

Supports real-valued and complex-valued inputs.

Parameters:

reduction (str) –

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.

Default: 'mean'.

Notes

  • Input: \((*)\), where \(*\) means any number of dimensions.

  • Target: \((*)\), same shape as the input.

  • Output: scalar. If reduction is 'none', then a per-sample mean absolute error of shape \((N,)\).

Examples

>>> import brainstate
>>> from braintools.metric import L1Loss
>>> loss = L1Loss()
>>> input = brainstate.random.randn(3, 5)
>>> target = brainstate.random.randn(3, 5)
>>> output = loss.update(input, target)