使用優化器
優化參數是keras模型編譯參數其中的一個:
model = Sequential()
model.add(Dense(20, 64, init='uniform'))
model.add(Activation('tanh'))
model.add(Activation('softmax'))
sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
先建立網絡模型,使用SGD優化算法,學習率爲0.1,衰減項1e-6,動量0.9,使用nesterov最優梯度優化算法。模型編譯第一個參數使用平方誤差作爲損失函數,優化算法使用sgd。
基類
keras.optimizers.Optimizer(**kwargs)
所有的優化器都來自這個類,支持以下的關鍵字參數:
clipnorm: float >= 0.
注意:這是集成優化器的基類,並不是用來訓練模型的的實際的優化器。以下是幾種常見的優化算法。
SGD
keras.optimizers.SGD(lr=0.01, momentum=0., decay=0., nesterov=False)
參數:
- lr: float >= 0. 學習率
- momentum: float >= 0. 動量參數更新
- decay: float >= 0. 每次迭代更新學習率衰減項
- nesterov: boolean. 是否使用Nesterov 動量方法.布爾型
Adagrad
keras.optimizers.Adagrad(lr=0.01, epsilon=1e-6)
以上參數建議使用默認值。
參數:
- lr: float >= 0. 學習率
- epsilon: float >= 0.
Adadelta
keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=1e-6)
參數:
- lr: float >= 0. 學習率.一般選擇默認值
- float >= 0.
- epsilon: float >= 0. 模糊因子
詳細請參考Matthew Zeiler:“Adadelta: an adaptive learning rate method”
RMSprop
keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-6)
參數:
- lr: float >= 0.學習率
- rho: float >= 0
- epsilon: float >= 0.
Adam
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8, kappa=1-1e-8)
Kingma and Lei Ba提出的Adam優化器 Adam: A Method For Stochastic Optimization.
這篇文章中會給出默認的參數值,這裏kappa替代原文中的lambda。
參數:
- lr: float >= 0. 學習率
- beta_1, beta_2: floats, 0 < beta < 1. 一般接近於1.
- epsilon: float >= 0.
- kappa: float 0 < kappa < 1. 原文中的Lambda .