TensorFlow optimizer官方教程

声明:

  1. 翻译自官方文档

Optimizer

该模块定义了一个训练模型的operator的API。一般来说不会直接用到这个API,它更像是一个父类,各种基于不同类型优化算法的optimizer都继承自这里,如:GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer

基本用法Usage

构建TensorFlow graph:

# Create an optimizer with desired parameters.
opt = GradientDescentOptimizer(learning_rate=0.1)
# Add Ops to the graph to minimizer a cost by uodating a list of variables.
# "cost" is a Tensor, and the list of variables contains tf.Variable objects.
obj_op = opt.minimizer(cost, var_list =< list of variables>)

开启训练:

# Execute opt_op to do one step of training:
opt_op.run()

或:

sess.run(opt_op)

计算梯度Processing gradients before applying them

对optimizer调用minimizer()函数包含两步:

  1. 计算梯度
  2. 将梯度应用到参数更新中

也就是说,如果你将两步分离,比如想获取所有trainable_variables的梯度时,可以进行如下操作:

  1. optimizer.compute_gradients()计算梯度
  2. 对梯度进行搞事情
  3. optimizer.apply_gradients()进行参数更新

示例:

# Create an optimizer.
optimizer = 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 (gradienet, 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)

梯度门限Gating Gradients

minimize()compute_gradients()都有一个共同的参数gate_gradients,用来控制梯度计算的并行。

  1. GATE_NONE:以结果不可复现为代价,最大限度地并行计算和应用梯度。
  2. GATE_OP:对于每个操作,确保在使用之前计算所有梯度。
  3. GATE_GRAPH:确保在使用任何一个变量之前计算所有变量的所有梯度。比上面GATE_OP更严格的条件。

Slots

一些优化器子类(如MomentumOptimizer和AdagradOptimizer)需要分配和管理除trainable_variables之外的其他变量。这些被称为Slots,便于调试过程中输出其他变量(Slots)的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值