Tensorflow 张力板:为每个步骤绘制“评估损失”图表

Tensorflow 张力板:为每个步骤绘制“评估损失”图表,tensorflow,tensorboard,loss-function,tensorflow-estimator,Tensorflow,Tensorboard,Loss Function,Tensorflow Estimator,我正在用张量流估计器训练CNN。通过在TensorBoard上可视化,我看到每个步骤都在跟踪训练损失值。然而,评估损失只显示了一个数据点。我想看看每一步损失值的图表 以下是我的代码片段: model = tf.estimator.Estimator(model_fn, model_dir='./model') input_fn = tf.estimator.inputs.numpy_input_fn( x={'images': dev['train_images']}, y = dev

我正在用张量流估计器训练CNN。通过在TensorBoard上可视化,我看到每个步骤都在跟踪训练损失值。然而,评估损失只显示了一个数据点。我想看看每一步损失值的图表

以下是我的代码片段:

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)
可以找到完整的代码

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

您需要使用估计器的方法。您可以定期评估模型。每隔几秒钟,您需要将该值放入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)

我也有同样的问题,我的解决方案是修改run_配置并将其传递给估计器。成功了。 run_config=tf.estimator.RunConfigsave_checkpoints_steps=1000

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

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