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