使用Tensorflow Estimator打印额外的训练指标
machine-learning
tensorflow
68
0

使用Estimator API时,是否可以让Tensorflow打印额外的培训指标(例如批处理准确性)?

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

loss = 0.672677, step = 2901 (52.995 sec)

但是最好有例如

loss = 0.672677, accuracy = 0.54678, step = 2901 (52.995 sec)

没有太多麻烦。我知道在大多数情况下,绘制测试集准确性更为有用(我已经在使用验证监视器了),但是在这种情况下,我也对训练批处理准确性感兴趣。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

您还可以使用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上看到图形。

收藏
评论

根据我的阅读,不可能通过传递参数来更改它。您可以尝试通过创建日志记录挂钩并将其传递到估算程序运行中来进行操作。

在您的估算器的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)

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题