2017-02-06 3 views
3

Ich habe n (z. B. n = 3) Bereiche und x (z. B. x = 4) keine der Variablen in jedem Bereich definiert. Die Bereiche sind: alle extrahieren und liefern die Variablen aus nur einer der Rahmen auf der Grundlage eines Kriterien während der Laufzeittf.get_collection zum Extrahieren von Variablen eines Bereichs

model/generator_0 
model/generator_1 
model/generator_2 

Sobald ich den Verlust zu berechnen, was ich will. Daher ist der Index des Umfangs idx, die ich wählen ist ein argmin Tensor in int32 werfen

<tf.Tensor 'model/Cast:0' shape=() dtype=int32> 

ich schon versucht:

train_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, 'model/generator_'+tf.cast(idx, tf.string)) 

, die offensichtlich nicht funktionierte. Gibt es eine Möglichkeit, alle x Variablen, die zu diesem bestimmten Bereich gehören, mithilfe von idx an den Optimierer zu übergeben.

Vielen Dank im Voraus!

Vignesh Srinivasan

Antwort

3

Sie können oder später TF 1.0 rc1 so etwas wie dies in tun:

v = tf.Variable(tf.ones(())) 
loss = tf.identity(v) 
with tf.variable_scope('adamoptim') as vs: 
    optim = tf.train.AdamOptimizer(learning_rate=0.1).minimize(loss) 
optim_vars = tf.get_collection(tf.GraphKeys.GLOBAL_VARIABLES, scope=vs.name) 
print([v.name for v in optim_vars]) #=> prints lists of vars created 
+0

leider die optim_vars die Variablen alle aus allen Bereichen enthält. Mein Problem ist, dass ich ~ mit tf.variable_scope ('generator_0'): v1 = tf.Variable (tf.ones (())) loss1 = tf.identity (v1) mit tf.variable_scope ('generator_1'): v2 = tf.Variable (tf.ones (())) loss2 = tf.identity (v2) ~ Ich möchte dann das tf.minimum (loss, loss2) finden und die Variablen übergeben zu diesem Verlust zum Optimierer gehören. – viggie

+0

Ich habe es gerade in der neuesten Version (nächtlich) getestet und 'optim_vars' enthält nur Variablen von' adapoptim' scope –

+0

Sie verwenden den gleichen definierten Verlust, den ich vorher nicht kenne. Ich muss die 'min_idx = tf.cast (tf.argmin (tf.stack ([loss1, loss2]), 0), tf.int32)' finden und dann diese 'loss = tf.stack ([loss1, loss2 ]) [min_idx] 'zum Optimierer. Und deshalb erhalte ich alle Variablen, die durch den Vorschlag definiert sind. – viggie

Verwandte Themen