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


Python tf.stop_gradient用法及代碼示例


停止梯度計算。

用法

tf.stop_gradient(
    input, name=None
)

參數

  • input 一個Tensor
  • name 操作的名稱(可選)。

返回

  • 一個Tensor。具有與 input 相同的類型。

當在圖中執行時,此操作輸出其輸入張量 as-is。

在構建計算梯度的操作時,此操作會阻止考慮其輸入的貢獻。通常,梯度生成器通過遞歸查找有助於其計算的輸入,將操作添加到圖以計算指定'loss' 的導數。如果你在圖中插入這個操作,它的輸入就會被梯度生成器屏蔽掉。在計算梯度時不考慮它們。

當您想使用 TensorFlow 計算一個值但需要假裝該值是一個常數時,這很有用。例如,向量 x 的 softmax 函數可以寫成

def softmax(x):
    numerator = tf.exp(x)
    denominator = tf.reduce_sum(numerator)
    return numerator / denominator

但是,如果 x 中的值很大,這很容易溢出。另一種更穩定的方法是從每個值中減去 x 的最大值。

def stable_softmax(x):
    z = x - tf.reduce_max(x)
    numerator = tf.exp(z)
    denominator = tf.reduce_sum(numerator)
    return numerator / denominator

但是,當我們通過 softmax 反向傳播到 x 時,我們不想通過 tf.reduce_max(x)(如果最大值不是唯一的,那麽梯度可能會流向錯誤的輸入)計算反向傳播並將其視為常數。因此,我們應該把它寫成

def stable_softmax(x):
    z = x - tf.stop_gradient(tf.reduce_max(x))
    numerator = tf.exp(z)
    denominator = tf.reduce_sum(numerator)
    return numerator / denominator

其他一些例子包括:

  • M-step 的 EM 算法不應涉及通過 E-step 的輸出進行反向傳播。
  • 玻爾茲曼機器的對比發散訓練,其中,在區分能量函數時,訓練不得通過從模型生成樣本的圖進行反向傳播。
  • 對抗性訓練,不應該通過對抗性示例生成過程發生反向傳播。

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.stop_gradient。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。