View source on GitHub |
Computes the Ordinal loss between y_true
and y_pred
.
tfr.keras.losses.OrdinalLoss(
reduction: tf.losses.Reduction = tf.losses.Reduction.AUTO,
name: Optional[str] = None,
ragged: bool = False,
ordinal_size: int = 1,
use_fraction_label: bool = False
)
In ordinal loss, y_pred is a 3D tensor with the last dimension equals to ordinal_size.
loss = -\sum_i=0^ordinal_size-1 I_{y_true > i} log(sigmoid(y_pred[i])) +
I_{y_true <= i} log(1-sigmoid(y_pred[i]))
Standalone usage:
y_true = [[1., 0.]]
y_pred = [[[0.6, 0.2], [0.8, 0.3]]]
loss = tfr.keras.losses.OrdinalLoss(ordinal_size=2)
loss(y_true, y_pred).numpy()
1.6305413
# Using ragged tensors
y_true = tf.ragged.constant([[2., 1.], [0.]])
y_pred = tf.ragged.constant([[[0.6, 0.2], [0.8, 0.3]], [[0., -0.2]]])
loss = tfr.keras.losses.OrdinalLoss(ordinal_size=2, ragged=True)
loss(y_true, y_pred).numpy()
0.88809216
Usage with the compile()
API:
model.compile(optimizer='sgd',
loss=tfr.keras.losses.OrdinalLoss(ordinal_size=2))
Definition:
\[ \mathcal{L}(\{y\}, \{s\}) = - \sum_i\sum_{j=0}^{m-1} I_{y_i > j} \log(\text{sigmoid}(s_{i,j})) + I_{y_i \leq j} \log(1 - \text{sigmoid}(s_{i,j})) \]
Args | |
---|---|
reduction
|
Type of tf.keras.losses.Reduction to apply to
loss. Default value is AUTO . AUTO indicates that the
reduction option will be determined by the usage context. For
almost all cases this defaults to SUM_OVER_BATCH_SIZE . When
used under a tf.distribute.Strategy , except via
Model.compile() and Model.fit() , using AUTO or
SUM_OVER_BATCH_SIZE will raise an error. Please see this
custom training tutorial
for more details.
|
name
|
Optional name for the instance. |
Methods
from_config
@classmethod
from_config( config )
Instantiates a Loss
from its config (output of get_config()
).
Args | |
---|---|
config
|
Output of get_config() .
|
Returns | |
---|---|
A Loss instance.
|
get_config
get_config() -> Dict[str, Any]
Returns the config dictionary for a Loss
instance.
__call__
__call__(
y_true: tfr.keras.model.TensorLike
,
y_pred: tfr.keras.model.TensorLike
,
sample_weight: Optional[utils.TensorLike] = None
) -> tf.Tensor
See tf.keras.losses.Loss.