eval_metric_ops显示在tensorboard上的family下

时间:2017-08-18 22:51:58

标签: python tensorflow google-cloud-platform tensorboard google-cloud-ml-engine

使用tensorflow 1.3中的标量摘要,我现在可以定义一个'系列'这将有助于在相同的tensorboard选项卡下对相关指标进行分组。例如,如果我在下面定义了两个汇总标量:

.body

然后我可以通过执行以下操作在tensorboard中的单个选项卡下显示这些:

@media only screen and (max-width: 767px) {
    body {
        padding-top: 0;
    }
}

我想使用eval_metric_ops重复此行为用于评估摘要,但我无法找到任何方法来执行此操作。例如,我想要一个在同一个标​​量选项卡下有tf.metrics.precision和tf.metrics.recall的选项卡。有没有办法控制用于eval_metric_ops的选项卡名称?

我在ML Engine Experiment函数中运行它,因此可以首选传递给tf.estimator.EstimatorSpec的解决方案。

2 个答案:

答案 0 :(得分:1)

使用预测估算器,我认为没有办法控制内置指标的系列。但您可以添加一个钩子,使用tf.train.SummarySaverHookeval_hook参数作为tf.contrib.learn.Experiment参数添加到evaluation_hooks,并且您将能够控制这些新定义的钩子的族。

使用自定义估算工具,您将执行相同操作,除非您在退回的EstimatorSpec中将 func handleDate(timer: Timer) { DispatchQueue.main.async() { if self.posts.count < 1 { print("Empty") timer.invalidate() } else { let calendar = Calendar.current let date = Date() let componentsCurrent = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date) var components = DateComponents() components.hour = componentsCurrent.hour components.minute = componentsCurrent.minute components.second = componentsCurrent.second components.year = componentsCurrent.year components.month = componentsCurrent.month components.day = componentsCurrent.day let currentTime = calendar.date(from: components)! print("CurrentTime", currentTime) for post in self.posts { let cellID = post.postID let row = self.postsInFeed.index(of: cellID) let endDate = TimeInterval(post.time) print("CELLID", cellID) if currentTime.timeIntervalSince1970 >= endDate { DispatchQueue.main.async { self.tableView.beginUpdates() timer.invalidate() // self.datesInFeed.removeFirst() print(post.postID) print("Deleting tableview row") self.postsInFeed.removeFirst() self.posts.removeFirst() DataService.ds.REF_FEED.child(cellID).removeValue() self.tableView.deleteRows(at: [IndexPath(row: row!, section: 0)] , with: UITableViewRowAnimation.fade) self.tableView.endUpdates() } } else { self.tableView.reloadRows(at: [IndexPath(row: row!, section: 0)], with: .none) } } } } } 添加到Job Execution 1: Param1, Param2[Value1] Job Execution 2: Param1, Param2[Value2] Job Execution 3: Param1, Param2[Value3] ,因此您可以正常指定指标系列。

答案 1 :(得分:1)

如果您要编写自定义估算器,则可以使用斜杠分隔的前缀作为度量标准键,以控制它们在Tensorboard中显示的族。

具体来说,如果您使用键my_family/accuracy发出指标,则如下所示:

def model_fn(features, labels, mode):

  if mode == tf.estimator.ModeKeys.EVAL:

    accuracy = ...
    loss = ...

    return tf.estimator.EstimatorSpec(
        tf.estimator.ModeKeys.EVAL,
        loss=loss,
        eval_metric_ops={'my_family/accuracy': tf.metrics.mean(accuracy)},
    )

  else:
    ...

accuracy指标将在张量板上显示为my_family系列的一部分。