0

我一直在学习有关Tensorflow 对象检测 API的本教程,并且我已经使用 Google 的 Cloud TPU 成功地训练了我自己的对象检测模型。

然而,问题是在 Tensorboard 上,我看到的每个图只有 2 个数据点(所以它只是绘制一条直线),如下所示: 在此处输入图像描述

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

在此处输入图像描述

我一直在关注的教程承认这个问题是由于 TPU 训练需要很少的训练步骤而引起的:

请注意,这些图表仅绘制了 2 个点,因为模型只需很少的步骤即可快速训练(如果您之前使用过 TensorBoard,您可能会习惯在此处看到更多曲线)

我尝试save_checkpoints_steps=50在文件中添加model_tpu_main.py(见下面的代码片段),当我重新运行训练时,我能够得到更精细的图,每 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 上获得更精细的图?

4

3 回答 3

1

解决此问题的代码由 Google 云平台的技术负责人在Medium 博文中解释。或者直接去Github 代码

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

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

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

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

于 2018-11-28T10:11:52.943 回答
0

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

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

于 2018-08-23T06:55:32.957 回答
0

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

于 2018-08-30T07:07:37.993 回答