2016-12-20 9 views
1

私はいくつかの変数を保存しようとしています。これは私を与えるテンソルフローは初期化された値のみを保存します

import tensorflow as tf; 
    c = tf.Variable(3100,dtype = tf.int32); 
    with tf.Session() as sess: 
     sess.run(tf.initialize_all_variables()); 
     saver = tf.train.Saver({"my_c":c}); 
     saver.restore(sess, "test.ckpt"); 
     cc= sess.run(c); 
     print(cc); 

::私はそれを復元したよう

my_c = 5 

4 

復元

import tensorflow as tf; 
    my_a = tf.Variable(2,name = "my_a"); 
    my_b = tf.Variable(3,name = "my_b"); 
    my_c = tf.Variable(4,name = "my_c"); 
    my_c = tf.add(my_a,my_b); 

    with tf.Session() as sess: 
     init = tf.initialize_all_variables(); 
     sess.run(init); 
     print("my_c = ",sess.run(my_c)); 
     saver = tf.train.Saver(); 
     saver.save(sess,"test.ckpt"); 

これはアウト出力します はここに私の省のコードですmy_cの値はmy_aとmy_bの合計であるため、5になります。しかし、my_cの初期化された値である4が返されます。誰がそのようなことが起こったのか、変数に変更を保存する方法を説明できますか?

答えて

2

元のコードでは、my_cという名前の変数(TensorFlow nameがあります)を実際にmy_a + my_bに割り当てていません。

my_c = tf.add(my_a,my_b)と書くと、my_cという変数はname='my_c'tf.Variableとは異なります。

sess.run()を実行すると、その変数を更新せずに操作を実行するだけです。

あなたはこのコードを正しく実行する場合は、代わりにこれを使用 - (変更のためのコメントを参照)の助けを

import tensorflow as tf 
my_a = tf.Variable(2,name = "my_a") 
my_b = tf.Variable(3,name = "my_b") 
my_c = tf.Variable(4,name="my_c") 
# Use the assign() function to set the new value 
add = my_c.assign(tf.add(my_a,my_b)) 

with tf.Session() as sess: 
    init = tf.initialize_all_variables() 
    sess.run(init) 
    # Execute the add operator 
    sess.run(add) 
    print("my_c = ",sess.run(my_c)) 
    saver = tf.train.Saver() 
    saver.save(sess,"test.ckpt") 
+0

感謝を。 – lina

+0

コードを使用すると、モデルをロードするときにエラーが報告されます。NotFoundError(トレースバックについては上記を参照してください):チェックポイントファイルにテンソル名 "my_c"が見つかりませんtest.ckpt – lina

+0

申し訳ありません。私の古い答えは変数を作成していないということでした。変数のみがTensorFlowによって保存され、Tensorsでは保存されません – martianwars

関連する問題