tf.contrib.estimator.multi_head
Создаёт _Head для многоцелевого обучения.
tf.contrib.estimator.multi_head(
heads, head_weights=None
)
Этот класс объединяет вывод нескольких _Head объектов. В частности:
- Для обучения суммирует потери каждого блока, вызывает
train_op_fnс этой итоговой потерей. - Для оценки объединяет метрики, добавляя суффикс
head.nameк ключам в метриках оценки, таким какprecision/head1,precision/head2. - Для предсказания объединяет предсказания и обновляет ключи в словаре предсказаний на 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': labels1, 'head2': 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 = multi_class_head(n_classes=3, name='head1')
head2 = binary_classification_head(name='head2')
# Create multi-head from two simple heads.
head = multi_head([head1, head2])
# Create logits for each head, and combine them into a dict.
logits1, logits2 = logit_fn()
logits = {'head1': logits1, 'head2': 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, steps=100)
Также поддерживает logits в качестве Tensor формы [D0, D1, ... DN, logits_dimension]. Он разделит Tensor по последнему измерению и распределит его должным образом среди блоков. Например:
def model_fn(features, labels, mode): # Create simple heads and specify head name. head1 = multi_class_head(n_classes=3, name='head1') head2 = binary_classification_head(name='head2') # Create multi-head from two simple heads. head = multi_head([head1, head2]) # Create logits for the multihead. 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, все потери взвешиваются одинаково. |
| Возвращает | |
|---|---|
Экземпляр _Head, который объединяет несколько блоков. |
| Возможные исключения | |
|---|---|
ValueError | Если heads пуст. |
ValueError | Если у любого из heads нет name. |
ValueError | Если heads и head_weights имеют разный размер. |
© 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/contrib/estimator/multi_head