TensorFlow(四)优化器函数Optimizer
因為大多數機器學習任務就是最小化損失,在損失定義的情況下,后面的工作就交給了優化器。因為深度學習常見的是對于梯度的優化,也就是說,優化器最后其實就是各種對于梯度下降算法的優化。
常用的optimizer類
Optimizer
GradientDescentOptimizer
AdagradOptimizer
AdagradDAOptimizer
MomentumOptimizer
AdamOptimizer
FtrlOptimizer
RMSPropOptimizer
1. class tf.train.Optimizer
優化器(optimizers)類的基類。這個類定義了在訓練模型的時候添加一個操作的API。你基本上不會直接使用這個類,但是你會用到他的子類比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer.等等這些。
| class tf.train.Optimizer | 基本的優化類,該類不常常被直接調用,而較多使用其子類,比如GradientDescentOptimizer, AdagradOptimizer或者MomentumOptimizer |
| tf.train.Optimizer.init(use_locking, name) | 創建一個新的優化器,該優化器必須被其子類(subclasses)的構造函數調用 |
| tf.train.Optimizer.minimize(loss, global_step=None, var_list=None, gate_gradients=1, aggregation_method=None, colocate_gradients_with_ops=False, name=None, grad_loss=None) | 添加操作節點,用于最小化loss,并更新var_list該函數是簡單的合并了compute_gradients()與apply_gradients()函數返回為一個優化更新后的var_list,如果global_step非None,該操作還會為global_step做自增操作 |
| tf.train.Optimizer.apply_gradients(grads_and_vars, global_step=None, name=None) | 將計算出的梯度應用到變量上,是函數minimize()的第二部分,返回一個應用指定的梯度的操作Operation,對global_step做自增操作 |
| tf.train.Optimizer.compute_gradients(loss,var_list=None, gate_gradients=1, aggregation_method=None, colocate_gradients_with_ops=False, grad_loss=None) | 對var_list中的變量計算loss的梯度該函數為函數minimize()的第一部分,返回一個以元組(gradient, variable)組成的列表 |
class tf.train.Optimizer 用法
# Create an optimizer with the desired parameters. opt = GradientDescentOptimizer(learning_rate=0.1) # Add Ops to the graph to minimize a cost by updating a list of variables. # "cost" is a Tensor, and the list of variables contains tf.Variable objects. opt_op = opt.minimize(cost, var_list=<list of variables>) # Execute opt_op to do one step of training: opt_op.run()注意事項:在使用它們之前處理梯度
使用minimize()操作,該操作不僅可以計算出梯度,而且還可以將梯度作用在變量上。如果想在使用它們之前處理梯度,可以按照以下三步驟使用optimizer :
1、使用函數compute_gradients()計算梯度
2、按照自己的愿望處理梯度
3、使用函數apply_gradients()應用處理過后的梯度
例如:
# 創建一個optimizer. opt = GradientDescentOptimizer(learning_rate=0.1)# 計算<list of variables>相關的梯度 grads_and_vars = opt.compute_gradients(loss, <list of variables>)# grads_and_vars為tuples (gradient, variable)組成的列表。 #對梯度進行想要的處理,比如cap處理 capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars]# 令optimizer運用capped的梯度(gradients) opt.apply_gradients(capped_grads_and_vars)選通梯度
函數minimize() 與compute_gradients()都含有一個參數gate_gradient,用于控制在應用這些梯度時并行化的程度。
其值可以取:GATE_NONE, GATE_OP 或 GATE_GRAPH
GATE_NONE : 并行地計算和應用梯度。提供最大化的并行執行,但是會導致有的數據結果沒有再現性。比如兩個matmul操作的梯度依賴輸入值,使用GATE_NONE可能會出現有一個梯度在其他梯度之前便應用到某個輸入中,導致出現不可再現的(non-reproducible)結果
GATE_OP: 對于每個操作Op,確保每一個梯度在使用之前都已經計算完成。這種做法防止了那些具有多個輸入,并且梯度計算依賴輸入情形中,多輸入Ops之間的競爭情況出現。
GATE_GRAPH: 確保所有的變量對應的所有梯度在他們任何一個被使用前計算完成。該方式具有最低級別的并行化程度,但是對于想要在應用它們任何一個之前處理完所有的梯度計算時很有幫助的。
2. class tf.train.GradientDescentOptimizer
實現梯度下降算法的優化器(僅需要輸入“學習率”)
__init__(learning_rate, use_locking=False,name=’GradientDescent’)
作用:創建一個梯度下降優化器對象
參數:
learning_rate: A Tensor or a floating point value. 要使用的學習率
use_locking: 要是True的話,就對于更新操作(update operations.)使用鎖
name: 名字,可選,默認是”GradientDescent”.
compute_gradients(loss,var_list=None,gate_gradients=GATE_OP,aggregation_method=None,colocate_gradients_with_ops=False,grad_loss=None)
compute_gradients(loss,var_list=None,gate_gradients=GATE_OP,aggregation_method=None,colocate_gradients_with_ops=False,grad_loss=None)
作用:對于在變量列表(var_list)中的變量計算對于損失函數的梯度,這個函數返回一個(梯度,變量)對的列表,其中梯度就是相對應變量的梯度了。這是minimize()函數的第一個部分,
參數:
loss: 待減小的值
var_list: 默認是在GraphKey.TRAINABLE_VARIABLES.
gate_gradients: How to gate the computation of gradients. Can be GATE_NONE, GATE_OP, or GATE_GRAPH.
aggregation_method: Specifies the method used to combine gradient terms. Valid values are defined in the class AggregationMethod.
colocate_gradients_with_ops: If True, try colocating gradients with the corresponding op.
grad_loss: Optional. A Tensor holding the gradient computed for loss.
apply_gradients(grads_and_vars,global_step=None,name=None)
作用:把梯度“應用”(Apply)到變量上面去。其實就是按照梯度下降的方式加到上面去。這是minimize()函數的第二個步驟。 返回一個應用的操作。
參數:
grads_and_vars: compute_gradients()函數返回的(gradient, variable)對的列表
global_step: Optional Variable to increment by one after the variables have been updated.
name: 可選,名字
get_name()
minimize(loss,global_step=None,var_list=None,gate_gradients=GATE_OP,aggregation_method=None,colocate_gradients_with_ops=False,name=None,grad_loss=None)
作用:非常常用的一個函數
通過更新var_list來減小loss,這個函數就是前面compute_gradients() 和apply_gradients().的結合
3. class tf.train.AdadeltaOptimizer
實現了 Adadelta算法的優化器,可以算是下面的Adagrad算法改進版本
構造函數:
tf.train.AdadeltaOptimizer.init(learning_rate=0.001, rho=0.95, epsilon=1e-08, use_locking=False, name=’Adadelta’)
作用:構造一個使用Adadelta算法的優化器
參數:
learning_rate: tensor或者浮點數,學習率
rho: tensor或者浮點數. The decay rate.
epsilon: A Tensor or a floating point value. A constant epsilon used to better conditioning the grad update.
use_locking: If True use locks for update operations.
name: 【可選】這個操作的名字,默認是”Adadelta”
4. class tf.train.AdagradOptimizer
Optimizer that implements the Adagrad algorithm.
tf.train.AdagradOptimizer.__init__(learning_rate, initial_accumulator_value=0.1, use_locking=False, name=’Adagrad’)
參數:
learning_rate: A Tensor or a floating point value. The learning rate.
initial_accumulator_value: A floating point value. Starting value for the accumulators, must be positive.
use_locking: If True use locks for update operations.
name: Optional name prefix for the operations created when applying gradients. Defaults to “Adagrad”.
The Optimizer base class provides methods to compute gradients for a loss and apply gradients to variables. A collection of subclasses implement classic optimization algorithms such as GradientDescent and Adagrad.
You never instantiate the Optimizer class itself, but instead instantiate one of the subclasses.
5.class tf.train.MomentumOptimizer
Optimizer that implements the Momentum algorithm.
tf.train.MomentumOptimizer.__init__(learning_rate, momentum, use_locking=False, name=’Momentum’, use_nesterov=False)
參數:
learning_rate: A Tensor or a floating point value. The learning rate.
momentum: A Tensor or a floating point value. The momentum.
use_locking: If True use locks for update operations.
name: Optional name prefix for the operations created when applying gradients. Defaults to “Momentum”.
6. class tf.train.AdamOptimizer
實現了Adam算法的優化器
構造函數:
tf.train.AdamOptimizer.__init__(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name=’Adam’)
總結
以上是生活随笔為你收集整理的TensorFlow(四)优化器函数Optimizer的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一加Buds Ace官宣!首款Ace系列
- 下一篇: TensorFlow(三)常用函数