如何使用torch计算梯度,理解Autograd的作用及原理

1. 介绍Tensor

在PyTorch中主要是通过torch.Tensor存储和计算数据,Tensor可以表示数值,向量或矩阵。假设x=torch.tensor(3.0),当xrequires_grads参数为True时,它跟踪x参与的运算。并且在计算得到的结果上(结果也是Tensor一个对象)上调用backward()就会自动计算x的梯度,并将梯度累加到x.grad属性上。下面代码演示在 y = x 2 y=x^2 y=x2,求 x = 3 x=3 x=3时的梯度。

import torch
x = torch.tensor(3., requires_grad=True)
y = x**2
y.backward()
print(x.grad)
tensor(6.)

2. detach()的作用

为了防止x的的计算被跟踪,可以使用detach()方法获取x的值(x.detach()x共享内存)。例如在 y = x 2 + x 3 y=x^2+x^3 y=x2+x3式子求梯度时,我想忽略 y = x 2 y=x^2 y=x2这一项就需要用到x.detach()了。

import torch
x = torch.tensor(3., requires_grad=True)
y = x.detach()**2 + x**3
y.backward()
print(x.grad)
tensor(27.)

3. torch.no_grad()的作用

torch.no_grad()的作用和detach()类似,也是为了防止追踪历史,只是使用方法不同。例如下面式子中不会跟踪 y = x 2 y=x^2 y=x2这个运算,所以我们需要把 x 2 x^2 x2看成一个常数,那么计算梯度时就要把 y = x + x 2 y=x+x^2 y=x+x2看成 y = x + 6 y=x+6 y=x+6,那么x=3时的梯度就是1。

import torch
x = torch.tensor(3., requires_grad=True)
with torch.no_grad():
    y = x*2
y = x + y
y.backward()
print(x.grad)
tensor(1.)

4. 参考文献:

https://www.cnblogs.com/Thinker-pcw/p/9630367.html

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rpsate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值