Ich habe eine riesige globale Variable sowohl durch den Zug und die Bewertung verwendet, sondern mit unterschiedlicher Form. Jetzt, da ich versuche, sowohl die Auswertung als auch den Zug im selben Prozess auszuführen, stolperte ich über die Tatsache, dass ich die in einem Tensorflussgraphen definierten Variablen nicht wirklich löschen kann. Der Workaround, der beispielsweise für here vorgeschlagen wird, besteht darin, die reset_default_graph()
zu verwenden, aber das scheint nicht mit dem Graphenkontextmanager zu spielen.Zurücksetzen einer Grafik in Tensorflow
import numpy as np
import tensorflow as tf
GRAPH = tf.Graph()
def train(examples):
with GRAPH.as_default() as g:
# actually this is huge variable
global_var = tf.get_variable('global_var',
initializer=np.full((examples, 32), 0.0),
trainable=False)
def evaluate(examples):
# tf.reset_default_graph() # ValueError: Variable input_var already exists
with GRAPH.as_default() as g: # initialized to some other size
tf.reset_default_graph()
global_var = tf.get_variable('global_var',
initializer=np.full((examples, 32), 0.0),
trainable=False)
# in fact tensorflow creates a new graph and does not use GRAPH to define global_var
train(32)
evaluate(8)
Ergebnisse in:
Traceback (most recent call last):
File "C:/Users/MrD/.PyCharm2017.1/config/scratches/scratch_44.py", line 22, in <module>
evaluate(8)
File "C:/Users/MrD/.PyCharm2017.1/config/scratches/scratch_44.py", line 19, in evaluate
trainable=False)
File "C:\_\Python35\lib\contextlib.py", line 66, in __exit__
next(self.gen)
File "C:\_\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 3616, in get_controller
if self.stack[-1] is not default:
IndexError: list index out of range
Also, was ist der richtige Weg reset_default_graph() zu verwenden? Gibt es wirklich keine Möglichkeit, eine Variable neu zu definieren, die den alten, möglicherweise riesigen Initialisierer verworfen hat?
[Dies] (https://stackoverflow.com/questions/39352865/resetting-default-graph -does-not-remove-variables) antwortet, warum es nicht funktioniert, nicht sicher, ob die vorgeschlagene Lösung auch zu Ihrem Problem passt. – user1735003
Danke @ user1735003 - irgendwelche Ideen, wie ich dann über diese Variable verfügen könnte (kann aus Platzgründen keine Platzhalter verwenden)? –
Vielleicht könnte 'tf.assign' für Sie arbeiten? (mit 'validate_shape = Falsch') – user1735003