優化器的基類。
用法
tf.compat.v1.train.Optimizer(
use_locking, name
)
參數
-
use_locking
布爾。如果 True 應用使用鎖來防止對變量的並發更新。 -
name
一個非空字符串。用於為優化器創建的累加器的名稱。
拋出
-
ValueError
如果名稱格式錯誤。
遷移到 TF2
警告:這個 API 是為 TensorFlow v1 設計的。繼續閱讀有關如何從該 API 遷移到本機 TensorFlow v2 等效項的詳細信息。見TensorFlow v1 到 TensorFlow v2 遷移指南有關如何遷移其餘代碼的說明。
tf.compat.v1.train.Optimizer
可用於 Eager 模式和 tf.function
,但不推薦使用。請在 TF2 中改用tf.keras.optimizers.Optimizer
的子類。有關示例,請參閱基本訓練循環或從頭開始編寫訓練循環。
如果您的 TF1 代碼包含 tf.compat.v1.train.Optimizer
符號,無論是否使用 tf.estimator.Estimator
,您都不能簡單地將其替換為相應的 tf.keras.optimizers.Optimizer
s。要遷移到 TF2,建議將與 Estimator
一起使用的整個訓練程序遷移到基於 Keras Model.fit
或 TF2 自定義訓練循環。
到原生 TF2 的結構映射
前:
sgd_op = tf.compat.v1.train.GradientDescentOptimizer(3.0)
opt_op = sgd_op.minimize(cost, global_step, [var0, var1])
opt_op.run(session=session)
後:
sgd = tf.keras.optimizers.SGD(3.0)
sgd.minimize(cost_fn, [var0, var1])
如何映射參數
TF1 參數名稱 | TF2 參數名稱 | 注意 |
---|---|---|
use_locking |
不支持 | - |
name |
name. |
- |
使用示例之前和之後
前:
g = tf.compat.v1.Graph()
with g.as_default():
var0 = tf.compat.v1.Variable([1.0, 2.0])
var1 = tf.compat.v1.Variable([3.0, 4.0])
cost = 5 * var0 + 3 * var1
global_step = tf.compat.v1.Variable(
tf.compat.v1.zeros([], tf.compat.v1.int64), name='global_step')
init_op = tf.compat.v1.initialize_all_variables()
sgd_op = tf.compat.v1.train.GradientDescentOptimizer(3.0)
opt_op = sgd_op.minimize(cost, global_step, [var0, var1])
session = tf.compat.v1.Session(graph=g)
session.run(init_op)
opt_op.run(session=session)
print(session.run(var0))
[-14. -13.]
後:
>>> var0 = tf.Variable([1.0, 2.0])
>>> var1 = tf.Variable([3.0, 4.0])
>>> cost_fn = lambda:5 * var0 + 3 * var1
>>> sgd = tf.keras.optimizers.SGD(3.0)
>>> sgd.minimize(cost_fn, [var0, var1])
>>> print(var0.numpy())
[-14. -13.]
此類定義 API 以添加 Ops 以訓練模型。您從不直接使用此類,而是實例化其子類之一,例如 GradientDescentOptimizer
, AdagradOptimizer
或 MomentumOptimizer
。
用法
# 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()
既可以計算梯度,也可以將它們應用於變量。如果您想在應用梯度之前對其進行處理,則可以分三個步驟使用優化器:
- 使用
compute_gradients()
計算梯度。 - 根據需要處理漸變。
- 使用
apply_gradients()
應用處理後的漸變。
例子:
# Create an optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1)
# Compute the gradients for a list of variables.
grads_and_vars = opt.compute_gradients(loss, <list of variables>)
# grads_and_vars is a list of tuples (gradient, variable). Do whatever you
# need to the 'gradient' part, for example cap them, etc.
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars]
# Ask the optimizer to apply the capped gradients.
opt.apply_gradients(capped_grads_and_vars)
門控梯度
minimize()
和 compute_gradients()
都接受 gate_gradients
參數,該參數控製梯度應用期間的並行度。
可能的值為: GATE_NONE
, GATE_OP
和 GATE_GRAPH
。
GATE_NONE
:並行計算和應用梯度。這提供了最大的執行並行性,但代價是結果中的一些不可重現性。例如兩個梯度matmul
取決於輸入值:有GATE_NONE
在計算另一個梯度之前,可以將其中一個梯度應用於其中一個輸入,從而導致不可重現的結果。
GATE_OP:對於每個 Op,確保在使用之前計算所有梯度。這可以防止 Ops 的競爭條件為多個輸入生成梯度,其中梯度取決於輸入。
GATE_GRAPH:確保在使用其中任何一個變量之前計算所有變量的所有梯度。這提供了最少的並行性,但如果您想在應用任何漸變之前處理所有漸變,這可能會很有用。
插槽
一些優化器子類,例如 MomentumOptimizer
和 AdagradOptimizer
分配和管理與要訓練的變量關聯的其他變量。這些被稱為插槽。插槽有名稱,您可以向優化器詢問它使用的插槽的名稱。一旦有了槽名稱,您就可以向優化器詢問它創建的用於保存槽值的變量。
如果您想記錄調試訓練算法、報告有關插槽的統計信息等,這可能很有用。
相關用法
- Python tf.compat.v1.train.Optimizer.compute_gradients用法及代碼示例
- Python tf.compat.v1.train.FtrlOptimizer.compute_gradients用法及代碼示例
- Python tf.compat.v1.train.get_or_create_global_step用法及代碼示例
- Python tf.compat.v1.train.cosine_decay_restarts用法及代碼示例
- Python tf.compat.v1.train.AdagradOptimizer.compute_gradients用法及代碼示例
- Python tf.compat.v1.train.init_from_checkpoint用法及代碼示例
- Python tf.compat.v1.train.Checkpoint用法及代碼示例
- Python tf.compat.v1.train.Supervisor.managed_session用法及代碼示例
- Python tf.compat.v1.train.Checkpoint.restore用法及代碼示例
- Python tf.compat.v1.train.global_step用法及代碼示例
- Python tf.compat.v1.train.MonitoredSession.run_step_fn用法及代碼示例
- Python tf.compat.v1.train.RMSPropOptimizer.compute_gradients用法及代碼示例
- Python tf.compat.v1.train.exponential_decay用法及代碼示例
- Python tf.compat.v1.train.natural_exp_decay用法及代碼示例
- Python tf.compat.v1.train.MomentumOptimizer用法及代碼示例
- Python tf.compat.v1.train.RMSPropOptimizer用法及代碼示例
- Python tf.compat.v1.train.get_global_step用法及代碼示例
- Python tf.compat.v1.train.GradientDescentOptimizer.compute_gradients用法及代碼示例
- Python tf.compat.v1.train.linear_cosine_decay用法及代碼示例
- Python tf.compat.v1.train.Supervisor用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.train.Optimizer。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。