在Tensorboard中使用带有Tensorflow Estimator的tf.name_scope

时间:2017-08-25 19:39:41

标签: tensorflow tensorboard

我有一些代码来计算我在函数中编写的Estimator model_fn中的性能指标,该函数返回指标字典

def __model_eval_metrics(self, classes, labels, mode):
    if mode == tf.estimator.ModeKeys.TRAIN or mode == tf.estimator.ModeKeys.EVAL:
        return {
                'accuracy': tf.metrics.accuracy(labels=tf.argmax(input=labels, axis=1), predictions=classes),
                'precision': tf.metrics.precision(labels=tf.argmax(input=labels, axis=1), predictions=classes),
                'recall': tf.metrics.recall(labels=tf.argmax(input=labels, axis=1), predictions=classes)
                }
    else:
        return None

在估算工具培训期间,这些会被记录为model_fn中的名称范围“train_metrics”分组的缩放器

if mode == tf.estimator.ModeKeys.TRAIN:
    with tf.name_scope('train_metrics') as scope:
        tf.summary.scalar('model_accuracy', eval_metrics['accuracy'][1])
        tf.summary.scalar('model_precision', eval_metrics['precision'][1])
        tf.summary.scalar('model_recall', eval_metrics['recall'][1])
        tf.summary.scalar('model_loss', loss)

这会在Tensorboard中产生所需的分组 Tensorboard Example

对于Estimator 评估,指标作为字典传递给EstimatorSpec eval_metric_ops参数,作为__model_eval_metrics()

的结果
return tf.estimator.EstimatorSpec(
    mode=mode,
    predictions={"predictions": predictions, "classes": classes},
    loss=loss,
    train_op=train_op,
    eval_metric_ops=eval_metrics,
)

问题是在Tensorboard中,这些指标不再按名称范围分组,我无法确定在何处添加名称范围以实现此目的。您可以看到评估指标未分组。

Tensorboard wrong

问题

  1. 是否有方法将name_scope用于Estimator的评估指标?
  2. 我是否应该完全忽略name_scope并切换Tensorboard屏幕左下角的运行?

0 个答案:

没有答案