在模型訓練dl模型時,隨著模型的epoch迭代,往往會推薦逐漸減小learning rate,在一些實驗中也證明確實對訓練的收斂有正向效果。對於learning rate的改變,有定製衰減規則直接控制的,也有通過演算法自動尋優的。這裡主要介紹下tf自帶的兩種衰減方法:指數衰減和多項式衰減。
方法原型:
tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=false, name=none)
引數:learning_rate:初始值
global_step:全域性step數(每個step對應一次batch)
decay_steps:learning rate更新的step週期,即每隔多少step更新一次learning rate的值
decay_rate:指數衰減引數(對應α^t中的α)
staircase:是否階梯性更新learning rate,也就是global_step/decay_steps的結果是float型還是向下取整
計算公式:
decayed_learning_rate=learning_rate*decay_rate^(global_step/decay_steps)
方法原型:
tf.train.polynomial_decay(learning_rate, global_step, decay_steps, end_learning_rate=0.0001, power=1.0, cycle=false, name=none)
引數:learning_rate:初始值
global_step:全域性step數(每個step對應一次batch)
decay_steps:learning rate更新的step週期,即每隔多少step更新一次learning rate的值
end_learning_rate:衰減最終值
power:多項式衰減係數(對應(1-t)^α的α)
cycle:step超出decay_steps之後是否繼續迴圈t
計算公式:
當cycle=false時
global_step=min(global_step, decay_steps)
decayed_learning_rate=
(learning_rate-end_learning_rate)*(1-global_step/decay_steps)^(power)+end_learning_rate
當cycle=true時
decay_steps=decay_steps*ceil(global_step/decay_steps)
decayed_learning_rate=
(learning_rate-end_learning_rate)*(1-global_step/decay_steps)^(power)+end_learning_rate
注:ceil是向上取整
def _configure_learning_rate(num_samples_per_epoch, global_step):
"""configures the learning rate.
args:
num_samples_per_epoch: the number of samples in each epoch of training.
global_step: the global_step tensor.
returns:
a `tensor` representing the learning rate.
raises:
valueerror: if
decay_steps = int(num_samples_per_epoch / flags.batch_size *
flags.num_epochs_per_decay)
if flags.sync_replicas:
decay_steps /= flags.replicas_to_aggregate
if flags.learning_rate_decay_type == 'exponential':
return tf.train.exponential_decay(flags.learning_rate,
global_step,
decay_steps,
flags.learning_rate_decay_factor,
staircase=true,
name='exponential_decay_learning_rate')
elif flags.learning_rate_decay_type == 'fixed':
return tf.constant(flags.learning_rate, name='fixed_learning_rate')
elif flags.learning_rate_decay_type == 'polynomial':
return tf.train.polynomial_decay(flags.learning_rate,
global_step,
decay_steps,
flags.end_learning_rate,
power=1.0,
cycle=false,
name='polynomial_decay_learning_rate')
else:
raise valueerror('learning_rate_decay_type [%s] was not recognized',
flags.learning_rate_decay_type)
深度學習 學習率 learning rate
學習率 learning rate 控制 模型的學習進度 lr即stride 步長 即反向傳播演算法中的 n n l n n n l n 學習率 大 學習率 小 學習速度快慢 使用時間點 剛開始訓練時 一定輪數過後 1.易損失值 2.易振盪。1.易過擬合 2.收斂速度慢。在訓練過程中,一般根據訓練輪...
深度學習 學習率 learning rate
學習率 learning rate 控制 模型的學習進度 lr即stride 步長 即反向傳播演算法中的 n n l n n n l n 學習率 大 學習率 小 學習速度快慢 使用時間點 剛開始訓練時 一定輪數過後 1.易損失值 2.易振盪。1.易過擬合 2.收斂速度慢。在訓練過程中,一般根據訓練輪...
ubuntu 10 04下調整 wine字型方法
wine字型調整方法 1 從c windows fonts 裡拷貝乙個simsun.ttc到 wine drive c windows fonts 2 修改 加入 wine system.reg system currentcontrolset hardware profiles current s...