鱼C论坛

 找回密码
 立即注册
查看: 2061|回复: 1

[已解决]在with torch.no_grad() 之后怎样把requires_grad设置为True呢

[复制链接]
发表于 2023-3-26 10:38:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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呢?
最佳答案
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 进行操作并计算梯度。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 进行操作并计算梯度。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 01:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表