gpt4 book ai didi

python - 即使使用 torch.no_grad(),params 的 require_grad 也是 True

转载 作者:行者123 更新时间:2023-11-30 21:59:06 30 4
gpt4 key购买 nike

我今天在使用 PyTorch 时遇到了一个奇怪的问题。

在检查 with 范围中的网络参数时,我期望 requires_gradFalse,但显然情况并非如此,除非我我自己显式设置所有参数。

代码

链接到网络 -> Gist

net = InceptionResnetV2()

with torch.no_grad():

for name, param in net.named_parameters():
print("{} {}".format(name, param.requires_grad))

上面的代码将告诉我所有参数仍然需要 grad,除非我明确指定 param.requires_grad = False

我的torch版本:1.0.1.post2

最佳答案

torch.no_grad() 将禁用涉及 requires_grad 设置为 True 的张量的操作结果的梯度信息。因此请考虑以下事项:

import torch

net = torch.nn.Linear(4, 3)

input_t = torch.randn(4)

with torch.no_grad():

for name, param in net.named_parameters():
print("{} {}".format(name, param.requires_grad))

out = net(input_t)

print('Output: {}'.format(out))

print('Output requires gradient: {}'.format(out.requires_grad))
print('Gradient function: {}'.format(out.grad_fn))

这会打印

weight True
bias True
Output: tensor([-0.3311, 1.8643, 0.2933])
Output requires gradient: False
Gradient function: None

如果你用 torch.no_grad() 删除,你会得到

weight True
bias True
Output: tensor([ 0.5776, -0.5493, -0.9229], grad_fn=<AddBackward0>)
Output requires gradient: True
Gradient function: <AddBackward0 object at 0x7febe41e3240>

请注意,在这两种情况下,模块参数都将 requires_grad 设置为 True,但在第一种情况下,out 张量没有与之相关的梯度函数,而在第二种情况下则如此。

关于python - 即使使用 torch.no_grad(),params 的 require_grad 也是 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54682457/

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