Spec-Zone.ru › TensorFlow 2.9

tf.estimator.MultiLabelHead

Просмотреть исходный код на GitHub

Создаёт Head для многоклассовой классификации.

Наследуется от: Head

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.estimator.MultiLabelHead

tf.estimator.MultiLabelHead(
    n_classes,
    weight_column=None,
    thresholds=None,
    label_vocabulary=None,
    loss_reduction=tf.losses.Reduction.SUM_OVER_BATCH_SIZE,
    loss_fn=None,
    classes_for_class_based_metrics=None,
    name=None
)

Многоклассовая классификация обрабатывает случаи, когда у каждого примера может быть ноль или более связанных меток из дискретного набора. Это отличается от MultiClassHead, у которой ровно одна метка на пример.

Использует sigmoid_cross_entropy потерь, усредняя по классам и взвешивая сумму по пакету. Иными словами, если входные логиты имеют форму [batch_size, n_classes], потери представляют собой среднее значение по n_classes и взвешенную сумму по batch_size.

Заголовок ожидает logits с формой [D0, D1, ... DN, n_classes]. Во многих приложениях форма имеет вид [batch_size, n_classes].

Метки могут быть:

  • Многомерный тензор формы [D0, D1, ... DN, n_classes]
  • Целое SparseTensor индексов классов. dense_shape должно быть [D0, D1, ... DN, ?], а значения внутри [0, n_classes).
  • Если label_vocabulary задано, строковый SparseTensor. dense_shape должно быть [D0, D1, ... DN, ?], а значения внутри label_vocabulary или многомерный тензор формы [D0, D1, ... DN, n_classes].

Если weight_column указано, веса должны иметь форму [D0, D1, ... DN], или [D0, D1, ... DN, 1].

Также поддерживает пользовательские loss_fn. loss_fn принимает (labels, logits) или (labels, logits, features) в качестве аргументов и возвращает нередуцированные потери с формой [D0, D1, ... DN, 1]. loss_fn должен поддерживать индикатор labels с формой [D0, D1, ... DN, n_classes]. Иными словами, заголовок применяет label_vocabulary к входным меткам перед передачей их loss_fn.

Использование:

n_classes = 2
head = tf.estimator.MultiLabelHead(n_classes)
logits = np.array([[-1., 1.], [-1.5, 1.5]], dtype=np.float32)
labels = np.array([[1, 0], [1, 1]], dtype=np.int64)
features = {'x': np.array([[41], [42]], dtype=np.int32)}
# expected_loss = sum(_sigmoid_cross_entropy(labels, logits)) / batch_size
#               = sum(1.31326169, 0.9514133) / 2 = 1.13
loss = head.loss(labels, logits, features=features)
print('{:.2f}'.format(loss.numpy()))
1.13
eval_metrics = head.metrics()
updated_metrics = head.update_metrics(
  eval_metrics, features, logits, labels)
for k in sorted(updated_metrics):
 print('{} : {:.2f}'.format(k, updated_metrics[k].result().numpy()))
auc : 0.33
auc_precision_recall : 0.77
average_loss : 1.13
preds = head.predictions(logits)
print(preds['logits'])
tf.Tensor(
  [[-1.   1. ]
   [-1.5  1.5]], shape=(2, 2), dtype=float32)

Использование с готовым оценщиком:

my_head = tf.estimator.MultiLabelHead(n_classes=3)
my_estimator = tf.estimator.DNNEstimator(
    head=my_head,
    hidden_units=...,
    feature_columns=...)

Его также можно использовать с пользовательским model_fn. Пример:

def _my_model_fn(features, labels, mode):
  my_head = tf.estimator.MultiLabelHead(n_classes=3)
  logits = tf.keras.Model(...)(features)

  return my_head.create_estimator_spec(
      features=features,
      mode=mode,
      labels=labels,
      optimizer=tf.keras.optimizers.Adagrad(lr=0.1),
      logits=logits)

my_estimator = tf.estimator.Estimator(model_fn=_my_model_fn)
Аргументы
n_classes Количество классов, должно быть больше 1 (для 1 класса используйте BinaryClassHead).
weight_column Строка или NumericColumn, созданная с помощью tf.feature_column.numeric_column, определяющая столбец признаков, представляющий веса. Используется для снижения или повышения весов примеров во время обучения. Он будет умножен на потери примера. Взвешивание по классам не поддерживается.
thresholds Последовательность чисел с плавающей точкой в диапазоне (0, 1). Метрики точности, полноты и точности оцениваются для каждого значения порога. Порог применяется к предсказанным вероятностям, т.е. выше порога — true, ниже — false.
label_vocabulary Список строк, представляющих возможные значения меток. Если его нет, это означает, что метки уже закодированы как целые числа в [0, n_classes) или многомерный тензор. Если задан, метки должны быть SparseTensor string типа и иметь любое значение в label_vocabulary. Также будут ошибки, если словарь не предоставлен, а метки — строковые.
loss_reduction Один из tf.losses.Reduction за исключением NONE. Определяет способ уменьшения потерь обучения по пакету. По умолчанию SUM_OVER_BATCH_SIZE, а именно взвешенная сумма потерь, делённая на размер пакета.
loss_fn Необязательная функция потерь.
classes_for_class_based_metrics Список целых идентификаторов классов или строковых имён классов, для которых оцениваются метрики по классам. Если целые числа, все должны быть в диапазоне [0, n_classes - 1]. Если строки, все должны быть в label_vocabulary.
name Имя заголовка. Если предоставлено, ключевые слова сводки и метрик будут дополнены "/" + name. Также используется как name_scope при создании операций.
Атрибуты
logits_dimension См. base_head.Head для получения подробной информации.
loss_reduction См. base_head.Head для получения подробной информации.
name См. base_head.Head для получения подробной информации.

Методы

create_estimator_spec

Просмотреть исходный код

create_estimator_spec(
    features,
    mode,
    logits,
    labels=None,
    optimizer=None,
    trainable_variables=None,
    train_op_fn=None,
    update_ops=None,
    regularization_losses=None
)

Возвращает EstimatorSpec, которое может вернуть model_fn.

Рекомендуется передавать все аргументы через имя.

Аргументы
features Входное dict отображение имён признаков строки на Tensor или SparseTensor объекты, содержащие значения для этого признака в мини-пакете. Часто используется для получения тензора весов примера.
mode ModeKeys оценщика.
logits Логиты Tensor для использования заголовком.
labels Метки Tensor, или dict отображение имён меток строки на Tensor объекты значений меток.
optimizer Экземпляр tf.keras.optimizers.Optimizer для оптимизации потерь в режиме ОБУЧЕНИЯ. То есть, устанавливает train_op = optimizer.get_updates(loss, trainable_variables), которая обновляет переменные для минимизации loss.
trainable_variables Список или кортеж объектов Variable для обновления, чтобы минимизировать loss. В Tensorflow 1.x по умолчанию это список переменных, собранных в графе по ключу GraphKeys.TRAINABLE_VARIABLES. Так как в Tensorflow 2.x нет коллекций и GraphKeys, trainable_variables необходимо явно передать здесь.
train_op_fn Функция, которая принимает скалярные потери Tensor и возвращает операцию для оптимизации модели с потерями в режиме ОБУЧЕНИЯ. Используется, если optimizer равно None. В режиме ОБУЧЕНИЯ ровно один из train_op_fn и optimizer должен быть установлен. По умолчанию это None в других режимах. Если вы хотите оптимизировать потери самостоятельно, вы можете передать lambda _: tf.no_op() и затем использовать EstimatorSpec.loss для вычисления и применения градиентов.
update_ops Список или кортеж операций обновления, которые необходимо выполнить во время обучения. Например, слои, такие как BatchNormalization, создают операции обновления среднего и дисперсии, которые необходимо выполнить во время обучения. В Tensorflow 1.x они попадают в коллекцию UPDATE_OPS. Поскольку в Tensorflow 2.x нет коллекций, update_ops необходимо передавать явно здесь.
regularization_losses Список дополнительных скалярных потерь, которые необходимо добавить к потерям обучения, таких как потери регуляризации.
Возвращаемое значение
EstimatorSpec.

loss

Просмотреть исходный код

loss(
    labels, logits, features=None, mode=None, regularization_losses=None
)

Возвращает результирующие потери обучения. См. base_head.Head для получения подробной информации.

metrics

Просмотреть исходный код

metrics(
    regularization_losses=None
)

Создаёт метрики. См. base_head.Head для получения подробной информации.

predictions

Просмотреть исходный код

predictions(
    logits, keys=None
)

Возвращает предсказания на основе ключей.

См. base_head.Head для получения подробной информации.

Аргументы
logits Логиты Tensor с формой [D0, D1, ... DN, logits_dimension]. Для многих приложений форма имеет вид [batch_size, logits_dimension].
keys Список ключей предсказаний. Ключ может быть либо переменной класса prediction_keys.PredictionKeys, либо его строковым значением, например: prediction_keys.PredictionKeys.LOGITS или 'logits'.
Возвращаемое значение
Словарь предсказаний.

update_metrics

Просмотреть исходный код

update_metrics(
    eval_metrics, features, logits, labels, regularization_losses=None
)

Обновляет метрики оценки. См. base_head.Head для получения подробной информации.

© 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/versions/r2.9/api_docs/python/tf/estimator/MultiLabelHead

Spec-Zone.ru

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