阅读(7.8k) 书签 (0)

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 不是序列.