tf.estimator.MultiHead
| Просмотреть исходный код на GitHub |
Создаёт Head для многоцелевого обучения.
Наследуется от: Head
tf.estimator.MultiHead(
heads, head_weights=None
)
Этот класс объединяет результаты нескольких Head объектов. В частности:
- Для обучения суммирует потери каждого объекта, вызывает
train_op_fnс этой итоговой потерей. - Для оценки объединяет метрики, добавляя суффикс
head.nameк ключам в метриках оценки, таким какprecision/head1.name,precision/head2.name. - Для прогнозирования объединяет прогнозы и обновляет ключи в словаре прогнозов до 2-кортежа,
(head.name, prediction_key). Объединяетexport_outputsтаким образом, что по умолчанию используется первый объект.
Использование:
# In `input_fn`, specify labels as a dict keyed by head name:
def input_fn():
features = ...
labels1 = ...
labels2 = ...
return features, {'head1.name': labels1, 'head2.name': labels2}
# In `model_fn`, specify logits as a dict keyed by head name:
def model_fn(features, labels, mode):
# Create simple heads and specify head name.
head1 = tf.estimator.MultiClassHead(n_classes=3, name='head1')
head2 = tf.estimator.BinaryClassHead(name='head2')
# Create MultiHead from two simple heads.
head = tf.estimator.MultiHead([head1, head2])
# Create logits for each head, and combine them into a dict.
logits1, logits2 = logit_fn()
logits = {'head1.name': logits1, 'head2.name': logits2}
# Return the merged EstimatorSpec
return head.create_estimator_spec(..., logits=logits, ...)
# Create an estimator with this model_fn.
estimator = tf.estimator.Estimator(model_fn=model_fn)
estimator.train(input_fn=input_fn)
Также поддерживает logits как Tensor формы [D0, D1, ... DN, logits_dimension]. Он разделит Tensor по последнему измерению и соответствующим образом распределит его между объектами. Например:
Входные логарифмы.
logits = np.array([[-1., 1., 2., -2., 2.], [-1.5, 1., -3., 2., -2.]],
dtype=np.float32)
Предположим, head1.logits_dimension = 2 и head2.logits_dimension = 3. После
разделения, результатом является:
logits_dict = {'head1_name': [[-1., 1.], [-1.5, 1.]],
'head2_name': [[2., -2., 2.], [-3., 2., -2.]]}
Использование:
def model_fn(features, labels, mode): # Create simple heads and specify head name. head1 = tf.estimator.MultiClassHead(n_classes=3, name='head1') head2 = tf.estimator.BinaryClassHead(name='head2') # Create multi-head from two simple heads. head = tf.estimator.MultiHead([head1, head2]) # Create logits for the multihead. The result of logits is a `Tensor`. logits = logit_fn(logits_dimension=head.logits_dimension) # Return the merged EstimatorSpec return head.create_estimator_spec(..., logits=logits, ...)
| Аргументы | |
|---|---|
heads | Список или кортеж Head экземпляров. Все объекты должны иметь указанные name. Первый объект в списке используется по умолчанию во время предоставления сервиса. |
head_weights | Необязательный список весов, такой же длины, как и heads. Используется при объединении потерь для вычисления взвешенной суммы потерь от каждого объекта. Если None, все потери имеют одинаковый вес. |
| Атрибуты | |
|---|---|
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
)
Возвращает model_fn.EstimatorSpec.
| Аргументы | |
|---|---|
features | Входные dict объектов Tensor или SparseTensor. |
mode | ModeKeys оценщика. |
logits | Входные dict с ключами по имени объекта или логарифмы Tensor с формой [D0, D1, ... DN, logits_dimension]. Для многих приложений форма Tensor является [batch_size, logits_dimension]. Если логарифмы являются Tensor, то они разделены по последнему измерению и распределяются между объектами соответствующим образом. См. MultiHead для примеров. |
labels | Входные dict с ключами по имени объекта. Для каждого объекта значение метки может быть целым числом или строкой Tensor с формой, соответствующей его соответствующей logits. labels — обязательный аргумент, когда mode равно TRAIN или EVAL |
optimizer | Экземпляр tf.keras.optimizers.Optimizer для оптимизации потерь в режиме TRAIN. А именно, устанавливает 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 и возвращает train_op. Используется, если optimizer равно None. |
update_ops | Список или кортеж операций обновления, которые нужно выполнять во время обучения. Например, слои, такие как BatchNormalization, создают операции обновления среднего и дисперсии, которые необходимо выполнять во время обучения. В Tensorflow 1.x они помещаются в коллекцию UPDATE_OPS. Так как в Tensorflow 2.x нет коллекций, update_ops нужно передавать явно здесь. |
regularization_losses | Список дополнительных скалярных потерь, которые нужно добавить к тренировочной потере, например, потери регуляризации. Эти потери обычно выражаются как среднее значение по пакету, поэтому для наилучших результатов в каждом объекте пользователям необходимо использовать значение loss_reduction=SUM_OVER_BATCH_SIZE по умолчанию, чтобы избежать ошибок масштабирования. По сравнению с потерями регуляризации для каждого объекта, эта потеря служит для регуляризации объединённой потери всех объектов в многообъектной модели и будет добавлена к общей тренировочной потере многообъектной модели. |
| Возвращаемое значение | |
|---|---|
Экземпляр model_fn.EstimatorSpec . |
| Исключения | |
|---|---|
ValueError | Если и train_op_fn и optimizer заданы в режиме TRAIN, или если оба из них установлены. Если mode отсутствует в ModeKeys оценщика. |
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 для получения подробной информации.
update_metrics
update_metrics(
eval_metrics, features, logits, labels, regularization_losses=None
)
Обновляет метрики оценки. См. base_head.Head для получения подробной информации.
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/estimator/MultiHead