2017-09-25 113 views
0
model9 = tf.nn.relu(tf.matmul(x1,w9)+b) 
model10 = tf.nn.sigmoid(tf.matmul(model9,w10)+b) 

error = tf.reduce_mean(tf.square(model10-y)) 
train = tf.train.AdamOptimizer(learning_rate=0.001).minimize(error) 
  1. 穿過所有層是tensorflow真是太聰明瞭,它會「迭代」,並檢查activaction功能和基於激活函數的導數應用梯度下降?Tensorflow如何知道在minim()中使用哪個派生函數?

  2. 如果我認爲模型9的學習率應爲0.01,該怎麼辦?那麼我如何在網絡上配置?

回答

1

是的,你的代碼正在構造一個由表示操作和變量的節點組成的TensorFlow計算圖。由於TensorFlow知道每個操作的梯度(即操作輸出相對於每個輸入的梯度),因此它可以使用反向傳播算法在梯度下降期間更新變量,沿每個激活函數應用正確的導數方式。見反傳的這個優秀的解釋:http://cs224d.stanford.edu/lecture_notes/notes3.pdf

使用不同的學習速率爲每一層至於,這不是那麼簡單,但你可以通過減少通話分割到2個組成部分實現這樣的事情:compute_gradients和apply_gradients然後修改漸變以有效地改變你的學習速度。就像這樣:

model9 = tf.nn.relu(tf.matmul(x1,w9)+b) 
model10 = tf.nn.sigmoid(tf.matmul(model9,w10)+b) 
error = tf.reduce_mean(tf.square(model10-y)) 

optimiser = tf.train.AdamOptimizer(learning_rate=0.001)  
gradients = optimiser.compute_gradients(error, [w9, w10]) # Compute the gradients of error with respect to w9 and w10 

# gradients is a list of tuples [(gradient, variable)] 
gradients[0][0] *= 10 # Multiply the gradient of w9 by 10 to increase the learning rate 
train = optimiser.apply_gradients(gradients) # New train op 
+0

謝謝你,我的朋友。 –

+0

注意:Adam跟蹤每個變量的統計信息以動態調整學習速率,所以這種技術可能並不如此有效,除了在培訓初期。 –

1

穿過所有層是tensorflow真是太聰明瞭,它會「迭代」,並檢查activaction功能和基於激活函數的導數應用梯度下降?

是的。這就是使用Tensorflow的重點。

相關問題