API обнаружения объектов Tensorflow с обучением TPU - отображение более детальных графиков Tensorboard

Я следовал этому руководству по API обнаружения объектов Tensorflow и успешно обучил свою собственную модель обнаружения объектов с использованием облачных TPU Google.

Однако проблема в том, что на Tensorboard у графиков, которые я вижу, есть только 2 точки данных каждая (так что это просто линия прямой линии), вот так: введите описание изображения здесь

... в то время как я хочу видеть больше "гранулированных" графиков, подобных этим ниже, которые намного более подробны:

введите описание изображения здесь

Учебное пособие, которому я следовал, подтверждает, что эта проблема вызвана тем фактом, что обучение TPU требует очень мало шагов для обучения:

Обратите внимание, что на этих графиках изображены только 2 точки, поскольку модель тренируется быстро за несколько шагов (если вы использовали TensorBoard до того, как вы привыкли видеть здесь большую кривую)

Я пытался добавить save_checkpoints_steps=50 в файле model_tpu_main.py (см. фрагмент кода ниже), и когда я перезапустил обучение, я смог получить более детальный график с 1 точкой данных на каждые 300 шагов или около того.

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?

3 ответа

Код, который решает эту проблему, объясняется техническим руководителем облачной платформы Google в блоге Medium. Или перейдите непосредственно к коду Github.

Функция train_and_evaluate из 81 строки определяет TPUEstimator, train_input_fn а также eval_input_fn, Затем он переходит к этапам обучения и вызывает estimator.train а также estimator.evaluate в каждой итерации. Метрики могут быть определены в model_fn, который называется image_classifier. Обратите внимание, что в настоящее время это не имеет никакого эффекта, чтобы добавить tf.summary вызовы в модельных функциях, поскольку TPU не поддерживает его:

"Сводки TensorBoard - отличный способ увидеть внутри вашей модели. Минимальный набор базовых сводок автоматически записывается TPUEstimator в файлы событий в model_dir. Однако пользовательские сводки в настоящее время не поддерживаются при обучении в облачном TPU. TPUEstimator по-прежнему будет работать локально с итогами, он потерпит неудачу, если используется на TPU. " (источник)

Если резюме важны, может быть удобнее переключиться на обучение на GPU. Я лично не проверял это, но целевая страница TensorBoard, кажется, рекламирует статистику за эпоху для тысяч эпох.

Лично я думаю, что написание этого кода является довольно сложной задачей для того, что должно обрабатываться API. Пожалуйста, обновите этот ответ, если существуют лучшие решения! Я с нетерпением жду этого.

Установите для save_summary_steps в RunConfig значение 100, чтобы получить необходимую статистику. Также iterations_per_loop равен 100, чтобы обучение не проходило больше шагов.

PS Надеюсь, вы понимаете, что контрольная точка очень медленная. Вы, вероятно, повышаете стоимость своей работы только ради симпатичного графика:)

Вы можете попробовать добавить throttle_secs=100 в конструктор EvalSpecs здесь. Значение по умолчанию составляет 600 секунд.

Другие вопросы по тегам