Spec-Zone.ru › TensorFlow

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

Внимание: Этот API был разработан для TensorFlow v1. Продолжайте чтение для получения подробностей о том, как перейти с этого API на эквивалентный API в TensorFlow v2. Обратитесь к руководству по миграции TensorFlow v1 в TensorFlow v2 https://www.tensorflow.org/guide/migrate для получения инструкций по миграции остальной части вашего кода.

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

Описание

Используется в ноутбуках

Используется в руководстве
  • Отладка переведенной в TensorFlow 2 обучающей конвейера

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API