Каков механизм функции `tf.estimator.train_and_evaluate` для контроля периода обучения и оценки? - PullRequest
0 голосов
/ 08 января 2019

Когда я обучил шаги модели обнаружения объектов SSD на 20 тыс. Шагов, используя TensorFlow Object Detection API , я обнаружил, что время обучения варьируется: Это были быстрые тренировки в течение первых 10 минут, и было выполнено около 500 шагов (то есть 0,83 шагов / секунд). Затем он замедлился и занял около 40-50 минут для выполнения одного шага обучения, оценки модели в наборе оценочных данных и сохранения контрольной точки на диске. Поэтому я прервал тренировку после нескольких шагов и продолжил, восстановив тренировку.
Каждый раз он быстро тренировался в первые 10 минут, а затем резко замедлялся, как показали цифры. global_step
saved checkpoints
Обучение модели осуществлено с помощью Оценщика API TensorFlow tf.estimator.train_and_evaluate()
Кто-нибудь может объяснить, как это работает? Как оценщик контролирует период обучения и оценки? Я не хочу оценивать модель на каждом шагу!

1 Ответ

0 голосов
/ 08 января 2019

Если вы посмотрите на EvalSpec и TrainSpec , есть аргумент throttle_secs, который отвечает за принятие решения, когда вызывается оценка. Обратитесь к этому горячему обсуждению , в котором много деталей о методах оценки! Контроль за этим мог бы контролировать циклы поезда и eval. В общем, train_and_evaluate будет работать путем построения графика операции обучения и оценки. График обучения создается только один раз, но график оценки воссоздается каждый раз, когда вам нужно оценить. Это означает, что он загрузит контрольную точку, созданную во время обучения, что может быть одной из причин, почему это занимает так много времени! Может быть, InMemoryEvaluationHook , который упоминается в этом обсуждении, может помочь вам, так как он не перезагружает контрольную точку каждый раз, когда вызывается оценка.

...