优化器的基类。
用法
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。