在遗留 PyTorch 中使用 requires_grad=False 将张量包装在 Variable 中的实用程序
Utility of wrapping tensor in Variable with requires_grad=False in legacy PyTorch
我使用的是 2017/18 年编写的代码库,我发现了以下代码:
audio_norm = audio_norm.unsqueeze(0)
audio_norm = torch.autograd.Variable(audio_norm, requires_grad=False)
我知道在 Variable
中包装张量以前允许将它们的梯度合并到 Torch 为以前版本的 Torch 构建的计算图中(现在不再需要),但我很困惑它的效用是什么在 torch.autograd.Variable(my_tensor, requires_grad=False)
中包装张量将是。
有人可以解释一下这是否是一个成语以及类似的现代 Torch 代码是什么?我的猜测是在张量上调用 detach
以停止跟踪其梯度。
作为参考,代码库中的相关行是 line 45 from the data_utils.py script of NVIDIA's Tacotron 2 implementation。谢谢。
在 PyTorch 0.3.1 及更早版本中,任何涉及需要由 autograd 跟踪的计算的张量都必须包装在 Variable
中。语义上 Variable.requires_grad
在 PyTorch 0.3.1 及更早版本中等同于 Tensor.requires_grad
现在。基本上,requires_grad=False
只是告诉 autograd 你永远不需要梯度 w.r.t。 variable/tensor。只有在至少一个输入 variable/tensor 具有 requires_grad=True
.
时,才会记录数学运算(即构建计算图)
请注意,任何使用比 0.3.1 更新的 PyTorch 的代码实际上并不需要使用 Variable
,这包括您提供的存储库中的代码(明确要求 PyTorch >= 1.0)。在 0.4 中,Variable
的功能被合并到 Tensor
class 中。在现代 PyTorch 中,您只需设置张量的 requires_grad
属性即可实现相同的行为。默认情况下,已经使用 requires_grad=False
构建了一个新的 user-defined 张量,因此您发布的代码的现代等价物通常只是删除 Variable
行。如果你不确定张量是否已经有 requires_grad == False
那么你可以明确地设置它。
audio_norm = audio_norm.unsqueeze(0)
audio_norm.requires_grad_(False)
您可以阅读遗留文档 here 了解更多信息。
您正在寻找
audio_norm = audio_norm.unsqueeze(0)
audio_norm = torch.tensor(audio_norm)
如果你需要它来要求毕业那么
audio_norm = torch.tensor(audio_norm, require_grad=True)
我使用的是 2017/18 年编写的代码库,我发现了以下代码:
audio_norm = audio_norm.unsqueeze(0)
audio_norm = torch.autograd.Variable(audio_norm, requires_grad=False)
我知道在 Variable
中包装张量以前允许将它们的梯度合并到 Torch 为以前版本的 Torch 构建的计算图中(现在不再需要),但我很困惑它的效用是什么在 torch.autograd.Variable(my_tensor, requires_grad=False)
中包装张量将是。
有人可以解释一下这是否是一个成语以及类似的现代 Torch 代码是什么?我的猜测是在张量上调用 detach
以停止跟踪其梯度。
作为参考,代码库中的相关行是 line 45 from the data_utils.py script of NVIDIA's Tacotron 2 implementation。谢谢。
在 PyTorch 0.3.1 及更早版本中,任何涉及需要由 autograd 跟踪的计算的张量都必须包装在 Variable
中。语义上 Variable.requires_grad
在 PyTorch 0.3.1 及更早版本中等同于 Tensor.requires_grad
现在。基本上,requires_grad=False
只是告诉 autograd 你永远不需要梯度 w.r.t。 variable/tensor。只有在至少一个输入 variable/tensor 具有 requires_grad=True
.
请注意,任何使用比 0.3.1 更新的 PyTorch 的代码实际上并不需要使用 Variable
,这包括您提供的存储库中的代码(明确要求 PyTorch >= 1.0)。在 0.4 中,Variable
的功能被合并到 Tensor
class 中。在现代 PyTorch 中,您只需设置张量的 requires_grad
属性即可实现相同的行为。默认情况下,已经使用 requires_grad=False
构建了一个新的 user-defined 张量,因此您发布的代码的现代等价物通常只是删除 Variable
行。如果你不确定张量是否已经有 requires_grad == False
那么你可以明确地设置它。
audio_norm = audio_norm.unsqueeze(0)
audio_norm.requires_grad_(False)
您可以阅读遗留文档 here 了解更多信息。
您正在寻找
audio_norm = audio_norm.unsqueeze(0)
audio_norm = torch.tensor(audio_norm)
如果你需要它来要求毕业那么
audio_norm = torch.tensor(audio_norm, require_grad=True)