View source on GitHub |
Adds a Pinball loss for quantile regression.
tf_agents.bandits.policies.loss_utils.pinball_loss(
y_true: tf_agents.typing.types.Tensor
,
y_pred: tf_agents.typing.types.Tensor
,
weights: 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
) -> 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
.
Returns | |
---|---|
Weighted Pinball loss float Tensor . If reduction is NONE , this has the
same shape as labels ; otherwise, it is scalar.
|
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.
|
eager compatibility
The loss_collection
argument is ignored when executing eagerly. Consider
holding on to the return value or collecting losses via a tf.keras.Model
.