停止梯度計算。
用法
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 的輸出進行反向傳播。
- 玻爾茲曼機器的對比發散訓練,其中,在區分能量函數時,訓練不得通過從模型生成樣本的圖進行反向傳播。
- 對抗性訓練,不應該通過對抗性示例生成過程發生反向傳播。
相關用法
- Python tf.strings.substr用法及代碼示例
- Python tf.strings.reduce_join用法及代碼示例
- Python tf.strings.regex_full_match用法及代碼示例
- Python tf.strings.regex_replace用法及代碼示例
- Python tf.strings.length用法及代碼示例
- Python tf.strided_slice用法及代碼示例
- Python tf.strings.bytes_split用法及代碼示例
- Python tf.strings.as_string用法及代碼示例
- Python tf.strings.unsorted_segment_join用法及代碼示例
- Python tf.stack用法及代碼示例
- Python tf.strings.lower用法及代碼示例
- Python tf.strings.split用法及代碼示例
- Python tf.strings.upper用法及代碼示例
- Python tf.strings.unicode_decode_with_offsets用法及代碼示例
- Python tf.strings.join用法及代碼示例
- Python tf.strings.to_hash_bucket用法及代碼示例
- Python tf.strings.ngrams用法及代碼示例
- Python tf.strings.to_hash_bucket_strong用法及代碼示例
- Python tf.strings.unicode_decode用法及代碼示例
- Python tf.strings.unicode_encode用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.stop_gradient。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。