2017-10-10 32 views
1

私は2つの隠れたレイヤーでニューラルネットワークを構築します。私は、同じセッションで残っている場合セッションが終了したときにモデルを起動する - Tensorflow

saver.save(sess, "model.ckpt") 

、私はこのコードを起動します:私はセッションを起動すると、私はしてセッションを保存

restorer=tf.train.Saver() 
with tf.Session() as sess: 
    restorer.restore(sess,"./prova") 
    new_graph = tf.train.import_meta_graph('prova.meta')  
    new_graph.restore(sess, 'prova.ckpt') 
    feed={ 
     pred1.inputs:test_data, 
     pred1.is_training:False 
    } 
    test_predict=sess.run(pred1.predicted,feed_dict=feed) 

は、私はテストのためのモデルを起動することができます。

質問:セッションが終了したときにモデルを起動する方法はありますか?特に、私は列車の結果を.ckptに保存します。別の瞬間にモデルを再起動できますか?

+0

テスト時に別のセッションを開始しないのはなぜですか? – Maxim

+0

現時点では、同じことが列車またはテストセットの新しいセッションを開始します。可能であれば、ckptファイルでsalvedで日付を指定して新しいセッションを開始することができます。可能であれば、どうすればこのことができるのでしょうか。 Thanks – jjgasse

+0

新しいセッション内でモデルを復元するスニペットを提供しました。そこにはトレーニングはありません。このコードで何が問題になっていますか? – Maxim

答えて

0

tf.Session以外のモデルは実行できません。 the documentationから

Sessionオブジェクトは、Operationオブジェクトが実行される環境をカプセル化し、Tensorオブジェクトが評価されます。

しかし、あなたは簡単に開くことができるとのセッションを何度も閉じて、既存のグラフを使用するか、以前に保存したグラフをロードし、新しいセッションでそれを使用しています。これら二つのセッションの間

import tensorflow as tf 

v1 = tf.get_variable("v1", shape=[3], initializer = tf.zeros_initializer) 
v2 = tf.get_variable("v2", shape=[5], initializer = tf.zeros_initializer) 

inc_v1 = v1.assign(v1+1) 
dec_v2 = v2.assign(v2-1) 
init_op = tf.global_variables_initializer() 
saver = tf.train.Saver() 

with tf.Session() as sess: 
    sess.run(init_op) 
    inc_v1.op.run() 
    dec_v2.op.run() 
    save_path = saver.save(sess, "/tmp/model.ckpt") 
    print("Model saved in file: %s" % save_path) 

with tf.Session() as sess: 
    saver.restore(sess, "/tmp/model.ckpt") 
    print("Model restored.") 
    print("v1 : %s" % v1.eval()) 
    print("v2 : %s" % v2.eval()) 

あなたはv1v2を評価することはできませんが、右後に新しいセッションを開始することができます:ここで少しexample from the docを変更しています。

関連する問題