如何解决没有 torch.no_grad() 的就地参数更新
我刚刚开始学习这个名为 PyTorch 的很棒的工具,但遗憾的是我陷入了模棱两可的境地。
以下是其中一个教程的代码片段
with torch.no_grad():
weights -= weights.grad * lr
bias -= bias.grad * lr
weights.grad.zero_()
bias.grad.zero_()
我有点困惑,即使我会在不使用 torch.no_grad()(即仅就地)的情况下进行参数更新,如下所示:-
# with torch.no_grad()
weights -= weights.grad * lr
bias -= bias.grad * lr
weights.grad.zero_()
bias.grad.zero_()
并且由于在此代码段上方的代码中已经进行了向后调用(未包含在代码段中),这基本上意味着所有“grad”属性都已经计算完毕,不再需要“原始”值。那么,为什么没有 torch.no_grad() 进行这些操作是非法的?
我知道它会标记 PyTorch 中的错误,但我只是想知道我的思路哪里出了问题?
解决方法
问题已由 PyTorch 讨论论坛上的一位 PyTorch 版主解决。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。