【问题标题】:Tensorflow Object Detection API w/ TPU Training - Display more granular Tensorboard plots带有 TPU 训练的 Tensorflow 对象检测 API - 显示更精细的 Tensorboard 图
【发布时间】:2018-08-22 11:33:42
【问题描述】:

我一直在Tensorflow Object Detection API 上关注this tutorial,并且我已经使用 Google 的 Cloud TPU 成功地训练了我自己的对象检测模型。

但是,问题是在 Tensorboard 上,我看到的每个图只有 2 个数据点(所以它只是绘制一条直线),如下所示:

...而我想看到更多像下面这样的“粒度”图,它们更详细:

The tutorial I've been following 承认这个问题是由于 TPU 训练只需要很少的步骤来训练的:

请注意,这些图表自模型以来仅绘制了 2 个点 只需几个步骤即可快速训练(如果您之前使用过 TensorBoard 你可能习惯在这里看到更多的曲线)

我尝试在文件model_tpu_main.py 中添加save_checkpoints_steps=50(参见下面的代码片段),当我重新运行训练时,我能够获得更精细的图,每 300 步左右有 1 个数据点。

config = tf.contrib.tpu.RunConfig(
      # I added this line below:
      save_checkpoints_steps=50,

      master=tpu_grpc_url,
      evaluation_master=tpu_grpc_url,
      model_dir=FLAGS.model_dir,
      tpu_config=tf.contrib.tpu.TPUConfig(
          iterations_per_loop=FLAGS.iterations_per_loop,
          num_shards=FLAGS.num_shards))

但是,我的训练工作实际上是每 100 步保存一个检查点,而不是每 300 步。查看日志,我的评估工作每 300 步运行一次。有没有一种方法可以让我的评估工作每 100 步运行一次(只要有新的检查点),这样我就可以在 Tensorboard 上获得更精细的图?

【问题讨论】:

    标签: tensorflow tensorboard google-cloud-ml object-detection-api google-cloud-tpu


    【解决方案1】:

    Google 云平台的技术主管在Medium blogpost 中解释了解决此问题的代码。或者直接去Github code

    81 行的train_and_evaluate 函数定义了TPUEstimatortrain_input_fneval_input_fn。然后它迭代到训练步骤并在每次迭代中调用estimator.trainestimator.evaluate。指标可以在model_fn 中定义,称为image_classifier。请注意,目前在模型函数中添加 tf.summary 调用无效,因为 TPU 不支持它:

    “TensorBoard 摘要是查看模型内部的好方法。TPUEstimator 会自动将一组最小的基本摘要记录到 model_dir 中的事件文件中。但是,在训练模型时,当前不支持自定义摘要云 TPU。因此,虽然 TPUEstimator 仍将在本地运行摘要,但如果在 TPU 上使用它将失败。" (source)

    如果摘要很重要,那么切换到 GPU 训练可能会更方便。

    就我个人而言,我认为编写这段代码对于应该由 API 处理的事情是相当麻烦的。如果存在更好的解决方案,请更新此答案!我很期待。

    【讨论】:

    • 感谢您的回答。目前我还是 Tensorflow 的初学者,所以我不完全理解你在说什么,而且我现在也不太想解决这个问题,但我希望其他人可以支持你的答案,如果他们觉得它很有用。
    【解决方案2】:

    将 RunConfig 中的 save_summary_steps 设置为 100,这样你就可以得到你想要的统计信息 还将iterations_per_loop设置为100,这样训练就不会进行更多步骤

    附言我希望您意识到检查点非常慢。你可能只是为了一个漂亮的图表而提高你的工作成本:)

    【讨论】:

    • save_summary_stepsiterations_per_loop 都已设置为 100。
    【解决方案3】:

    您可以尝试将throttle_secs=100 添加到 EvalSpecs 构造函数here。默认值为 600 秒。

    【讨论】:

    • 谢谢。我会试试看,稍后再回复你。
    • 我尝试了throttle_secs=100,但没有成功(我的评估工作仍然每 300 步执行一次评估)。不过,我会尝试使用较低的值,例如 throttle_secs=60,然后让您知道结果。
    • 您可以尝试在此处向 RunConfig 添加 save_checkpoints_secs=100 关键字参数吗;github.com/tensorflow/models/blob/master/research/…
    • 它已经在使用save_checkpoints_steps=50(虽然它是steps而不是secs
    • 我也试过throttle_secs=60,但评估工作仍然每 300 步执行一次评估
    猜你喜欢
    • 2018-12-28
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2018-10-06
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多