GradientDescentOptimizer設置自適應學習率


 

我正使用TensorFlow來訓練一個神經網絡。我初始化GradientDescentOptimizer的方式如下:

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
mse = tf.reduce_mean(tf.square(out - out_))
train_step = tf.train.GradientDescentOptimizer(0.3).minimize(mse)

問題是我不知道如何為學習速率或衰減值設置更新規則。
如何在這里使用自適應學習率呢?

 

最佳解決辦法
首先,tf.train.GradientDescentOptimizer旨在對所有步驟中的所有變量使用恆定的學習率。 TensorFlow還提供現成的自適應優化器,包括tf.train.AdagradOptimizer和tf.train.AdamOptimizer,這些可以作為隨時可用的替代品。
但是,如果要通過其他普通漸變下降控制學習速率,則可以利用以下事實:tf.train.GradientDescentOptimizer構造函數的learning_rate參數可以是Tensor對象。這允許您在每個步驟中為學習速率計算不同的值,例如:

learning_rate = tf.placeholder(tf.float32, shape=[])
# ...
train_step = tf.train.GradientDescentOptimizer(
    learning_rate=learning_rate).minimize(mse)

sess = tf.Session()

# Feed different values for learning rate to each training step.
sess.run(train_step, feed_dict={learning_rate: 0.1})
sess.run(train_step, feed_dict={learning_rate: 0.1})
sess.run(train_step, feed_dict={learning_rate: 0.01})
sess.run(train_step, feed_dict={learning_rate: 0.01})

或者,您可以創建一個標量tf.Variable來保存學習率,並在每次要更改學習率時進行分配

 

次佳解決辦法
Tensorflow提供了一種自動將指數衰減應用於學習速率張量的操作:tf.train.exponential_decay。有關正在使用的示例,請參閱this line in the MNIST convolutional model example。然后使用前文中的建議將此變量作為learning_rate參數提供給您的優化器。
要看的關鍵部分是:

# Optimizer: set up a variable that's incremented once per batch and
# controls the learning rate decay.
batch = tf.Variable(0)

learning_rate = tf.train.exponential_decay(
  0.01,                # Base learning rate.
  batch * BATCH_SIZE,  # Current index into the dataset.
  train_size,          # Decay step.
  0.95,                # Decay rate.
  staircase=True)
# Use simple momentum for the optimization.
optimizer = tf.train.MomentumOptimizer(learning_rate,
                                     0.9).minimize(loss,
                                                   global_step=batch)

注意最小化global_step=batch參數。這會告訴優化器在每次訓練時都會幫助您增加'batch'參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM