2016-04-22 15 views
1

私はTensorFlowの初心者で、現在CNNを訓練しています。Tensorflow:モデルパラメータの保存と復元

モデルで使用されるパラメータを保存するために、私はセーバーを使用していますが、私は、これは自身がモデルで使用されるすべての変数を格納し、に値を復元するのに十分であるかどうかの懸念を持っています再実行訓練されたネットワークで分類/テストを実行するためのプログラム。

TensorFlowが提供する有名な例のMNISTを見てみましょう。

この例では、畳み込みブロックの束があります。畳み込みブロックはすべて、ウェイトを持ち、バイアス変数はプログラムの実行時に初期化されます。

W_conv1 = init_weight([5,5,1,32]) 
b_conv1 = init_bias([32]) 

いくつかのレイヤーを処理した後、セッションを作成し、グラフに追加されたすべての変数を初期化します。ここで

sess = tf.Session() 
sess.run(tf.initialize_all_variables()) 
saver = tf.train.Saver() 

、それはsaver.saveコードをコメントすることが可能である、等重量、バイアスを、復元するために、トレーニング後saver.restore(SESの、FILE_PATH)によってそれを置き換える、バックパラメータグラフに?これはどうすればいいのでしょうか?

for i in range(1000): 
... 

    if i%500 == 0: 
    saver.save(sess,"model%d.cpkt"%(i)) 

私は現在、大規模なデータセットでトレーニングので終了し、トレーニングを再開することは、時間とリソースの無駄であるので、私は、私はトレーニングを開始する前に明確にしてくださいするために誰かを要求しています。

+0

あなたが尋ねていることは少し不明です。 saver.restore(sess、file_path)で置き換えます。 "あなたは訓練された値を保存し、以前の訓練から復元する(復元する)ことは望まないでしょうか? "終了し、トレーニングを再開するのは無駄です"。それは、すべてのトレーニングを終えたらモデルを一度保存​​することを意味しますか? –

+0

@ Sung Kim:答えは後者の質問にはイエスです。完全な訓練の後でモデルを一度保存​​するのではなく、保存された値で訓練を再開することは私の意図ではありません。 Matlabでは、これは非常に簡単で、実際にはPythonをプログラミングするのは初めてで、TensorFlowを使用しているので、パラメータを保存する他のエレガントな方法があるかどうかわかりません。 –

答えて

4

あなたは一度だけ、最終的な結果を保存したい場合は、あなたがこれを行うことができます:他のプログラムで

with tf.Session() as sess: 
    for i in range(1000): 
    ... 


    path = saver.save(sess, "model.ckpt") # out of the loop 
    print "Saved:", path 

を、あなたは、予測や何かのためsaver.saveから返されたパスを使用してモデルを読み込むことができます。 https://github.com/sugyan/tensorflow-mnistにいくつかの例があります。

1

hereとSung Kimの解説に基づいて、私はこの問題に対して非常に単純なモデルを書いた。基本的には、同じクラスからオブジェクトを作成し、その変数をセーバーから復元する必要があります。この解決策の例はhereです。

関連する問題