停止梯度計算。
用法
tf.raw_ops.StopGradient(
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.raw_ops.StringStrip用法及代碼示例
- Python tf.raw_ops.StatelessCase用法及代碼示例
- Python tf.raw_ops.StatelessSampleDistortedBoundingBox用法及代碼示例
- Python tf.raw_ops.StringToHashBucketStrong用法及代碼示例
- Python tf.raw_ops.StringLength用法及代碼示例
- Python tf.raw_ops.StringToHashBucketFast用法及代碼示例
- Python tf.raw_ops.StringToNumber用法及代碼示例
- Python tf.raw_ops.StringJoin用法及代碼示例
- Python tf.raw_ops.StringSplitV2用法及代碼示例
- Python tf.raw_ops.StringUpper用法及代碼示例
- Python tf.raw_ops.StridedSlice用法及代碼示例
- Python tf.raw_ops.StringLower用法及代碼示例
- Python tf.raw_ops.SelfAdjointEigV2用法及代碼示例
- Python tf.raw_ops.Size用法及代碼示例
- Python tf.raw_ops.ScatterUpdate用法及代碼示例
- Python tf.raw_ops.ScatterNdUpdate用法及代碼示例
- Python tf.raw_ops.SparseCrossV2用法及代碼示例
- Python tf.raw_ops.ScatterAdd用法及代碼示例
- Python tf.raw_ops.Sub用法及代碼示例
- Python tf.raw_ops.SparseCross用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.raw_ops.StopGradient。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。