Ich habe zwei separate Tensorflow-Prozesse, eine, die ein Modell trainiert und graph_defs mit tensorflow.python.client.graph_util.convert_variables_to_constants
schreiben, und eine andere, die die graph_def mit tensorflow.import_graph_def
liest. Ich möchte, dass der zweite Prozess den graph_def regelmäßig aktualisiert, wenn er vom ersten Prozess aktualisiert wird. Leider scheint es, dass jedes Mal, wenn ich das Diagramm lese, das alte immer noch verwendet wird, selbst wenn ich die aktuelle Sitzung schließe und eine neue erstelle. Ich habe auch versucht, die import_graph_def call
mit sess.graph.as_default()
, vergeblich zu wickeln. Hier ist mein aktueller graph_def Ladecode:Nachladen Tensorflow-Modell
if self.sess is not None:
self.sess.close()
self.sess = tf.Session()
graph_def = tf.GraphDef()
with open(self.graph_path, 'rb') as f:
graph_def.ParseFromString(f.read())
with self.sess.graph.as_default():
tf.import_graph_def(graph_def, name='')
Da die Graphen Ich verwende alle die gleiche Struktur haben, nur unterschiedliche Gewichte, ich denke, es wäre effizienter sein, das Diagramm einmal zu laden und dann nur die Variablen zu laden, die etwas wie 'Saver.restore()' verwenden. Ich habe das versucht und es scheint, dass nachfolgende Aufrufe von Saver.restore() keine Wirkung haben. Gibt es einen Weg, dies zu erreichen? –
Ja, das klingt, als sollte es funktionieren. Mehrere Aufrufe von 'Saver.restore()' sollten Auswirkungen haben, also bin ich mir nicht sicher, was aber schief läuft. Verwenden Sie einen einzelnen Graphen und eine einzelne "tf.Session"? – mrry
Es scheint, dass ich falsch lag, mehrere Aufrufe von 'restore()' haben Wirkung, und sie sind ziemlich viel schneller als das Laden des gesamten Graphen (so schnell, dass es mich denken ließ, dass sie nichts tun!). Ich denke, ich werde von nun an nur 'restore() 'ausführen, es sei denn, in Zukunft muss ich das Diagramm erneut in C++ ausführen. –