📜  pytorch 中的 tf.stop_gradient (1)

📅  最后修改于: 2023-12-03 15:34:32.971000             🧑  作者: Mango

Pytorch 中的 tf.stop_gradient

在 Pytorch 中,有一个名为 torch.nn.functional.dropout 的函数用于对输入张量进行 dropout 操作,但有时候我们需要在训练时关闭 dropout 操作,而在测试时启用 dropout 操作,这时我们就需要使用 torch.nn.functional.dropout 中的 training 参数来控制。然而,在一些情况下,我们不希望梯度在某个节点以下传递,这时就需要使用 torch.nn.functional.stop_gradient

什么是 tf.stop_gradient?

torch.nn.functional.stop_gradient 是一个用于在计算图中止梯度传播的函数。当我们使用该函数时,自动求导系统便会停止在该节点处的梯度计算,从而防止反向传播时梯度在该节点以下传递。该函数有一个输入参数 input,表示要中止梯度传播的节点,返回值为 input 本身。

代码示例

下面我们来看一个使用 torch.nn.functional.stop_gradient 的例子。

import torch

x = torch.tensor([2., 3.], requires_grad=True)
y = torch.tensor([3., 4.], requires_grad=True)

z = (x + y).mean()
z_sg = torch.nn.functional.stop_gradient(z)

l = z_sg * x

l.backward()
print(x.grad)  # tensor([0.5000, 0.5000])

在上面的代码中,我们将 z 的梯度传播中止,只计算 z 以前的梯度,从而达到在反向传播时只更新 x 的梯度,而不更新 y 的梯度的效果。

总结

使用 torch.nn.functional.stop_gradient 可以在计算图中止梯度传播,从而达到更灵活地控制梯度计算的效果。