1. 程式人生 > >基於Theano的深度學習(Deep Learning)框架Keras學習隨筆-03-優化器

基於Theano的深度學習(Deep Learning)框架Keras學習隨筆-03-優化器

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)

     引數:

  1. lr :float>=0,學習速率
  2. momentum :float>=0 引數更新的動量
  3. decay : float>=0 每次更新後學習速率的衰減量
  4. nesterov :Boolean 是否使用Nesterov動量項

四、Adagrad(引數推薦使用預設值)

keras.optimizers.Adagrad(lr=0.01, epsilon=1e-6)

     引數:

  1. lr : float>=0,學習速率
  2. epsilon :float>=0

五、Adadelta(引數推薦使用預設值)

keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=1e-6)

     引數:

  1. lr :float>=0,學習速率
  2. rho : float>=0
  3. epsilon :float>=0 模糊因子

六、RMSprop(引數推薦使用預設值)

keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=1e-6)

    引數:

  1. lr:float>=0,學習速率
  2. rho : float>=0
  3. epsilon : float>=0 模糊因子

七、Adam(引數推薦使用預設值)

keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-8)

     引數:

  1. lr : float>=0,學習速率
  2. beta_1, beta_2:floats, 0 < beta < 1 通常都是接近於1
  3. epsilon :float>=0 模糊因子

參考資料: