当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.clip_by_norm用法及代码示例


将张量值裁剪为最大 L2 范数。

用法

tf.clip_by_norm(
    t, clip_norm, axes=None, name=None
)

参数

  • t 一个 TensorIndexedSlices 。这必须是浮点类型。
  • clip_norm 0-D(标量)Tensor > 0。最大裁剪值,也是浮点数
  • axes 一个 int32 类型的一维(向量)Tensor,包含用于计算 L2 范数的维度。如果None(默认),使用所有维度。
  • name 操作的名称(可选)。

返回

  • 剪辑的 TensorIndexedSlices

抛出

  • ValueError 如果 clip_norm 张量不是 0-D 标量张量。
  • TypeError 如果输入的 dtype 不是浮点或复数类型。

给定一个张量 t 和一个最大剪辑值 clip_norm ,此操作对 t 进行归一化,使其 L2 范数小于或等于 clip_norm ,沿着 axes 中给出的维度。具体来说,在所有维度都用于计算的默认情况下,如果t的L2范数已经小于或等于clip_norm,则不修改t。如果 L2 范数大于 clip_norm ,则此操作返回与 t 具有相同类型和形状的张量,其值设置为:

t * clip_norm / l2norm(t)

在这种情况下,输出张量的 L2 范数是 clip_norm

作为另一个示例,如果 t 是矩阵且 axes == [1] ,则输出的每一行的 L2 范数都将小于或等于 clip_norm 。如果改为axes == [0],则输出的每一列都将被剪裁。

代码示例:

some_nums = tf.constant([[1, 2, 3, 4, 5]], dtype=tf.float32)
tf.clip_by_norm(some_nums, 2.0).numpy()
array([[0.26967996, 0.5393599 , 0.80903983, 1.0787199 , 1.3483998 ]],
      dtype=float32)

此操作通常用于在使用优化器应用渐变之前裁剪渐变。大多数梯度数据是模型不同部分的不同形状张量的集合。因此,这是一个常见的用法:

# Get your gradients after training
loss_value, grads = grad(model, features, labels)

# Apply some clipping
grads = [tf.clip_by_norm(g, norm)
             for g in grads]

# Continue on with training
optimizer.apply_gradients(grads)

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.clip_by_norm。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。