Tensorflow:有没有办法将训练损失存储在tf.Estimator中

时间:2018-02-23 02:18:46

标签: python tensorflow machine-learning

我正在使用tensorflow估算器对象来训练官方tensorflow图层文档(https://www.tensorflow.org/tutorials/layers)中的模型。我可以看到训练期间训练损失会显示在控制台上。有没有办法存储这些训练损失值?

谢谢!

2 个答案:

答案 0 :(得分:0)

显示是通过logging.info完成的。 tf.estimator为培训损失创建了LoggingTensorHook,请参阅here

我想您可以将日志记录输出重新路由到某个文件,但这仍然不会为您提供原始值。

我能想到的两种方式:

  1. 编写自己的钩子来存储值;这可能看起来与LoggingTensorHook非常相似,您只需要将数字写入文件而不是打印它们。
  2. 默认情况下,tf.estimator还会在Tensorboard中为培训损失创建摘要数据;你可以打开" Scalar" Tensorboard中的选项卡,您应该看到损失曲线。勾选"显示数据下载链接"在左上角。这将为您提供以CSV或JSON格式下载每个图表数据的选项。默认情况下,日志记录和摘要挂钩都设置为每100步记录一次值。因此,图表应该具有您在控制台中看到的相同信息。如果您不熟悉Tensorboard,Tensorflow网站上也有教程;基本用法应该很简单!

答案 1 :(得分:0)

在estimator.train()

训练估算器后,您可以在model_dir中使用TensorBoard事件文件
model = tf.estimator.Estimator(..., model_dir= 'tmp') 
# model data will be save in tmp directory after training

image

事件文件的名称为events.out.tfevents.15121254 ....,此文件保存训练过程的日志(eval文件夹中还有一个保存评估日志的其他事件文件)。您可以通过以下方式获得培训损失:

for e in tf.train.summary_iterator(path_to_events_file):
for v in e.summary.value:
    if v.tag == 'loss':
        print(v.simple_value)

此外,您可以在训练期间通过在model_fn中添加tf.summary来保存其他值:

tf.summary.scalar('accuracy', accuracy)

参考:https://www.tensorflow.org/api_docs/python/tf/train/summary_iterator