我们可以将代码中所有定义的张量的 .requires_grad 立即重置为零吗
Can we reset .requires_grad of all defined tensors in a code to zero at once
我正在使用 PyTorch 1.6.0 通过 autograd 学习张量(比如说 x)。
学习 x 后,如何重置作为 autograd comp 中节点的每个张量的 .requires_grad。图为零?
我知道 torch.detach() 以及手动将 .requires_grad 设置为 False 。我正在寻找一次性说明。
Ps:我想这样做是因为在我学习 x 的代码部分执行后,我仍然想使用这些张量。另外,有些要转换成numpy。
图中没有为所有张量切换 .requires_grad
的“一次性指令”。
通常 parameters
保存在 torch.nn.Module
个实例中,但如果它们在其他地方,您可以随时将它们添加到某些 list
并对其进行迭代,我会做类似的事情这个:
import torch
class Leafs:
def __init__(self):
self.leafs = []
def add(self, tensor):
self.leafs.append(tensor)
return tensor
def clear(self):
for leaf in self.leafs:
leaf.requires_grad_(False)
keeper = Leafs()
x = keeper.add(torch.tensor([1.2], requires_grad=True))
y = keeper.add(torch.tensor([1.3], requires_grad=True))
print(x.requires_grad, y.requires_grad)
keeper.clear()
print(x.requires_grad, y.requires_grad)
通常不需要这样做,如果您不想在计算的某些部分使用梯度,您可以随时使用 with torch.no_grad()
上下文管理器。
我正在使用 PyTorch 1.6.0 通过 autograd 学习张量(比如说 x)。 学习 x 后,如何重置作为 autograd comp 中节点的每个张量的 .requires_grad。图为零? 我知道 torch.detach() 以及手动将 .requires_grad 设置为 False 。我正在寻找一次性说明。
Ps:我想这样做是因为在我学习 x 的代码部分执行后,我仍然想使用这些张量。另外,有些要转换成numpy。
图中没有为所有张量切换 .requires_grad
的“一次性指令”。
通常 parameters
保存在 torch.nn.Module
个实例中,但如果它们在其他地方,您可以随时将它们添加到某些 list
并对其进行迭代,我会做类似的事情这个:
import torch
class Leafs:
def __init__(self):
self.leafs = []
def add(self, tensor):
self.leafs.append(tensor)
return tensor
def clear(self):
for leaf in self.leafs:
leaf.requires_grad_(False)
keeper = Leafs()
x = keeper.add(torch.tensor([1.2], requires_grad=True))
y = keeper.add(torch.tensor([1.3], requires_grad=True))
print(x.requires_grad, y.requires_grad)
keeper.clear()
print(x.requires_grad, y.requires_grad)
通常不需要这样做,如果您不想在计算的某些部分使用梯度,您可以随时使用 with torch.no_grad()
上下文管理器。