#tensorflow #metrics #tensorboard #tensorflow-estimator
#tensorflow #показатели #тензорная доска #tensorflow-оценщик
Вопрос:
Я создал пользовательский оценщик, который использовался binary_classification_head()
под капотом. Все работает хорошо, но проблема заключается в видимых показателях. Я использую ведение журнала с помощью level tf.logging.set_verbosity(tf.logging.INFO)
и tensorboard, но я вижу только значение потерь. Я добавил этот код, но это ничего не помогает.
def my_accuracy(labels, predictions):
return {'accuracy': tf.metrics.accuracy(labels, predictions['logistic'])}
classifier = tf.contrib.estimator.add_metrics(classifier, my_accuracy)
Вы знаете какой-нибудь другой способ добавления показателей?
Ответ №1:
Вам нужно разместить соответствующую функцию показателей внутри вашего model_fn
.
Например:
tf.summary.image('input_image', input_image, max_outputs)
for v in tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES):
tf.summary.histogram(v.name, v)
Метрики, которые включают в себя update_op
, такие как точность оценки f1, должны быть переданы в eval_metric_ops
. Срез используется, потому что они выводят два значения, значение метрики и операцию обновления
f1 = tf.contrib.metrics.f1_score(labels, predictions, num_thresholds)
accuracy = tf.metrics.accuracy(labels, predictions)
tf.summary.scalar('accuracy', accuracy[1])
eval_metric_ops = {
'f1_score': f1,
'accuracy': accuracy
}
return tf.estimator.EstimatorSpec(mode=mode,
loss=loss,
train_op=train_op,
eval_metric_ops=eval_metric_ops,
)
eval_metric_ops
dict может подаваться как в режиме обучения, так и в режиме оценки.
В случае, если вы используете стандартный оценщик, вы можете просто использовать add_metrics
Редактировать: Согласно официальной документации, вы можете использовать binary_classification_head
с готовым оценщиком или внутри функции model_fn, которая возвращает estimator_spec. Смотрите
my_head = tf.contrib.estimator.binary_classification_head()
my_estimator = tf.estimator.DNNEstimator(
head=my_head,
hidden_units=...,
feature_columns=...)
В этом случае вы должны иметь возможность добавлять показатели даже без функции add_metrics
Комментарии:
1. Спасибо за ответ. Проблема в том, что я использую binary_classification_head() вместо tf.estimator. Оценочные спецификации, у которых нет параметра eval_metric_ops. Было бы жаль, если бы пришлось отказаться от него только из-за метрик.