TensorBoard:绘制每个步骤的“评估损失”图表

Posted

技术标签:

【中文标题】TensorBoard:绘制每个步骤的“评估损失”图表【英文标题】:TensorBoard: Charting 'eval loss' for each steps 【发布时间】:2018-12-01 14:06:55 【问题描述】:

我正在使用 TensorFlow Estimator 训练 CNN。在 TensorBoard 上进行可视化时,我看到每个步骤都在跟踪训练损失值。但是,评估损失只显示一次(即只有一个数据点)。我想看看每一步的损失值图表。

这是我的代码的 sn-p:

model = tf.estimator.Estimator(model_fn, model_dir='./model')

input_fn = tf.estimator.inputs.numpy_input_fn(
    x='images': dev['train_images'], y = dev['train_labels'],
    batch_size=batch_size, num_epochs=10, shuffle=True)

t = model.train(input_fn, steps=num_steps)

input_fn = tf.estimator.inputs.numpy_input_fn(
    x='images': dev['test_images'], y = dev['test_labels'],
    batch_size=batch_size, shuffle=False)
e = model.evaluate(input_fn, steps=num_steps)

完整的代码可以在here找到。

我应该怎么做才能看到所有步骤的评估损失?

【问题讨论】:

我认为只有在有新的检查点时才会进行评估。所以即使你跑了 20 步,因为它使用相同的检查点,你只会在这 20 个批次上得到一个组合的 eval 损失,并且由于训练损失与检查点无关,它在每一步之后进行评估并单独报告。我不是 100% 确定,但从这个角度来看可能值得一看。 是的,评估损失仅针对最后一个检查点计算。但我的理解是,由于在创建用于评估的输入函数时,我们可以指定批量大小,因此评估将分步进行。例如,我的测试数据有 2000 个样本,我的批量大小是 100。所以我认为评估将执行 20 次而不是一次。我需要进一步了解估算器如何执行训练和评估功能。您是否知道任何解释这一点的文档? 如前所述,您的评估将执行 20 次,但只会记录组合损失(很可能是平均值)。我不知道有一种方法可以记录所有损失,而不仅仅是平均损失。但是由于我们正在评估给定数据的特定检查点,因此将整个数据的综合损失作为衡量标准对我来说更有意义。至于文档,TensorFlow 和 Google 的文档是我发现的唯一值得探索的文档。 【参考方案1】:

您需要使用估算器的train_and_evaluate 方法。您可以定期评估您的模型(每隔几秒钟,您需要将值放入 throttle_secs 选项)。下面是示例代码

train_spec = tf.estimator.TrainSpec(input_fn=lambda: my_input_fn_train(X_train, y_train), hooks=[logging_hook_1], max_steps=MAX_TRAIN_STEPS)

eval_spec = tf.estimator.EvalSpec(input_fn=lambda: my_input_fn_test(X_dev, y_dev), hooks=[logging_hook_1], throttle_secs=EVALUATION_THROTTLE_SECONDS, steps=EVALUATION_STEPS)

tf.estimator.train_and_evaluate(myestimator, train_spec, eval_spec)

【讨论】:

【参考方案2】:

我遇到了同样的问题,我的解决方案是修改 run_config 并将其传递给估算器。有效。 run_config = tf.estimator.RunConfig(save_checkpoints_steps = 1000)

【讨论】:

【参考方案3】:

您可以使用tf.estimator.EvalSpec,您需要定义从何时开始运行评估start_delay_secs 和最小延迟:throttle_secs

只有在新的检查点可用时才会进行评估。所以你需要创建 检查点定期使用config = tf.estimator.RunConfig(save_checkpoints_steps = 100))

【讨论】:

以上是关于TensorBoard:绘制每个步骤的“评估损失”图表的主要内容,如果未能解决你的问题,请参考以下文章

在 Pytorch tensorboard 中绘制多张图

使用 Tensorboard 从日志目录绘制图形

使用 Tensorboard 在一张图中绘制多个图

TensorBoard - 在同一张图上绘制训练和验证损失?

GOOGLE COLAB 之TENSORBOARD 启用

在 TensorBoard 中更改图像滑块步骤