catalpa-bungei 发表于 2023-3-26 10:38:15

在with torch.no_grad() 之后怎样把requires_grad设置为True呢

a = torch.arange(4., requires_grad= True)
b = torch.ones(4, requires_grad = True)
with torch.no_grad():
    c = a+b

之后假如要对c求梯度,我怎么设置requires_grad = True呢?

isdkz 发表于 2023-3-26 10:40:47

在 with torch.no_grad() 的上下文环境中创建的张量,其 requires_grad 属性会被自动设置为 False,

这意味着在这个上下文环境内的张量不会被纳入计算图中,也不会对后续的梯度计算产生影响。

如果想要将其设置为 True,需要在 with torch.no_grad() 块之外再次显式地设置 requires_grad=True,

例如:

a = torch.arange(4., requires_grad=True)
b = torch.ones(4, requires_grad=True)
with torch.no_grad():
    c = a + b

# 将 c 的 requires_grad 设置为 True
c.requires_grad_(True)

# 对 c 进行计算,产生梯度
loss = c.sum()
loss.backward()

# 查看梯度
print(a.grad)
print(b.grad)
print(c.grad)


上述代码中,通过调用 c.requires_grad_(True) 将 c 的 requires_grad 属性设置为 True,然后再对 c 进行操作并计算梯度。
页: [1]
查看完整版本: 在with torch.no_grad() 之后怎样把requires_grad设置为True呢