停止梯度计算。
用法
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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。