人工智能A7论坛 >> Tensorflow和深度学习笔记_论坛版 >> 10.附录

10.6 梯度裁剪

梯度裁剪的思想:

对梯度进行裁剪,通过控制梯度的最大范式,防止梯度爆炸的问题,是一种比较常用的梯度规约的方式。其实是 value = sqrt(w1^2+w2^2….),如果value超过了阈值,就算一个衰减系系数,value的值等于阈值:(如 5,10,15)。

Tensorflow函数clip_by_norm

Tensorflow的梯度裁剪函数是clip_by_norm

 

tensorflow中的clip_by_norm示例:

optimizer = tf.train.AdamOptimizer(learning_rate, beta1=0.5)

grads = optimizer.compute_gradients(cost)

for i, (g, v) in enumerate(grads):

    if g is not None:

        grads[i] = (tf.clip_by_norm(g, 5), v)  # clip gradients

train_op = optimizer.apply_gradients(grads)