2016-07-25 98 views
5

我正在通過Udacity Deep Learning課程的作業6。我不確定爲什麼在這些步驟中使用zip()函數來應用漸變。Tensorflow:爲什麼在涉及應用漸變的步驟中使用zip()函數?

下面是相關代碼:

# 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) 

什麼是應用zip()功能的目的是什麼?

爲什麼gradientsv以這種方式存儲?我以爲zip(*iterable)只返回一個zip對象。

回答

6

我不知道Tensorflow,但大概optimizer.compute_gradients(loss)產生(梯度,值)元組。

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) 

重新拉鍊的梯度和值列表回的(梯度,值)元組,然後將其傳遞給optimizer.apply_gradients方法可迭代。

相關問題