基於Theano的深度學習(Deep Learning)框架Keras學習隨筆-03-優化器
阿新 • • 發佈:2019-02-16
optimizers(優化器)。機器學習包括兩部分內容,一部分是如何構建模型,另一部分就是如何訓練模型。訓練模型就是通過挑選最佳的優化器去訓練出最優的模型。
Keras包含了很多優化方法。比如最常用的隨機梯度下降法(SGD),還有Adagrad、Adadelta、RMSprop、Adam等。下面通過具體的程式碼介紹一下優化器的使用方法。最重要的就是SGD,其他的優化器有興趣的可以自行了解一下。
一、優化器的使用方法
在編譯一個Keras模型時,優化器是2個引數之一(另外一個是損失函式)。看如下程式碼:
model = Sequential() model.add(Dense(64, init='uniform', input_dim=10)) 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)
這個例子中是在呼叫compile之前例項化了一個優化器。我們也可以通過傳遞名字的方式呼叫預設的優化器。程式碼如下:
# passoptimizer by name: default parameters will be used
model.compile(loss='mean_squared_error', optimizer='sgd')
二、基類
keras.optimizers.Optimizer(**kwargs)
所有的優化器都繼承自上面這個帶有keyword引數的類。當然基類是不能用來訓練模型的。
三、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,學習速率
- rho : float>=0
- epsilon :float>=0 模糊因子
六、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)
引數:
- lr : float>=0,學習速率
- beta_1, beta_2:floats, 0 < beta < 1 通常都是接近於1
- epsilon :float>=0 模糊因子
參考資料: