Nach kurzem meine TensorFlow Version zu aktualisieren, ich begegnet diesen Fehler, die ich nicht in der Lage bin zu lösen:TensorFlow: Wie kann ich Adam-Optimizer-Variablen wiederverwenden?
Traceback (most recent call last):
File "cross_train.py", line 177, in <module>
train_network(use_gpu=True)
File "cross_train.py", line 46, in train_network
with tf.control_dependencies([s_opt.apply_gradients(s_grads), s_increment_step]):
...
ValueError: Variable image-conv1-layer/weights/Adam/ already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:
File "cross_train.py", line 34, in train_network
with tf.control_dependencies([e_opt.apply_gradients(e_grads), e_increment_step]):
File "cross_train.py", line 177, in <module>
train_network(use_gpu=True)
Meine Modellarchitektur ist 3 verschiedene Faltungs neuronales Netz Zweige: M, E, S. Im Training I Ich versuche, die Schritte zu wechseln, in denen ich die Proben durch M & E (Punktproduktabstand ihrer Einbettungen) propagieren und mit Adam aktualisieren; dann propagiere Proben durch M & S und update mit Adam; und wiederholen. Also im Grunde ist M fixiert (wird bei jedem Schritt aktualisiert), aber E- und S-Zweige werden abwechselnd aktualisiert.
Als solche habe ich zwei Instanzen von AdamOptimizer (e_opt
und s_opt
) aber ich habe den Fehler, da die Gewichtungsvariable M-conv1/weights/Adam/
bereits vorhanden ist, wenn ich versuche, den S Zweig zu aktualisieren.
Dies geschah nicht mit mir, bevor ich meine TensorFlow Version aktualisierte. Ich weiß, wie die Wiederverwendung von Variablen setzen im Allgemeinen in TensorFlow, zum Beispiel:
with tf.variable_scope(name, values=[input_to_layer]) as scope:
try:
weights = tf.get_variable("weights", [height, width, input_to_layer.get_shape()[3], channels], initializer=tf.truncated_normal_initializer(stddev=0.1, dtype=tf.float32))
bias = tf.get_variable("bias", [channels], initializer=tf.constant_initializer(0.0, dtype=tf.float32))
except ValueError:
scope.reuse_variables()
weights = tf.get_variable("weights", [height, width, input_to_layer.get_shape()[3], channels], initializer=tf.truncated_normal_initializer(stddev=0.1, dtype=tf.float32))
bias = tf.get_variable("bias", [channels], initializer=tf.constant_initializer(0.0, dtype=tf.float32))
Aber ich bin nicht sicher, ob ich das gleiche für Adam tun können. Irgendwelche Ideen? Hilfe wäre sehr willkommen.
Haben Sie einen Namen für die Optimierung op? 'optimizer = tf.train.AdamOptimizer (learning_rate = 0.0001, name = 'first_optimizer'). minimieren (loss)' –