tf.compat.v1.losses.softmax_cross_entropy
Создаёт потерю кросс-энтропии с использованием tf.nn.softmax_cross_entropy_with_logits_v2.
tf.compat.v1.losses.softmax_cross_entropy(
onehot_labels,
logits,
weights=1.0,
label_smoothing=0,
scope=None,
loss_collection=ops.GraphKeys.LOSSES,
reduction=Reduction.SUM_BY_NONZERO_WEIGHTS
)
Переход к TF2
tf.compat.v1.losses.softmax_cross_entropy в основном совместим с выполнением в режиме eager и tf.function. Однако аргумент loss_collection игнорируется при выполнении в режиме eager, и никакие потери не будут записаны в коллекции потерь. Вам нужно будет либо вручную сохранить возвращаемое значение, либо полагаться на отслеживание потерь с помощью tf.keras.Model.
Для перехода к стилю TF2, создайте экземпляр класса tf.keras.losses.CategoricalCrossentropy с from_logits, установленным как True, и вызовите этот объект вместо него.
Структурное отображение на native TF2
До:
loss = tf.compat.v1.losses.softmax_cross_entropy( onehot_labels=onehot_labels, logits=logits, weights=weights, label_smoothing=smoothing)
После:
loss_fn = tf.keras.losses.CategoricalCrossentropy( from_logits=True, label_smoothing=smoothing) loss = loss_fn( y_true=onehot_labels, y_pred=logits, sample_weight=weights)
Как сопоставить аргументы
| Имя аргумента TF1 | Имя аргумента TF2 | Примечание |
|---|---|---|
| - |
from_logits | Установите from_logits как True для получения идентичного поведения |
onehot_labels | y_true | В методе __call__() |
logits | y_pred | В методе __call__() |
weights | sample_weight | В методе __call__() |
label_smoothing | label_smoothing | В конструкторе |
scope | Не поддерживается | - |
loss_collection | Не поддерживается | Потери должны отслеживаться явно или с помощью API Keras, например, add_loss, а не через коллекции |
reduction |
reduction | В конструкторе. Значения tf.compat.v1.losses.Reduction.SUM_OVER_BATCH_SIZE, tf.compat.v1.losses.Reduction.SUM, tf.compat.v1.losses.Reduction.NONE в tf.compat.v1.losses.softmax_cross_entropy соответствуют tf.keras.losses.Reduction.SUM_OVER_BATCH_SIZE, tf.keras.losses.Reduction.SUM, tf.keras.losses.Reduction.NONE соответственно. Если вы использовали другое значение для reduction, включая значение по умолчанию tf.compat.v1.losses.Reduction.SUM_BY_NONZERO_WEIGHTS, нет прямо соответствующего значения. Пожалуйста, измените реализацию потерь вручную. |
Пример использования до и после
До:
y_true = [[0, 1, 0], [0, 0, 1]] y_pred = [[0.05, 0.95, 0], [0.1, 0.8, 0.1]] weights = [0.3, 0.7] smoothing = 0.2 tf.compat.v1.losses.softmax_cross_entropy(y_true, y_pred, weights=weights, label_smoothing=smoothing).numpy() 0.57618
После:
cce = tf.keras.losses.CategoricalCrossentropy(from_logits=True, label_smoothing=smoothing) cce(y_true, y_pred, sample_weight=weights).numpy() 0.57618
Описание
Используется в ноутбуках
| Используется в руководстве |
|---|
weights действует как коэффициент для потерь. Если задан скаляр, то потери просто масштабируются на заданное значение. Если weights является тензором формы [batch_size], то весовые коэффициенты потерь применяются к каждой соответствующей выборке.
Если label_smoothing не равно нулю, сгладьте метки до 1/num_classes: new_onehot_labels = onehot_labels * (1 - label_smoothing)
+ label_smoothing / num_classes
Обратите внимание, что onehot_labels и logits должны иметь одинаковую форму, например, [batch_size, num_classes]. Форма weights должна быть совместима с потерей, форма которой определяется формой logits. В случае, если форма logits равна [batch_size, num_classes], потери представляют собой Tensor формы [batch_size].
| Args | |
|---|---|
onehot_labels | Метки в формате one-hot. |
logits | Логиты выходных данных сети. |
weights | Необязательные весовые коэффициенты, которые совместимы с потерей. |
label_smoothing | Если больше 0, то сглаживаются метки. |
scope | Область видимости операций, выполняемых при вычислении потерь. |
loss_collection | Коллекция, к которой будут добавлены потери. |
reduction | Тип редукции, применяемый к потерям. |
| Returns | |
|---|---|
Весовые потери Tensor того же типа, что и logits. Если reduction равно NONE, это имеет форму [batch_size]; в противном случае это скаляр. |
| Raises | |
|---|---|
ValueError | Если форма logits не совпадает с формой onehot_labels, или если форма weights некорректна, или если weights равно None. Также, если onehot_labels или logits равно None. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/losses/softmax_cross_entropy