使用自定义估算器的 tensorflow 更多指标

Posted

技术标签:

【中文标题】使用自定义估算器的 tensorflow 更多指标【英文标题】:tensorflow more metrics with custom estimator 【发布时间】:2019-08-09 08:40:39 【问题描述】:

我创建了使用 binary_classification_head() 的自定义估算器。一切都很好,但问题在于可见的指标。我正在使用级别为tf.logging.set_verbosity(tf.logging.INFO) 和张量板的日志记录,但我只看到损失值。 我添加了这段代码,但它没有任何帮助。

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 与罐装估算器一起使用,或者在返回 estimator_spec 的 model_fn 函数中使用。见

my_head = tf.contrib.estimator.binary_classification_head()
my_estimator = tf.estimator.DNNEstimator(
    head=my_head,
    hidden_units=...,
    feature_columns=...)

在这种情况下,即使没有 add_metrics func,您也应该能够添加指标

【讨论】:

感谢您的回答。问题是我使用 binary_classification_head() 而不是 tf.estimator.EstimatorSpec 没有 eval_metric_ops 参数。如果仅仅因为指标而不得不放弃它,那就太可惜了。

以上是关于使用自定义估算器的 tensorflow 更多指标的主要内容,如果未能解决你的问题,请参考以下文章

让 TensorFlow 估算器的推断提速百倍,我是怎么做到的?

训练 tf.estimator 时记录准确度指标

根据自定义指标失败保存最佳指标(警告:tensorflow:只能在自定义指标可用的情况下保存最佳模型,跳过)

Tensorflow 2.0:自定义 keras 指标导致 tf.function 回溯警告

tfboys——tensorflow模块学习

TensorFlow2 入门指南 | 16 默认内置指标 & 自定义指标