2016-11-25 3 views
0

Ich versuche eine gespeicherte Variable in Tensorflow wiederherzustellen. Es scheint, als wäre es sehr, sehr kompliziert.Wie stelle ich eine gespeicherte Variable im Tensorflow wieder her?

Ich verwende den alexnet Umsetzung in http://www.cs.toronto.edu/~guerzhoy/tf_alexnet/

in einer Python-Datei, alexnet.py definiere ich die Variable

conv5W = tf.Variable(net_data["conv5"][0],name='conv5w') 

Dann finetune ich das Modell und ich sehe, dass einige ihrer Werte sind geändert. Ich speichere die finetuned Modell durch Eingabe:

saver = tf.train.Saver() 
saver.save(sess,"modelname.ckpt") 

danach, habe ich eine neue ipython Konsole öffnen und auszuführen:

from alexnet import * 
sess=tf.InteractiveSession() 
new_saver = tf.train.import_meta_graph("modelname.ckpt.meta") 
new_saver.restore(sess, "modelname.ckpt") 

danach, wenn ich versuche, mit den Werten der Variablen abzurufen:

conv5W.eval(session=sess) 

es ergibt:

FailedPreconditionError: Attempting to use uninitialized value conv5w 
    [[Node: conv5w/_98 = _Send[T=DT_FLOAT, client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_4_conv5w", _device="/job:localhost/replica:0/task:0/gpu:0"](conv5w)]] 
    [[Node: conv5w/_99 = _Recv[_start_time=0, client_terminated=false, recv_device="/job:localhost/replica:0/task:0/cpu:0", send_device="/job:localhost/replica:0/task:0/gpu:0", send_device_incarnation=1, tensor_name="edge_4_conv5w", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"]()]] 

auf der anderen Seite, wenn ich initialisieren Variable mit:

init = tf.initialize_all_variables() 
sess.run([init]) , 

dieses Mal ist es die Anfangswerte in net_data["conv5"][0], nicht die finetuned diejenigen

Antwort

0

Wiederherstellen aus dem Meta-Diagramm ergibt bereitet die Grafik, die Daten nicht. Zum Wiederherstellen von Daten müssen die Werte, die Sie zu Sammlungsobjekten wiederherstellen möchten, zur Trainingszeit hinzugefügt und diese Sammlungen zum Zeitpunkt der Wiederherstellung erneut geladen werden. Die official tutorial zeigt, wie (in der Tat gibt es einen anderen Weg, siehe unten).

Eine andere Möglichkeit wäre, das Diagramm wiederherzustellen (tf.write_graph und tf.import_graph_def) und dann alle Variablen von einem Prüfpunkt wiederherzustellen. Die offiziellen Tutorials scheinen eher zu diesem Checkpoint-Ansatz zu führen (siehe Link oben). Der Meta-Graph ist eher auf verteilte Verarbeitung ausgerichtet, was mehr Arbeit und Sorgfalt erfordert.

0

Eric hat die meisten Ihrer Punkte beantwortet. stand ich ein ähnliches Problem und eine einfache Abhilfe ist zu ihm:

  1. Re-load entweder die gesamte Grafik oder importiert seinen Meta-Graph (Ersteres ist empfohlen, wenn Sie ein Neuling sind). Sie haben immer noch nicht laufen die Funktion
  2. Starten Sie Ihre Sitzung wiederherstellen und initialisieren alle Variablen
  3. Restore (mit tf.train.Saver) der Checkpoint

Das Problem mit dem Fall ist, dass, wenn Sie laufen tf.initialize_all_variables() nach der Wiederherstellung, Tensorflow setzt sie auf Anfangswerte zurück und Sie verlieren Ihre Feingewichte.

Verwandte Themen