Logging 使用Tensorflow估计器打印额外的训练度量

Logging 使用Tensorflow估计器打印额外的训练度量,logging,machine-learning,tensorflow,Logging,Machine Learning,Tensorflow,在使用估计器API时,是否有办法让Tensorflow打印额外的培训指标(例如批量精度) 可以在Tensorboard中添加摘要并查看结果(参见另一篇文章),但我想知道是否有一种优雅的方法可以在训练时打印标量摘要值。培训损失已经发生,例如: loss = 0.672677, step = 2901 (52.995 sec) 但是如果有,那就太好了 loss = 0.672677, accuracy = 0.54678, step = 2901 (52.995 sec) 没有太多麻烦。我知道,

在使用估计器API时,是否有办法让Tensorflow打印额外的培训指标(例如批量精度)

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

loss = 0.672677, step = 2901 (52.995 sec)
但是如果有,那就太好了

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

没有太多麻烦。我知道,大多数情况下,绘制测试集精度更有用(我已经在使用验证监视器进行此操作),但在这种情况下,我也对训练批精度感兴趣。

根据我所读的内容,不可能通过传递参数来更改它。 您可以尝试创建一个日志挂钩,并将其传递到estimator run

在估算器的
模型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\u详细信息(tf.logging.INFO)

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

accuracy = tf.metrics.accuracy(labels=labels, predictions=predictions["classes"])
tf.summary.scalar('accuracy', accuracy[1])
当您使用
tf.estimator.estimator
时,最酷的事情是您不需要将摘要添加到
FileWriter
,因为它是自动完成的(默认情况下定期合并和保存它们-平均每100步一次)

也不要忘记根据刚才添加的
精度
参数更改此行:

eval_metric_ops = { "accuracy": accuracy }
return tf.estimator.EstimatorSpec(
    mode=mode, loss=loss, eval_metric_ops=eval_metric_ops)
要查看张力板,您需要打开一个新端子并键入:

tensorboard --logdir={$MODEL_DIR}
之后,您将能够在浏览器中的
localhost:6006

上看到图形。您尝试过吗?这是伟大的记录任何指标,参数,然后搜索和比较他们很容易


非常容易。

我需要像这样计算精度:
accurity=tf.metrics.accurity(标签=标签,预测=预测[“类])
然后只传递精度值(不带精度op)如下:
logging\u hook=tf.train.LoggingTensorHook({“损失”:损失,精度:精度[1]},每10次)
为了让它工作。请注意,您需要像这样传递整个精度(作为元组):
eval\u metric\u ops={“accurity”:accurity}
返回tf.estimator.estimator spec(mode=mode,loss=loss,eval\u metric\u ops=eval\u metric\u ops)我认为这是“精度[0]”而不是“精度[1]”我正在尝试这个解决方案,但我实际上得到了一个奇怪的错误:“Passed应该具有与当前图形相等的graph属性”。这是什么意思?检查你的张量是否来自模型_fn中定义的图形部分(不是这个函数之外的某个地方)。这不是一个直接的答案,但我认为这比用信息填充你的终端效果更好。在我看来,Tensorboard比TerminalBoard更适合观察指标,这在哪里有记录?“合并它们并保存100步默认值”如何对训练中的通用张量执行此操作?“eval_metric_ops”eval是在not train中,还是“eval_metric_ops”的其他语义含义?eval_metric_ops有什么作用?
eval_metric_ops
是一个可选的度量词典,您可以提供给您的自定义估计器,以便在评估中使用这些度量-检查此处的文档: