keras 中包含了各式優化器供我們使用,但通常我會傾向於使用 sgd 驗證模型能否快速收斂,然後調整不同的學習速率看看模型最後的效能,然後再嘗試使用其他優化器。keras 中文文件中對 sgd 的描述如下:
keras 已經內建了乙個基於時間的學習速率調整表,並通過上述引數中的keras.optimizers.sgd(lr=0.01, momentum=0.0, decay=0.0, nesterov=false)
隨機梯度下降法,支援動量引數,支援學習衰減率,支援nesterov動量引數:
decay
來實現,學習速率的調整公式如下:
learningrate = learningrate *1/
(1+ decay * epoch)
當我們初始化引數為:
learningrate =
0.1decay =
0.001
大致變化曲線如下(非實際曲線,僅示意):
當然,方便起見,我們可以將優化器設定如下,使其學習速率隨著訓練輪次變化:
sgd = sgd(lr=learning_rate, decay=learning_rate/nb_epoch, momentum=
0.9, nesterov=
true
)
另外一種學習速率的調整方法思路是保持乙個恆定學習速率一段時間後立即降低,是一種突變的方式。通常整個變化趨勢為指數形式。
對應的學習速率變化公式如下:
learningrate = initiallearningrate * droprate^floor(epoch / epochdrop)
實現需要使用 keras 中的learningratescheduler
模組:
from keras.callbacks import learningratescheduler
# learning rate schedule
defstep_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 SGD 隨機梯度下降優化器引數設定方式
sgd 隨機梯度下降 keras 中包含了各式優化器供我們使用,但通常我會傾向於使用 sgd 驗證模型能否快速收斂,然後調整不同的學習速率看看模型最後的效能,然後再嘗試使用其他優化器。keras 中文文件中對 sgd 的描述如下 keras.optimizers.sgd lr 0.01,moment...
梯度下降 隨機梯度下降 批梯度下降
下面的h x 是要擬合的函式,j 損失函式,theta是引數,要迭代求解的值,theta求解出來了那最終要擬合的函式h 就出來了。其中m是訓練集的記錄條數,j是引數的個數。梯度下降法流程 1 先對 隨機賦值,可以是乙個全零的向量。2 改變 的值,使j 按梯度下降的方向減少。以上式為例 1 對於我們的...
stanford 梯度 梯度下降,隨機梯度下降
一 梯度gradient 在標量場f中的一點處存在乙個向量g,該向量方向為f在該點處變化率最大的方向,其模也等於這個最大變化率的數值,則向量g稱為標量場f的梯度。在向量微積分中,標量場的梯度是乙個向量場。標量場中某一點上的梯度指向標量場增長最快的方向,梯度的長度是這個最大的變化率。更嚴格的說,從歐氏...