鱼C论坛

 找回密码
 立即注册
查看: 2901|回复: 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,

例如:

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

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

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

  10. # 查看梯度
  11. print(a.grad)
  12. print(b.grad)
  13. print(c.grad)
复制代码


上述代码中,通过调用 c.requires_grad_(True) 将 c 的 requires_grad 属性设置为 True,然后再对 c 进行操作并计算梯度。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-3-26 10:40:47 | 显示全部楼层    本楼为最佳答案   
在 with torch.no_grad() 的上下文环境中创建的张量,其 requires_grad 属性会被自动设置为 False,

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

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

例如:

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

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

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

  10. # 查看梯度
  11. print(a.grad)
  12. print(b.grad)
  13. print(c.grad)
复制代码


上述代码中,通过调用 c.requires_grad_(True) 将 c 的 requires_grad 属性设置为 True,然后再对 c 进行操作并计算梯度。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 02:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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