2017-05-16 13 views
0

私は2つのファイル、learn_.pyモデルを保存するlearn_2.pyモデルを復元する(ここではtf.variable aです)、新しいここtf.variable Bが、間違って何かが、間違っている:テンソルフローでモデルで使用される変数のサブセットを復元する方法

tensorflow.python.framework.errors_impl.NotFoundError: Key scope/bb not found in checkpoint 

learn.py

import tensorflow as tf 

with tf.variable_scope("scope"): 
    a = tf.get_variable("aa", shape=[2,4]) 

sess = tf.Session() 
#sess.run(tf.global_variables_initializer()) 
sess.run(tf.initialize_variables([a])) 
saver = tf.train.Saver() 
save_path = saver.save(sess, "./tmp/model.ckpt") 
print "---" 
print sess.run(a) 

learn_2.py

import tensorflow as tf 

with tf.variable_scope("scope"): 
    a = tf.get_variable("aa", shape=[2,4]) 
    b = tf.get_variable("bb", shape=[2,4]) 
sess = tf.Session() 
#sess.run(tf.global_variables_initializer()) 
#sess.run(tf.initialize_variables([b])) 
saver = tf.train.Saver() 
save_path = saver.restore(sess, "./tmp/model.ckpt") 
sess.run(tf.initialize_variables([b])) 
print "---" 
print sess.run(a) 
print sess.run(b) 
+0

このエラーはどの行ですか?あなたが作成する前にグラフを読み込んで、変数vを初期化するとうまくいくのですか?もしそうなら、あなたはその順序で何かをするのが問題ですか? – gdelab

+0

@gdelab 10行目(save_path = saver.restore(sess、 "./tmp/model.ckpt"))、最初にグラフを作成したり古いモデルを復元したりすることはありません。常に問題があります –

+0

この例は、変数の保存と復元を示しています:http://stackoverflow.com/questions/43983528/how-do-i-store-and-rebuild-and-dictionary-of-weights-in-tensorflow/43988865#43988865 – hars

答えて

0

2番目のスクリプトlearn2.pyでこれを行います。私のために働く! (上記のように)スクリプト2の(learn.pyと同じ)スクリプト1

--- 
[[ 0.21811056 0.75089216 0.43180299 -0.36542225] 
[-0.11786985 -0.26542974 0.68785524 -0.57991886]] 

出力の

import tensorflow as tf 

with tf.variable_scope("scope"): 
    a = tf.get_variable("aa", shape=[2,4]) 
    sess = tf.Session() 
    saver = tf.train.Saver() 
    save_path = saver.restore(sess, "/tmp/model.ckpt") 
    b = tf.get_variable("bb", shape=[2,4]) 
    sess.run(tf.initialize_variables([b])) 
    print "---" 
    print sess.run(a) 
    print sess.run(b) 

出力

--- 
[[ 0.21811056 0.75089216 0.43180299 -0.36542225] 
[-0.11786985 -0.26542974 0.68785524 -0.57991886]] 
[[-0.62411451 -0.32599163 0.72495079 -0.09547448] 
[-0.59518242 0.51209545 -0.68833208 -0.03813028]] 

説明:

あなたは、「変数を追加しましたa "と" b "を2番目のスクリプトでグラフ化します。復元しようとすると、現在のグラフ( "a" & "b")のすべての変数が検索されます。私の解答は

  1. です。最初に復元するのと同じグラフを作成してください。
  2. グラフを復元する - すべての変数
  3. グラフにノード/レイヤを追加して、新しく追加された変数のみを初期化します。

私はこれが役立つことを願っています。

+0

ええ、それは今の仕事です!説明ありがとうございました。 –

+0

@colourful_tree、聞いてよかったです。質問を受け入れるように回答を受け入れるか投票してください。 – hars

関連する問題