Есть ли какой-то способ сохранить лучшую модель только с tenorsflow.estimator.train_and_evaluate ()? - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь переобучить модель API обнаружения объектов TF из контрольной точки с помощью уже файла .config для обучающего конвейера с помощью метода tf.estimator.train_and_evaluate (), как в models / research / object_detection / model_main.py.И это сохраняет контрольные точки каждые N шагов или каждые N секунд.

Но я хочу сохранить только одну лучшую модель, как в Керасе.Есть ли какой-нибудь способ сделать это с моделью API TF Object Detection?Может быть, какие-то опции / обратные вызовы для tf.Estimator.train или какой-то способ использования API обнаружения с Keras?

Ответы [ 2 ]

3 голосов
/ 05 марта 2019

Вы можете попробовать использовать BestExporter. Насколько я знаю, это единственный вариант того, что вы пытаетесь сделать.

exporter = tf.estimator.BestExporter(
      compare_fn=_loss_smaller,
      exports_to_keep=5)

eval_spec = tf.estimator.EvalSpec(
    input_fn,
    steps,
    exporters)

https://www.tensorflow.org/api_docs/python/tf/estimator/BestExporter

2 голосов
/ 05 марта 2019

Я использовал https://github.com/bluecamel/best_checkpoint_copier, который хорошо работает для меня.

Пример:

best_copier = BestCheckpointCopier(
   name='best', # directory within model directory to copy checkpoints to
   checkpoints_to_keep=10, # number of checkpoints to keep
   score_metric='metrics/total_loss', # metric to use to determine "best"
   compare_fn=lambda x,y: x.score < y.score, # comparison function used to determine "best" checkpoint (x is the current checkpoint; y is the previously copied checkpoint with the highest/worst score)
   sort_key_fn=lambda x: x.score,
   sort_reverse=False) # sort order when discarding excess checkpoints

передать его в свой eval_spec:

eval_spec = tf.estimator.EvalSpec(
   ...
   exporters=best_copier,
   ...)
...