2016-07-25 14 views
5

Ich arbeite durch Aufgabe 6 des Udacity Deep Learning Kurses. Ich bin mir nicht sicher, warum in diesen Schritten die Funktion zip() zum Anwenden der Farbverläufe verwendet wird.Tensorflow: Warum wird die Funktion zip() in den Schritten zum Anwenden der Gradienten verwendet?

ist hier der entsprechende Code:

# define the loss function 
logits = tf.nn.xw_plus_b(tf.concat(0, outputs), w, b) 
loss = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits, tf.concat(0, train_labels))) 

# Optimizer. 

global_step = tf.Variable(0) 
#staircase=True means that the learning_rate updates at discrete time steps 
learning_rate = tf.train.exponential_decay(10.0, global_step, 5000, 0.1, staircase=True) 
optimizer = tf.train.GradientDescentOptimizer(learning_rate) 

gradients, v = zip(*optimizer.compute_gradients(loss)) 
gradients, _ = tf.clip_by_global_norm(gradients, 1.25) 
optimizer = optimizer.apply_gradients(zip(gradients, v), global_step=global_step) 

Was ist der Zweck der zip() Funktion der Anwendung?

Warum werden gradients und v auf diese Weise gespeichert? Ich dachte zip(*iterable) zurückgegeben nur ein Zip-Objekt.

Antwort

6

Ich weiß nicht, Tensorflow, aber vermutlich optimizer.compute_gradients(loss) liefert (Farbverlauf, Wert) Tupel.

gradients, v = zip(*optimizer.compute_gradients(loss)) 

führt eine Transposition , eine Liste von Steigungen und eine Liste von Werten zu schaffen.

gradients, _ = tf.clip_by_global_norm(gradients, 1.25) 

dann Clips der Gradienten und

optimizer = optimizer.apply_gradients(zip(gradients, v), global_step=global_step) 

Wiederreißverschluss die Gradienten- und Wertelisten zurück in ein iterable von (Gradient, value) Tupeln, die dann die optimizer.apply_gradients Methode übergeben wird.