Tensorflow coding 笔记
Tensorflow loss — 梯度修剪apply_gradients和compute_gradients
梯度修剪主要避免训练梯度爆炸和消失问题
TensorFlow中的 minimize(loss,global_step,var_list) 包含两个步骤:compute_gradients和apply_gradients.
第一步: compute_gradients 根据loss目标函数计算梯度.
第二步: apply_gradients 使用计算得到的梯度来更新对应的variable.
eg.
import tensorflow as tf
optimizer = tf.train.AdamOptimizer(learning_rate=LEARNING_RATE)
grads_and_vars = optimizer.compute_gradients(loss,var_list)
train_op = optimizer.apply_gradients(grads_and_vars, global_step
其中三个参数:
(1)loss:最小化的目标,训练的目标函数,如交叉熵损失函数。
(2)var_list:每次要迭代更新的参数集合。
(3)global_step:梯度每下降一次加1,用于记录迭代优化的次数,用于参数输出和保存。
ps.为什么minimize()要分开两个步骤:
有时候需要对梯度做一定的修正,例如为了防止 gradient vanishing(梯度消失)或 gradient explosion (梯度爆炸),需要事先采取一些干预措施以避免程序出现nan情况。
有时候需要给计算得到的梯度乘以一个权重、或创建多GPU优化器、或其它操作。
引用链接:
https://zhuanlan.zhihu.com/p/343628982
tf.reshape
tf.reshape(
tensor, shape, name=None
)
eg.
>>> t = [[1, 2, 3],
... [4, 5, 6]]
>>> tf.reshape(t, [-1])
<tf.Tensor 'Reshape_1:0' shape=(6,) dtype=int32>