tensorflow Optimizer.minimize()和gradient clipping

在tensorflow中通常使用下述方法对模型进行训练

# 定义Optimizer
opt = tf.train.AdamOptimizer(lr)
# 定义train
train = opt.minimize(loss)

for i in range(100):
    sess.run(train)

train指向的是tf.Graph中关于训练的节点,其中opt.minimize(loss)相当不直观,它相当于

# 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).  

# Ask the optimizer to apply the gradients.
opt.apply_gradients(grads_and_vars)

即建立了求梯度的节点和optimizer根据梯度对变量进行修改的节点

因此,可以通过下述方法对梯度进行修改

grads_and_vars = opt.compute_gradients(loss, <list of variables>)
capped_grads_and_vars = [(MyCapper(grad), var) for grad, var in grads_and_vars]
opt.apply_gradients(capped_grads_and_vars)

举两个例子

# tf.clip_by_value(
#     t,
#     clip_value_min,
#     clip_value_max,
#     name=None
# )

grads_and_vars = opt.compute_gradients(loss)
capped_grads_and_vars = [(tf.clip_by_value(grad, -1., 1.), var) for grad, var in grads_and_vars]
opt.apply_gradients(capped_grads_and_vars)
# tf.clip_by_global_norm(
#     t_list,
#     clip_norm,
#     use_norm=None,
#     name=None
# )
# Returns:
#     list_clipped: A list of Tensors of the same type as list_t.
#     global_norm: A 0-D (scalar) Tensor representing the global norm.

opt = tf.train.AdamOptimizer(lr)
grads, vars = zip(*opt.compute_gradients(loss))
grads, _ = tf.clip_by_global_norm(grads, 5.0)
train = opt.apply_gradients(zip(grads, vars))

 

posted on 2018-07-16 18:23 pine73 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/esoteric/p/9319266.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值