TensorFlow通过规范总和的比例剪切张量的值
2018-09-12 15:13 更新
tf.clip_by_global_norm
clip_by_global_norm ( t_list , clip_norm , use_norm = None , name = None )
定义在:tensorflow/python/ops/clip_ops.py
参见指南:Training函数>梯度剪辑
通过他们的规范的总和的比例来剪辑多个张量的值.
给定一个元组或张量 t_list 的列表,以及一个剪辑比率 clip_norm,,此操作返回 t_list 中所有张量的 list_clipped 和全局范数 (global_norm) 的列表.或者, 如果您已经计算了 t_list 的全局范数,则可以使用 use_norm 指定全局范数.
要执行剪辑,t_list[i] 的值设置为:
t_list[i] * clip_norm / max(global_norm, clip_norm)
当:
global_norm = sqrt(sum([l2norm(t)**2 for t in t_list]))
如果 clip_norm > global_norm ,那么条目 t_list 保持原样,否则它们将被全局的比例缩小.
任何类型为 None 的 t_list 项都将被忽略.
这是执行渐变剪辑的正确方法.
然而,它比 clip_by_norm() 慢,因为在执行剪辑操作之前必须准备好所有的参数.
ARGS:
- t_list:一个元组或混合张量、IndexedSlices 或 None 的列表.
- clip_norm:一个0维 (标量) 张量 > 0,剪辑比率.
- use_norm:一个0维 (标量) 类型浮点型 (可选) 的张量.使用全局的规范.如果不提供, global_norm () 用于计算范数.
- name:操作的名称(可选).
返回:
- list_clipped:与 list_t 具有相同类型的张量的列表.
- global_norm:代表全球规范的0维 (标量) 张量.
注意:
- TypeError:当 t_list 不是序列.