2017-11-06 10 views
6

私はTensorFlow 1.4でtf.estimatorを使用していますが、tf.estimator.train_and_evaluateは素晴らしいですが、早期に停止する必要があります。それをどのように追加するのですか?tf.estimatorで早期に停止する方法は?

tf.train.SessionRunHookと思われます。私は、早期に停止しているように見えるValidationMonitorを持つ古いcontribパッケージがあるのを見ましたが、1.4ではそれ以上は見えません。あるいは、将来、tf.estimator/tf.layers/tf.dataの代わりにtf.keras(早期停止が本当に簡単である)に依存することが将来的に望ましいでしょうか?

答えて

2

はい、tf.train.StopAtStepHookがあります:

このフック要求が停止ステップ数のいずれかが実行されたか、最後のステップに到達した後。 2つのオプションのうち1つだけを指定できます。

また、ステップの結果に基づいて独自の停止戦略を拡張して実装することもできます。フックを使用していない

class MyHook(session_run_hook.SessionRunHook): 
    ... 
    def after_run(self, run_context, run_values): 
    if condition: 
     run_context.request_stop() 
+0

tf.train.StopAtStepHookは早期に停止しないようですか?しかし、ええ、私は検証セットを評価する自分のフックを行うことができたと思う、私はそれがTensorFlow 1.4の時点で組み込まれることを期待していた。ありがとう! –

+0

@CarlThoméあなたが何を意味するのか分かります。あなたは正しいです、テンソルフローバンドルは、今では簡単なセッションフックだけで、自分のフックで複雑な決定をプラグインすることをお勧めします。 – Maxim

+0

ealryの停止を実装するために各ステップでafter_run関数の損失をキャプチャする際に役立つ変数は何ですか? –

1

別のオプションは、(また、新しいtf.estimator.Estimatorをサポートするために、contribの中にもかかわらず、思われる)tf.contrib.learn.Experimentを作成することです。

次に、適切にカスタマイズされたcontinuous_eval_predicate_fnを使用して(明らかに実験的な)方法continuous_train_and_evalでトレーニングします。

tensorflowのドキュメンタリーによると、continuous_eval_predicate_fnは、各反復の後に評価を続行するかどうかを決定する述語関数

あります。

最後の評価実行からeval_resultsで呼び出されます。早期停止のためには、現在の最良結果とカウンタを維持し、早期停止の条件に達するとFalseを返すカスタマイズされた機能を使用してください。

関連する問題