PyTorch 学习(2) AUTOGRAD

PyTorch 学习(2) AUTOGRAD

来自 PyTorch 教程 Deep Learning with PyTorch: A 60 Minute Blitz > Autograd: Automatic Differentiation

autograd 是使用 PyTorch 构建神经网络的中心机制,这里我们简要介绍一下

autograd 会记录所有对于张量的操作,这一机制会在每一次代码运行时动态构建,这就允许我们在迭代时更改网络

张量 Tensor

构建张量时如果指定参数 requires_grad 为 True, 那么就将追踪这个张量的每一次操作。当运算完成时,调用方法 backward 便可以自动计算梯度, 每个张量的梯度将被记录在 grad 属性中

调用方法 detach 可以停止对张量的运算追踪

我们还可以通过调用 with torch.no_grad():来停止对张量的运算追踪,这一般在评估模型时使用,因为在评估模型时我们并不需要计算梯度

还有另外一种类对于 autograd 是非常重要的: Function

各种TensorFunction相互拼接构成一张用来记录运算过程的非循环图,每一个张量的 grad_fn 属性引用了创建该张量的 Function,如果张量由用户创建,则 grad_fn 为 None

通过在一个张量上调用方法 backward 来计算梯度,如果张量是一个标量,则可以直接调用 backward,相当于调用了 backward(torch.tensor(1.)),否则需要提供一个形状匹配的张量。

x = torch.ones(2, 2, requires_grad=True)
y = x + 2
print(y.grad_fn)
z = 3 * y * y
out = z.mean()
out.backward()
print(x.grad)

这里 x 的梯度相当于 out 对 x 求偏导

x = torch.randn(3, requires_grad=True)
y = x * 2
while y.data.norm() < 1000:
    y = y * 2
v = torch.FloatTensor([0.1, 1.0, 0.0001])
y.backward(v)
print(x.grad)

这里相当于 y 对 x 求偏导然后乘 v,v 一般表示最终结果对 y 的偏导

方法 detach 将返回一个与原张量相同但是 requires_grad 为 False 的张量,而方法 requires_grad_ 将直接改变张量的 requires_grad

y = x.detach()
y.requires_grad(True)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值