使用Estimator API时,有没有办法让Tensorflow打印额外的培训指标(例如批量准确度)?
可以添加摘要并在Tensorboard中查看结果(请参阅另一篇文章),但我想知道是否有一种优雅的方法可以在训练时打印标量汇总值。这已经发生在训练损失上,例如:
loss = 0.672677, step = 2901 (52.995 sec)
但是举个例子会很好。
loss = 0.672677, accuracy = 0.54678, step = 2901 (52.995 sec)
没有太多麻烦。我知道大多数情况下绘制测试集精度更有用(我已经使用验证监视器进行了此操作),但在这种情况下,我也对训练批量准确性感兴趣。
答案 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非常容易。