2017-05-16 4 views
0

Ich habe 2 Dateien, learn.py um das Modell zu speichern, learn_2.py um das Modell wiederherzustellen (hier ist die tf.variable a) und initialisiere das neue tf.variable b, aber etwas schief geht, ist hier das falsche:Wie man eine Teilmenge der von einem Modell im Tensorflow verwendeten Variablen wiederherstellt

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

Welche Zeile gibt diesen Fehler? Funktioniert es, wenn Sie den Graph laden, bevor Sie vvariable b erstellen und initialisieren? Wenn ja, ist es ein Problem für Sie, die Dinge in dieser Reihenfolge zu tun? – gdelab

+0

@gdelab in der Zeile 10 (save_path = saver.restore (sess, "./tmp/model.ckpt")), kein mater zuerst das Diagramm erstellen oder altes Modell zuerst wiederherstellen, es hat immer das Problem –

+0

Werfen Sie einen Blick auf Dieses Beispiel (zeigt das Speichern und Wiederherstellen von Variablen): http://stackoverflow.com/questions/43983528/how-do-i-store-and-rebuild-and-dictionary-of-weights-in-tensorflow/43988865#43988865 – hars

Antwort

0

Mach das im zweiten Skript learn2.py. Funktioniert bei mir !

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) 

Ausgabe von Skript 1 (gleich wie learn.py)

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

Ausgabe von Skript 2 (wie oben)

--- 
[[ 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]] 

Erläuterung:

Sie haben Variablen " a "und" b "im zweiten Skript zu zeichnen. Wenn Sie versuchen, eine Wiederherstellung durchzuführen, wird nach allen Variablen im aktuellen Diagramm gesucht ("a" & "b"). Meine Lösung ist

  1. Erstellen Sie die Grafik, die Sie zuerst wiederherstellen möchten.
  2. Wiederherstellen des Graphen - alle Variablen
  3. Fügen Sie Knoten/Layer zum Graphen hinzu und initialisieren Sie nur neu hinzugefügte Variablen.

Ich hoffe, das hilft.

+0

Ja, es ist jetzt Arbeit! Vielen Dank für deine Erklärung. –

+0

@colourful_tree, Gut zu hören. Bitte akzeptiere/stimme die Antwort so ab, dass die Frage geschlossen wird. – hars

Verwandte Themen