keras_8_優化器 Optimizers


1. 優化器的使用

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

    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)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM