Rex*_*Low 2 python neural-network pytorch
我今天在使用 PyTorch 时遇到了一个奇怪的问题。
在检查with范围内的网络参数时,我期望requires_grad是False,但显然情况并非如此,除非我自己明确设置所有参数。
代码
链接到网络 ->要点
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_gradTrue
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
如果你删除with 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张量没有与之关联的梯度函数,而在第二种情况下则有。
| 归档时间: | 
 | 
| 查看次数: | 2385 次 | 
| 最近记录: |