Как получить доступ к результатам BestExporter при использовании train_and_evaluate? - PullRequest
0 голосов
/ 31 мая 2019

Когда я использую tf.estimator.train_and_evaluate с BestExporter в моем EvalSpec, возвращаемое значение в конце может не включать export_result, так как последний вызов оценки не обязательно приведет к экспорту.Это происходит, например, если ваша последняя контрольная точка не приводит к снижению потерь в вашем наборе оценки.

Как получить доступ к последнему export_result, который привел к экспорту из BestExporter?В идеале я хотел бы иметь list каждого (metrics, export_results) в конце train_and_evaluate вместо только последнего.


Для любого, кто нуждается в обходном пути, вы можете получить доступ к каталогу, используяВстроенные модули Python, как это.

estimator = tf.estimator.Estimator(...)
best_exporter = tf.estimator.BestExporter(...)

# Add best_exporter to your eval_spec
# Make train_spec
metrics, export_results = tf.estimator.train_and_evaluate(...)

best_export_dir = os.path.join(estimator.model_dir, 'export', best_exporter.name)
savedmodels = os.listdir(best_export_dir)
best_model = savedmodels[-1]

Очевидно, что предпочтительнее лучший метод.Конкретная проблема, которую я здесь описываю, заключается в том, что export_results может быть просто [None], поскольку последняя контрольная точка не привела к экспорту, даже если ранее был экспорт.


Для всехкого это волнует, так это соответствующие биты кода из tenorflow r1.13, отслеживающие жизнь export_results от вызова к значению,

tf.estimator.train_and_evaluate 471

_TrainingExecutor.run 611

_TrainingExecutor.run_local 703

_NewCheckpointListenerForEvaluate.after_save 517

_NewCheckpointListenerForEvaluate._evaluate 536

_Evaluator.evaluate_and_export 924

_Evaluator._export_eval_result 948

...