2017-10-09 72 views
1

應用自定義學習率變量在Tensorflow,之後我得到我的損失來看,我把它給了優化,並增加了必要的分化和更新方面的計算圖:在Tensorflow

global_counter = tf.Variable(0, dtype=DATA_TYPE, trainable=False) 
learning_rate = tf.train.exponential_decay(
    INITIAL_LR, # Base learning rate. 
    global_counter, # Current index into the dataset. 
    DECAY_STEP, # Decay step. 
    DECAY_RATE, # Decay rate. 
    staircase=True) 
optimizer = tf.train.MomentumOptimizer(learning_rate, 0.9).minimize(network.finalLoss, global_step=global_counter) 
feed_dict = {TRAIN_DATA_TENSOR: samples, TRAIN_LABEL_TENSOR: labels} 
results = sess.run([optimizer], feed_dict=feed_dict) 

我想對這個過程進行一個小的修改。我想爲網絡中的每個不同參數都調整learning_rate。例如,讓網絡中的兩個不同的可訓練參數AB,並讓dL/dAdL/dB參數相對於損失的偏導數。動量優化更新變量:

Ma <- 0.9*Ma + learning_rate*dL/dA 
    A <- A - Ma 

    Mb <- 0.9*Mb + learning_rate*dL/dB 
    B <- B - Mb 

我要修改此爲:

Ma <- 0.9*Ma + ca*learning_rate*dL/dA 
    A <- A - Ma 

    Mb <- 0.9*Mb + cb*learning_rate*dL/dB 
    B <- B - Mb 

cacb有特殊學習速率爲尺度不同的參數。據我所知,Tensorflow有compute_gradientsapply_gradients我們可以調用這種情況下的方法,但文檔不太清楚如何使用它們。任何幫助將非常感激。

+0

[如何在Tensorflow中設置圖層學習速率?](https://stackoverflow.com/questions/34945554/how-to-set-layer-wise-learning-rate-in-tensorflow) –

回答

2

TO的梯度:

self.gradients = tf.gradients(self.loss, tf.trainable_variables()) 

現在,您可以訪問使用sess.run([model.gradients], feed_dict)

假設漸變,你已經宣佈learning_rate作爲tf.Variable(),您可以使用分配學習率以下代碼:

sess.run(tf.assign(model.lr, args.learning_rate * (args.decay_rate ** epoch))) 

上面的代碼僅僅是一個例子。您可以修改它以用於您的目的。

+0

在這種情況下,我需要編寫我自己的優化器,而不是使用Tensorflow。無論如何,它看起來像要走的路,因爲它似乎沒有其他選擇。 –