sgd 隨機梯度下降
keras 中包含了各式優化器供我們使用,但通常我會傾向於使用 sgd 驗證模型能否快速收斂,然後調整不同的學習速率看看模型最後的效能,然後再嘗試使用其他優化器。
keras 中文文件中對 sgd 的描述如下:
keras.optimizers.sgd(lr=0.01, momentum=0.0, decay=0.0, nesterov=false)
隨機梯度下降法,支援動量引數,支援學習衰減率,支援nesterov動量
引數:lr:大或等於0的浮點數,學習率
momentum:大或等於0的浮點數,動量引數
decay:大或www.cppcns.com等於0的浮點數,每次更新後的學習率衰減值
nesterov:布林值,確定是否使用nesterov動量
引數設定
time-based learning rate schedule
keras 已經內建了乙個基於時間的學習速率調整表,並通過上述引數中的 decay 來實現,學習速率的調整公式如下:
learningrate = learningrate * 1/(1 + decay * epoch)
當我們初始化引數為:
learningrate = 0.1
decay = 0.001
大致變化曲線如下(非實際曲線,僅示意):
當然,方便起見,我們可以將優化器設定如下,使其學習速率隨著訓練輪次變化:
sgd = sgd(lr=learning_rate, decay=learning_rate/nb_epoch, momentum=0.9, nesterov=true)
drop-based learning rate schedule
另外一種學習速率的調整方法思路是保持乙個恆定學習速率一段時間後立即降低,是一種突變的方式。通常整個變化趨勢為指數形式。
對應的學習速率變化公式如下:
learningrate = initiallearningrate * droprate^f程式設計客棧loor(epoch / epochdrop)
實現需要使用 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
關於bgd和sgd
首先bgd為批梯度下降,即所有樣本計算完畢後才進行梯度更新;而sgd為隨機梯度下降,隨機計算一次樣本就www.cppcns.com進行梯度下降,所以速度快很多但容易陷入區域性最優值。
折中的辦法是採用小批的梯度下降,即把資料分成若干個批次,一批來進行一次梯度下降,減少隨機性,計算量也不是很大。 mini-batch
keras中的batch_size就是小批梯度下降。
本文標題: keras sgd 隨機梯度下降優化器引數設定方式
本文位址: /jiaoben/python/321635.html
Keras SGD 隨機梯度下降優化器引數設定
keras 中包含了各式優化器供我們使用,但通常我會傾向於使用 sgd 驗證模型能否快速收斂,然後調整不同的學習速率看看模型最後的效能,然後再嘗試使用其他優化器。keras 中文文件中對 sgd 的描述如下 keras.optimizers.sgd lr 0.01,momentum 0.0,deca...
梯度下降 隨機梯度下降 批梯度下降
下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...
stanford 梯度 梯度下降,隨機梯度下降
一 梯度gradient 在標量場f中的一點處存在乙個向量g,該向量方向為f在該點處變化率最大的方向,其模也等於這個最大變化率的數值,則向量g稱為標量場f的梯度。在向量微積分中,標量場的梯度是乙個向量場。標量場中某一點上的梯度指向標量場增長最快的方向,梯度的長度是這個最大的變化率。更嚴格的說,從歐氏...