tf.contrib.learn.MetricSpec
MetricSpec подключает модель к функциям метрик.
tf.contrib.learn.MetricSpec(
metric_fn, prediction_key=None, label_key=None, weight_key=None
)
ЭТОТ КЛАСС УСТЕРЕЛ. См. contrib/learn/README.md для общих инструкций по миграции.
Класс MetricSpec содержит всю необходимую информацию для подключения выходных данных модели model_fn к метрикам (обычно, потоковым метрикам), которые используются в оценке.
Он передаётся в аргумент metrics метода Estimator.evaluate. Метод Estimator затем знает, какие прогнозы, метки и веса использовать для вызова заданной функции метрики.
При построении операций для выполнения в оценке, Estimator вызовет create_metric_ops, который подключит заданную metric_fn к модели, как подробно описано в документации к create_metric_ops, и вернёт метрику.
Пример:
Предположим, что функция входных данных модели возвращает входные данные, содержащие (среди прочего) тензор с ключом "input_key", и словарь меток, содержащий "label_key". Предположим, что метод model_fn для этой модели возвращает прогноз с ключом "prediction_key".
Для вычисления точности прогноза "prediction_key" нужно добавить
"prediction accuracy": MetricSpec(metric_fn=prediction_accuracy_fn,
prediction_key="prediction_key",
label_key="label_key")
в аргумент metrics к методу evaluate. prediction_accuracy_fn может быть предварительно определённой функцией из metric_ops (например, streaming_accuracy) или пользовательской функцией, которую вы определите.
Если нам нужна точность, взвешенная по "input_key", мы можем добавить его как аргумент weight_key.
"prediction accuracy": MetricSpec(metric_fn=prediction_accuracy_fn,
prediction_key="prediction_key",
label_key="label_key",
weight_key="input_key")
Вот пример end-to-end:
estimator = tf.contrib.learn.Estimator(...)
estimator.fit(...)
_ = estimator.evaluate(
input_fn=input_fn,
steps=1,
metrics={
'prediction accuracy':
metric_spec.MetricSpec(
metric_fn=prediction_accuracy_fn,
prediction_key="prediction_key",
label_key="label_key")
})
| Аргументы | |
|---|---|
metric_fn | Функция, используемая в качестве метрики. См. _adapt_metric_fn для правил передачи predictions, labels, и weights в эту функцию. Функция должна возвращать либо единственный Tensor, который интерпретируется как значение этой метрики, либо пару (value_op, update_op), где value_op — операция для получения значения метрики, а update_op должна выполняться для каждого пакета для обновления внутреннего состояния. |
prediction_key | Ключ для тензора в словаре predictions (выход из model_fn) для использования в качестве входных данных predictions для metric_fn. Необязательно. Если None, то model_fn должен возвращать единственный тензор или словарь с только одной записью, как predictions. |
label_key | Ключ для тензора в словаре labels (выход из input_fn) для использования в качестве входных данных labels для metric_fn. Необязательно. Если None, то input_fn должен возвращать единственный тензор или словарь с только одной записью, как labels. |
weight_key | Ключ для тензора в словаре inputs (выход из input_fn) для использования в качестве входных данных weights для metric_fn. Необязательно. Если None, веса не будут переданы в metric_fn. |
| Атрибуты | |
|---|---|
label_key | |
metric_fn | Функция метрики. Эта функция принимает именованные аргументы: |
prediction_key | |
weight_key | |
Методы
create_metric_ops
create_metric_ops(
inputs, labels, predictions
)
Подключаем нашу metric_fn к указанным элементам заданных словарей.
Эта функция вызовет metric_fn заданную в нашем конструкторе следующим образом:
metric_fn(predictions[self.prediction_key],
labels[self.label_key],
weights=weights[self.weight_key])
И возвращает результат. Аргумент weights передаётся только если self.weight_key не равно None.
predictions и labels могут быть как одиночными тензорами, так и словарями. Если predictions — одиночный тензор, то self.prediction_key должен быть None. Если predictions — словарь с одним элементом, self.prediction_key может быть None. И наоборот, если labels — одиночный тензор, то self.label_key должен быть None. Если labels — словарь с одним элементом, то self.label_key может быть None.
| Аргументы | |
|---|---|
inputs | Словарь входных данных, полученный из input_fn |
labels | Словарь меток или одиночный тензор меток, полученный из input_fn. |
predictions | Словарь прогнозов или одиночный тензор прогнозов, полученный из model_fn. |
| Возвращаемое значение | |
|---|---|
Результат вызова metric_fn. |
| Исключения | |
|---|---|
ValueError | Если predictions или labels — одиночный Tensor и self.prediction_key или self.label_key не None; или если self.label_key — None, но labels — словарь более чем с одним элементом, или если self.prediction_key — None, но predictions — словарь более чем с одним элементом. |
© 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/learn/MetricSpec