
如上圖所示,曲線代表損失值,小球一開始位於(1)處,假設學習速率設置為 △ v,那么根據梯度下降,損失值將在(1) (2)之間來回移動,無法到達最小值(3)處。要想到達(3),只能降低學習速率。
keras中實現方法:
learning_rate_reduction
= ReduceLROnPlateau(monitor
=
'val_acc', patience
=
3, verbose
=
1, factor
=
0.
5, min_lr
=
0.
00001)
#並且作為callbacks進入generator,開始訓練
history
= model.fit_generator(datagen.flow(X_train,Y_train, batch_size
=batch_size),
epochs
= epochs, validation_data
= (X_val,Y_val),
verbose
=
2, steps_per_epoch
=X_train.shape[
0]
// batch_size
, callbacks
=[learning_rate_reduction])
文檔:
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:學習率的下線