# tf.compat.v1.losses.huber_loss

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/tensorflow/blob/v2.8.4/tensorflow/python/ops/losses/losses_impl.py#L377-L451) |

Adds a [Huber Loss](https://en.wikipedia.org/wiki/Huber_loss) term to the training procedure.

    tf.compat.v1.losses.huber_loss(
        labels,
        predictions,
        weights=1.0,
        delta=1.0,
        scope=None,
        loss_collection=ops.GraphKeys.LOSSES,
        reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
    )

For each value x in `error=labels-predictions`, the following is calculated:

      0.5 * x^2                  if |x| <= d
      0.5 * d^2 + d * (|x| - d)  if |x| > d

where d is `delta`.

`weights` acts as a coefficient for the loss. If a scalar is provided, then
the loss is simply scaled by the given value. If `weights` is a tensor of size
`[batch_size]`, then the total loss for each sample of the batch is rescaled
by the corresponding element in the `weights` vector. If the shape of
`weights` matches the shape of `predictions`, then the loss of each
measurable element of `predictions` is scaled by the corresponding value of
`weights`.

<br />

<br />

<br />

| ## Args ||
|---|---|
| `labels` | The ground truth output tensor, same dimensions as 'predictions'. |
| `predictions` | The predicted outputs. |
| `weights` | Optional `Tensor` whose rank is either 0, or the same rank as `labels`, and must be broadcastable to `labels` (i.e., all dimensions must be either `1`, or the same as the corresponding `losses` dimension). |
| `delta` | `float`, the point where the huber loss function changes from a quadratic to linear. |
| `scope` | The scope for the operations performed in computing the loss. |
| `loss_collection` | collection to which the loss will be added. |
| `reduction` | Type of reduction to apply to loss. |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| Weighted loss float `Tensor`. If `reduction` is `NONE`, this has the same shape as `labels`; otherwise, it is scalar. ||

<br />

<br />

<br />

<br />

| ## Raises ||
|---|---|
| `ValueError` | If the shape of `predictions` doesn't match that of `labels` or if the shape of `weights` is invalid. Also if `labels` or `predictions` is None. |

<br />

<br />

## eager compatibility

<br />

The `loss_collection` argument is ignored when executing eagerly. Consider
holding on to the return value or collecting losses via a [`tf.keras.Model`](https://www.tensorflow.org/versions/r2.8/api_docs/python/tf/keras/Model).

<br />

<br />