keras_8_優化器 Optimizers

1. 優化器的使用

  1. 優化器(optimizer)是編譯Keras模型的所需的兩個參數之一:python

    from keras import optimizers
    
    model = Sequential()
    model.add(Dense(64, kernel_initializer='uniform', input_shape=(10,)))
    model.add(Activation('tanh'))
    model.add(Activation('softmax'))
    
    # 你能夠先實例化一個優化器對象,而後將它傳入model.compile()
    sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
    model.compile(loss='mean_squared_error', optimizer=sgd)
    
    # 或者你能夠經過名稱來調用優化器。在後一種狀況下,將使用優化器的默認參數。
    # 傳入優化器名稱: 默認參數將被採用
    model.compile(loss='mean_squared_error', optimizer='sgd')

2. Keras優化器的公共參數

  • 參數clipnormclipvalue能在全部的優化器中使用,用於控制梯度裁剪(Gradient Clipping):算法

    # Gradient Clipping能夠理解爲:gradient過大時把它降一點,好比取其一半;梯度太小時把它放大一點,好比取其1.5倍
    
    from keras import optimizers
    # 全部參數梯度將被裁剪,讓其l2範數最大爲1:g * 1 / max(1, l2_norm)
    sgd = optimizers.SGD(lr=0.01, clipnorm=1.)
    
    from keras import optimizers
    # 全部參數d 梯度將被裁剪到數值範圍內:
    # 最大值0.5
    # 最小值-0.5
    sgd = optimizers.SGD(lr=0.01, clipvalue=0.5)

3. keras支持的Optimizers

  1. SGD
    • 隨機梯度降低優化器。包含擴展功能的支持: - 動量(momentum)優化, - 學習率衰減(每次參數更新後) - Nestrov動量(NAG)優化
  2. RMSprop
    • RMSProp優化器。建議使用優化器的默認參數 (除了學習率lr,它能夠被自由調節)。這個優化器一般是訓練循環神經網絡RNN的不錯選擇。
  3. Adagrad
    • Adagrad優化器。Adagrad是一種具備特定參數學習率的優化器,它根據參數在訓練期間的更新頻率進行自適應調整。 參數接收的更新越多,更新越小。建議使用優化器的默認參數。
  4. Adadelta
    • Adadelta優化器。Adadelta是Adagrad的一個具備更強魯棒性的的擴展版本,它不是累積全部過去的梯度,而是根據漸變動新的移動窗口調整學習速率。 這樣,即便進行了許多更新,Adadelta仍在繼續習。與Adagrad相比,在Adadelta的原始版本中,您無需設置初始學習率。 在此版本中,與大多數其餘Keras優化器同樣,能夠設置初始學習速率和衰減因子。建議使用優化器的默認參數。
  5. Adam(cs231n推薦用這個)
    • Adam優化器。默認參數遵循原論文中提供的值。
  6. Adamax
    • Adamax優化器,來自Adam論文的第七小節。它是Adam算法基於無窮範數(infinity norm)的變種。 默認參數遵循論文中提供的值。
  7. Nadam
    • Nesterov版本Adam優化器。正像Adam本質上是RMSProp與動量momentum的結合, Nadam是採用Nesterov momentum版本的Adam優化器。默認參數遵循論文中提供的值。 建議使用優化器的默認參數。

4. TFOptimizer

  • 原生Tensorlfow優化器的包裝類(wrapper class)。
相關文章
相關標籤/搜索