Keras SGD 隨機梯度下降優(yōu)化器參數(shù)設(shè)置方式
SGD 隨機梯度下降
Keras 中包含了各式優(yōu)化器供我們使用,但通常我會傾向于使用 SGD 驗證模型能否快速收斂,然后調(diào)整不同的學(xué)習(xí)速率看看模型最后的性能,然后再嘗試使用其他優(yōu)化器。
Keras 中文文檔中對 SGD 的描述如下:
keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
隨機梯度下降法,支持動量參數(shù),支持學(xué)習(xí)衰減率,支持Nesterov動量
參數(shù):
lr:大或等于0的浮點數(shù),學(xué)習(xí)率
momentum:大或等于0的浮點數(shù),動量參數(shù)
decay:大或等于0的浮點數(shù),每次更新后的學(xué)習(xí)率衰減值
nesterov:布爾值,確定是否使用Nesterov動量
參數(shù)設(shè)置
Time-Based Learning Rate Schedule
Keras 已經(jīng)內(nèi)置了一個基于時間的學(xué)習(xí)速率調(diào)整表,并通過上述參數(shù)中的 decay 來實現(xiàn),學(xué)習(xí)速率的調(diào)整公式如下:
LearningRate = LearningRate * 1/(1 + decay * epoch)
當(dāng)我們初始化參數(shù)為:
LearningRate = 0.1
decay = 0.001
大致變化曲線如下(非實際曲線,僅示意):

當(dāng)然,方便起見,我們可以將優(yōu)化器設(shè)置如下,使其學(xué)習(xí)速率隨著訓(xùn)練輪次變化:
sgd = SGD(lr=learning_rate, decay=learning_rate/nb_epoch, momentum=0.9, nesterov=True)
Drop-Based Learning Rate Schedule
另外一種學(xué)習(xí)速率的調(diào)整方法思路是保持一個恒定學(xué)習(xí)速率一段時間后立即降低,是一種突變的方式。通常整個變化趨勢為指數(shù)形式。

對應(yīng)的學(xué)習(xí)速率變化公式如下:
LearningRate = InitialLearningRate * DropRate^floor(Epoch / EpochDrop)
實現(xiàn)需要使用 Keras 中的 LearningRateScheduler 模塊:
from keras.callbacks import LearningRateScheduler # learning rate schedule def step_decay(epoch): initial_lrate = 0.1 drop = 0.5 epochs_drop = 10.0 lrate = initial_lrate * math.pow(drop, math.floor((1+epoch)/epochs_drop)) return lrate lrate = LearningRateScheduler(step_decay) # Compile model sgd = SGD(lr=0.0, momentum=0.9, decay=0.0, nesterov=False) model.compile(loss=..., optimizer=sgd, metrics=['accuracy']) # Fit the model model.fit(X, Y, ..., callbacks=[lrate])
補充知識:keras中的BGD和SGD
關(guān)于BGD和SGD
首先BGD為批梯度下降,即所有樣本計算完畢后才進行梯度更新;而SGD為隨機梯度下降,隨機計算一次樣本就進行梯度下降,所以速度快很多但容易陷入局部最優(yōu)值。
折中的辦法是采用小批的梯度下降,即把數(shù)據(jù)分成若干個批次,一批來進行一次梯度下降,減少隨機性,計算量也不是很大。 mini-batch
keras中的batch_size就是小批梯度下降。
以上這篇Keras SGD 隨機梯度下降優(yōu)化器參數(shù)設(shè)置方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Keras 實現(xiàn)加載預(yù)訓(xùn)練模型并凍結(jié)網(wǎng)絡(luò)的層
- python神經(jīng)網(wǎng)絡(luò)Keras實現(xiàn)GRU及其參數(shù)量
- python神經(jīng)網(wǎng)絡(luò)Keras實現(xiàn)LSTM及其參數(shù)量詳解
- python神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)使用Keras進行回歸運算
- python神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)使用Keras進行簡單分類
- python神經(jīng)網(wǎng)絡(luò)Keras常用學(xué)習(xí)率衰減匯總
相關(guān)文章
基于Python實現(xiàn)人臉自動戴口罩系統(tǒng)
2019年新型冠狀病毒感染的肺炎疫情發(fā)生以來,牽動人心,舉國哀痛,口罩、酒精、消毒液奇貨可居。這篇文章主要介紹了基于Python的人臉自動戴口罩系統(tǒng),需要的朋友可以參考下2020-02-02
使用python requests模塊發(fā)送http請求及接收響應(yīng)的方法
用 python 編寫 http request 消息代碼時,建議用requests庫,因為requests比urllib內(nèi)置庫更為簡捷,requests可以直接構(gòu)造get,post請求并發(fā)送,本文給大家介紹了使用python requests模塊發(fā)送http請求及接收響應(yīng)的方法,需要的朋友可以參考下2024-03-03
Python中列表索引 A[ : 2 ]與A[ : ,&nb
這篇文章主要介紹了Python中列表索引 A[ : 2 ]與A[ : , 2]的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
Python使用pyglet庫完整實現(xiàn)漢諾塔游戲流程詳解
這篇文章主要介紹了Python使用pyglet庫完整實現(xiàn)漢諾塔游戲流程,漢諾塔問題是一個遞歸問題,也可以使用非遞歸法來解決,這個問題不僅是一個數(shù)學(xué)和邏輯問題,也是一個很好的教學(xué)工具,可以用來教授遞歸、算法和邏輯思考等概念,需要的朋友可以參考下2007-02-02

