2016-08-31 11 views
4

私はtensorflowでトレーニングジョブを実行し、検証セットで失われる次の曲線を得ました。ネットは6000回目の反復後にオーバーフィットするようになります。ですから、私は過不足する前にモデルを取得したいと思います。訓練終了後Tensorflow:最小の検証エラーでモデルを保存します

train_step = ...... 
summary = tf.scalar_summary(l1_loss.op.name, l1_loss) 
summary_writer = tf.train.SummaryWriter("checkpoint", sess.graph) 
saver = tf.train.Saver() 
for i in xrange(20000): 
    batch = get_next_batch(batch_size) 
    sess.run(train_step, feed_dict = {x: batch.x, y:batch.y}) 
    if (i+1) % 100 == 0: 
     saver.save(sess, "checkpoint/net", global_step = i+1) 
     summary_str = sess.run(summary, feed_dict=validation_feed_dict) 
     summary_writer.add_summary(summary_str, i+1) 
     summary_writer.flush() 

は、保存された唯一の5つのチェックポイント(19600、19700、19800、19900、20000)があります:

loss

私のトレーニングのコードは、以下のようなものです。検証エラーによってテンソルフローをチェックポイントに保存する方法はありますか?

P.S. tf.train.Saverにはmax_to_keepという引数があり、すべてのチェックポイントを保存することができます。しかし、それは私が望んでいない(それが唯一の選択肢でない限り)。私は節約者が今までの検証の損失を最小限に抑えてチェックポイントを保持したいと思っています。それは可能ですか?

答えて

5

バリデーションセットの分類精度を計算し、これまで見た最良のものを維持し、バリデーションの精度が向上したらチェックポイントを書き込む必要があります。

データセットおよび/またはモデルが大きい場合は、検証セットをバッチに分割して計算をメモリに収める必要があります。

https://www.youtube.com/watch?v=Lx8JUJROkh0

:それは短いビデオとしても利用可能である

https://github.com/Hvass-Labs/TensorFlow-Tutorials/blob/master/04_Save_Restore.ipynb

このチュートリアルでは、あなたがやりたい方法を正確に示してい

0

session.runには、明白に損失を求める必要があります。次に、現在の評価損失が小さい、すなわち最後に保存された2つの損失がチェックポイントを作成する場合に限り、最後の評価損失を含むリストを作成します。

関連する問題