gpt4 book ai didi

python - PyTorch 中 "detach()"和 "with torch.nograd()"之间的区别?

转载 作者:太空宇宙 更新时间:2023-11-04 11:16:49 26 4
gpt4 key购买 nike

我知道两种从梯度计算中排除计算元素的方法 backward

方法一:使用with torch.no_grad()

with torch.no_grad():
y = reward + gamma * torch.max(net.forward(x))
loss = criterion(net.forward(torch.from_numpy(o)), y)
loss.backward();

方法二:使用.detach()

y = reward + gamma * torch.max(net.forward(x))
loss = criterion(net.forward(torch.from_numpy(o)), y.detach())
loss.backward();

这两者有区别吗?两者都有优点/缺点吗?

最佳答案

tensor.detach() 创建一个与不需要 grad 的张量共享存储的张量。它将输出与计算图分离。所以没有梯度会沿着这个变量反向传播。

带有 torch.no_grad() 的包装器 暂时将所有 requires_grad 标志设置为 false。 torch.no_grad 表示没有任何操作应该构建图形。

不同之处在于,一个只引用调用它的给定变量。另一个影响 with 语句中发生的所有操作。此外,torch.no_grad 将使用更少的内存,因为它从一开始就知道不需要梯度,因此不需要保留中间结果。

通过 here 中的示例详细了解它们之间的差异.

关于python - PyTorch 中 "detach()"和 "with torch.nograd()"之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56816241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com