2017-09-05 6 views
1

実験でラップされたEstimatorを使用するときに保存されるモデルを選択する方法があるかどうか知りませんか? 'save_checkpoints_steps'ごとに、モデルは保存されますが、このモデルは必ずしも最良ではありません。Experiment Tensorflowに保存するモデルを選択しました

INFO:tensorflow:

def model_fn(features, labels, mode, params): 
    predict = model_predict_() 
    loss = model_loss() 
    train_op = model_train_op(loss, mode)  
    predictions = {"predictions": predict} 

    return tf.estimator.EstimatorSpec(
     mode = mode, 
     predictions = predictions, 
     loss = loss, 
     train_op = train_op, 
    ) 

def experiment_fn(run_config, hparams): 
    estimator = tf.estimator.Estimator(
     model_fn = model_fn, 
     config = run_config, 
     params = hparams 
    ) 

    return learn.Experiment(
     estimator = estimator, 
     train_input_fn = train_input_fn, 
     eval_input_fn = eval_input_fn, 
     eval_metrics = None, 
     train_steps = 1000, 
    ) 

ex = learn_runner.run(
     experiment_fn = experiment_fn, 
     run_config = run_config, 
     schedule = "train_and_evaluate", 
     hparams = hparams 
) 

出力は以下の通りです。に401のためのチェックポイントを保存\ model.ckpt。

INFO:tensorflow:global_step /秒:0.157117 INFO:tensorflow:ステップ= 401、 損失= 2.95048(636.468秒)

INFO:tensorflow:06: 2017-09-05-20での評価を開始します:07 INFO:tensorflow: からパラメータを復元\ model.ckpt-401

INFO:tensorflow:評価[1/1] INFO:2017-09-05-20で終了評価 :tensorflow 06:09

INFO:テンソルフロー:グローバルステップのディクテーションを保存する 401:global_step = 401、損失= 7.20411

INFO:tensorflow:検証(ステップ401): global_step = 401、損失= 7.20411

INFO:tensorflow:トレーニング損失= 2.95048、ステップ= 401(315.393秒)

INFO:tensorflow:451のチェックポイントを 。\ model.ckptに保存します。

INFO:tensorflow:11:32

INFO:tensorflow:2017-09-05-20での評価を開始する。 からパラメータを復元\ model.ckpt-451

INFO:tensorflow:評価[1/1]

最後にモデルを保存するたびに、必ずしもベストではないことがわかります。

+0

詳細を追加してください。これまでのことを教えてください。何が問題ですか。そうであるように、あなたの質問は理解できません。 –

答えて

2

訓練プロセスが中断された場合のチェックポイントが保存されます。チェックポイントがない場合は、最初から再起動する必要があります。これは、訓練に数週間かかる大型モデルの大きな問題です。

トレーニングが完了し、モデルに満足すれば(つまり「最高です」)、https://www.tensorflow.org/api_docs/python/tf/estimator/Estimator#export_savedmodelを使用してモデルを明示的に保存できます。このメソッドは、Experiemntの作成に使用したEstimatorにあります。このメソッドは、 "推論のためのモデル"を保存することに注意してください。つまり、すべての勾配操作がそれから取り除かれ、保存されません。

EDIT:ニコラスさんのコメントへの返信には: あなたは推定器を作成するときに渡すRunConfigkeep_checkpoint_every_n_hoursオプションを使用して最新のものに加えて、定期的にスナップショットを保存することができます。あなたのモデルが10時間前に最高のパフォーマンスを達成したことが分かったら、おおよその時間からスナップショットを見つけることができます。

+3

私が意味することは、モデルを訓練して1000エポックと言うのですが、500で妥当性検査セットの喪失は、訓練セットの損失が減少し続ける間に再びレイズを開始します。そしてこれは残りのエポックを維持します。したがって、最良のモデルは500で発生しました。しかし、推定器は、例えば最後の5つのモデルのみを保存しました。 500個のモデルを保存する代わりに(2回の繰り返しごとにモデルを保存する場合)、保存するモデルを選択するより良い方法がありますか? –

+0

答えを編集しました – iga

+0

あなたの編集は本当に彼の質問に答えることはできませんでした。あなたは何とか余分なセーブのために条件を決めることができますか? – erickrf

関連する問題