Keras學習率調整


Keras提供兩種學習率適應方法,可通過回調函數實現。

1. LearningRateScheduler

keras.callbacks.LearningRateScheduler(schedule)

 該回調函數是學習率調度器. 

參數

  • schedule:函數,該函數以epoch號為參數(從0算起的整數),返回一個新學習率(浮點數)

代碼

import keras.backend as K
from keras.callbacks import LearningRateScheduler
 
def scheduler(epoch):
    # 每隔100個epoch,學習率減小為原來的1/10
    if epoch % 100 == 0 and epoch != 0:
        lr = K.get_value(model.optimizer.lr)
        K.set_value(model.optimizer.lr, lr * 0.1)
        print("lr changed to {}".format(lr * 0.1))
    return K.get_value(model.optimizer.lr)
 
reduce_lr = LearningRateScheduler(scheduler)
model.fit(train_x, train_y, batch_size=32, epochs=5, callbacks=[reduce_lr])

2. ReduceLROnPlateau

keras.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=0, mode='auto', epsilon=0.0001, cooldown=0, min_lr=0)

當評價指標不在提升時,減少學習率

當學習停滯時,減少2倍或10倍的學習率常常能獲得較好的效果。該回調函數檢測指標的情況,如果在patience個epoch中看不到模型性能提升,則減少學習率

參數

  • monitor:被監測的量
  • factor:每次減少學習率的因子,學習率將以lr = lr*factor的形式被減少
  • patience:當patience個epoch過去而模型性能不提升時,學習率減少的動作會被觸發
  • mode:‘auto’,‘min’,‘max’之一,在min模式下,如果檢測值觸發學習率減少。在max模式下,當檢測值不再上升則觸發學習率減少。
  • epsilon:閾值,用來確定是否進入檢測值的“平原區”
  • cooldown:學習率減少后,會經過cooldown個epoch才重新進行正常操作
  • min_lr:學習率的下限

代碼

from keras.callbacks import ReduceLROnPlateau
reduce_lr = ReduceLROnPlateau(monitor='val_loss', patience=10, mode='auto')
model.fit(train_x, train_y, batch_size=32, epochs=5, validation_split=0.1, callbacks=[reduce_lr])

  

 

參考文獻:

【1】Keras學習率調整

 


免責聲明!

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



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