當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。