dum*_*kar 22 logging machine-learning tensorflow
有没有办法让Tensorflow在使用Estimator API时打印额外的培训指标(例如批量准确度)?
可以添加摘要并在Tensorboard中查看结果(请参阅另一篇文章),但我想知道是否有一种优雅的方法可以在训练时打印标量汇总值.这已经发生在训练损失上,例如:
loss = 0.672677, step = 2901 (52.995 sec)
Run Code Online (Sandbox Code Playgroud)
但是举个例子会很高兴
loss = 0.672677, accuracy = 0.54678, step = 2901 (52.995 sec)
Run Code Online (Sandbox Code Playgroud)
没有太多麻烦.我知道大多数情况下绘制测试集精度更有用(我已经使用验证监视器进行了此操作),但在这种情况下,我也对训练批量准确性感兴趣.
Xyz*_*Xyz 23
根据我的阅读,不可能通过传递参数来改变它.您可以尝试通过创建日志记录挂钩并将其传递到估算器运行来完成.
在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])
Run Code Online (Sandbox Code Playgroud)
编辑:
要查看输出,您还必须将日志记录详细程度设置得足够高(除非它是您的默认值):
tf.logging.set_verbosity(tf.logging.INFO)
您还可以使用TensorBoard查看所需指标的一些图形。为此,将指标添加到TensorFlow摘要中,如下所示:
accuracy = tf.metrics.accuracy(labels=labels, predictions=predictions["classes"])
tf.summary.scalar('accuracy', accuracy[1])
Run Code Online (Sandbox Code Playgroud)
使用时,最酷的事情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)
Run Code Online (Sandbox Code Playgroud)
为了查看TensorBoard,您需要打开一个新终端并输入:
tensorboard --logdir={$MODEL_DIR}
Run Code Online (Sandbox Code Playgroud)
之后,您将可以在的浏览器中查看图形localhost:6006。
| 归档时间: |
|
| 查看次数: |
17740 次 |
| 最近记录: |