有什么方法可以仅使用 tensorflow.estimator.train_and_evaluate() 保存最佳模型?

Sil*_*con 7 python machine-learning computer-vision tensorflow object-detection-api

我尝试使用 tf.estimator.train_and_evaluate() 方法从检查点重新训练 TF 对象检测 API 模型,该模型已经具有 .config 文件,用于训练管道,例如在 models/research/object_detection/model_main.py 中。它每 N 步或每 N 秒保存一次检查点。

但我只想保存一个最好的模型,比如在 Keras 中。有没有办法用 TF 对象检测 API 模型来做到这一点?也许是 tf.Estimator.train 的一些选项/回调或将检测 API 与 Keras 一起使用的某种方式?

pro*_*ast 7

我一直在使用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
Run Code Online (Sandbox Code Playgroud)

将其传递给您的 eval_spec:

eval_spec = tf.estimator.EvalSpec(
   ...
   exporters=best_copier,
   ...)
Run Code Online (Sandbox Code Playgroud)


Sha*_*rky 6

您可以尝试使用BestExporter. 据我所知,这是您想要做的事情的唯一选择。

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

eval_spec = tf.estimator.EvalSpec(
    input_fn,
    steps,
    exporters)
Run Code Online (Sandbox Code Playgroud)

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