首页 > 编程知识 正文

pytorch 自动求导,pytorch求导机制

时间:2023-05-03 14:09:52 阅读:240476 作者:3077

       在Pytorch中,通过调用 backward 我们可以进行一次自动求导,如果我们再调用一次 backward,会发现程序报错,没有办法再做一次。这是因为 PyTorch 默认做完一次自动求导之后,计算图就被丢弃了,所以两次自动求导需要手动设置一个东西,我们通过下面的小例子来说明。

import torchfrom torch.autograd import Variablex = Variable(torch.FloatTensor([3]), requires_grad=True)y = x * 2 + x ** 2 + 3print(y)y.backward(retain_graph=True) # 设置 retain_graph 为 True 来保留计算图print(x.grad)y.backward() # 再做一次自动求导,这次不保留计算图print(x.grad)

结果:

tensor([18.], grad_fn=<AddBackward0>)tensor([8.])tensor([16.])

可以发现 x 的梯度变成了 16,因为这里做了两次自动求导,所以讲第一次的梯度 8 和第二次的梯度 8 加起来得到了 16 的结果。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。