使用Tensorflow Estimator打印额外的培训指标

时间:2017-07-27 14:14:04

标签: logging machine-learning tensorflow

使用Estimator API时,有没有办法让Tensorflow打印额外的培训指标(例如批量准确度)?

可以添加摘要并在Tensorboard中查看结果(请参阅另一篇文章),但我想知道是否有一种优雅的方法可以在训练时打印标量汇总值。这已经发生在训练损失上,例如:

loss = 0.672677, step = 2901 (52.995 sec)

但是举个例子会很好。

loss = 0.672677, accuracy = 0.54678, step = 2901 (52.995 sec)
没有太多麻烦。我知道大多数情况下绘制测试集精度更有用(我已经使用验证监视器进行了此操作),但在这种情况下,我也对训练批量准确性感兴趣。

3 个答案:

答案 0 :(得分:19)

从我读过的内容来看,无法通过传递参数来改变它。 您可以尝试创建一个日志记录挂钩并将其传递给估算器运行。

在您的估算工具的model_fn函数正文中:

logging_hook = tf.train.LoggingTensorHook({"loss" : loss, 
    "accuracy" : accuracy}, every_n_iter=10)

# Rest of the function

return tf.estimator.EstimatorSpec(
    ...params...
    training_hooks = [logging_hook])

编辑:

要查看输出,您还必须将日志记录详细程度设置得足够高(除非它是您的默认值): tf.logging.set_verbosity(tf.logging.INFO)

答案 1 :(得分:5)

您还可以使用TensorBoard查看所需指标的一些图形。为此,将指标添加到TensorFlow摘要中,如下所示:

accuracy = tf.metrics.accuracy(labels=labels, predictions=predictions["classes"])
tf.summary.scalar('accuracy', accuracy[1])

使用tf.estimator.Estimator时很酷的事情是,您无需将摘要添加到FileWriter中,因为摘要是自动完成的(默认情况下每100步合并并保存一次)。

不要忘记根据刚刚添加的accuracy参数来更改此行:

eval_metric_ops = { "accuracy": accuracy }
return tf.estimator.EstimatorSpec(
    mode=mode, loss=loss, eval_metric_ops=eval_metric_ops)

要查看TensorBoard,您需要打开一个新终端并输入:

tensorboard --logdir={$MODEL_DIR}

之后,您将可以在浏览器中的localhost:6006上查看图形。

答案 2 :(得分:0)

您尝试过Aim吗?记录任何指标,参数然后轻松进行搜索和比较非常好。

get started with非常容易。