# tf_agents.bandits.policies.loss_utils.pinball_loss

<br />

|---|
| [![](https://www.tensorflow.org/images/GitHub-Mark-32px.png) View source on GitHub](https://github.com/tensorflow/agents/blob/v0.19.0/tf_agents/bandits/policies/loss_utils.py#L28-L94) |

Adds a Pinball loss for quantile regression.

    tf_agents.bandits.policies.loss_utils.pinball_loss(
        y_true: https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/Tensor,
        y_pred: https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/Tensor,
        weights: https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/Float = 1.0,
        scope: Optional[Text] = None,
        loss_collection: tf.compat.v1.GraphKeys = tf.compat.v1.GraphKeys.LOSSES,
        reduction: tf.compat.v1.losses.Reduction = tf.compat.v1.losses.Reduction.SUM_BY_NONZERO_WEIGHTS,
        quantile: float = 0.5
    ) -> https://www.tensorflow.org/agents/api_docs/python/tf_agents/typing/types/Float

    ```

loss = quantile \* (y_true - y_pred) if y_true \> y_pred
loss = (quantile - 1) \* (y_true - y_pred) otherwise
\`\`\`

See: <https://en.wikipedia.org/wiki/Quantile_regression#Quantiles>

`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 ||
|---|---|
| `y_true` | tensor of true targets. |
| `y_pred` | tensor of predicted targets. |
| `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). |
| `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. |
| `quantile` | A float between 0. and 1., the quantile we want to regress. |

<br />

<br />

<br />

<br />

| ## Returns ||
|---|---|
| Weighted Pinball 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/api_docs/python/tf/keras/Model).

<br />

<br />