深度学习pytorch学习记录

一、AutoGrad(自动微分)

对于y=2xTx关于列向量x求导。

import torch

x.torch.arange(4.0)
x.requires_grad(True)
# 等价于x=torch.arange(4.0,requires_grad=True)
x.grad  #默认为None

一:x.requires_grad(True)

当我们创建一个张量(tensor)的时候,如果没有特殊指定,那么这个张量一般是不会做求导的,当我们需要对这个张量进行求导的时候,就会用参数requires_grad=True去做一个标记。让计算机知道这个张量需要进行求导。

而我们知道,在张量的计算过程中,如果所有的输入中有一个输入需要求导,那么这个输出就需要求导(链式求导法则的传递性,方便反向链式用于梯度下降以及正向求导过程)。

那么什么时候不需要求导呢?有且仅有当所有的输入都不需要求导的时候,那么这个输出结果就不需要求导了。(最简单的例子就是y=wTx+b,当x需要求导的时候,那么显然由链式求导法则有y也需要求导。)

那么这里又涉及到了一个叶子节点的问题,我们知道当张量需要求导的时候,pytorch会构建一个计算图(有向无环图DAG,包含两种节点,张量节点和操作节点)。那么叶子节点就是计算图中的起始节点。

叶子节点是那些由用户自己创建的张量,而不是通过计算得到的,他的参数requires_grad会默认为False。

1.所有requires_grad属性为false的节点都会被认为是叶子节点。

2.如果一个tensor的requires_grad=True。但是这个tensor是用户自己创建的那么它仍然是叶子结点。

>>> a = torch.rand(10, requires_grad=True)
>>> a.is_leaf
True
#虽然a的requires_grad属性为True,但是该tensor是用户调用rand自行创建的
>>> b = torch.rand(10, requires_grad=False)
>>> b.is_leaf
True
# requires_grad属性为False,故为叶子结点
>>> c = torch.rand(10, requires_grad=True) + 2
>>> c.is_leaf
False
# c是计算结果,计算结果不是叶子节点
>>> b=torch.rand(10,requires_grad=False) + 2
>>> b.is_leaf
True
# 虽然b是计算结果,但是他的requries_grad属性为False,故它还是叶子节点

在进行反向传播求导的时候,pytorch会从叶子节点开始进行计算梯度,根据各节点之间的依赖关系去跟随链式计算其他各节点的梯度。

二、is_leaf

当一个张量tensor的is_leaf属性为False的时候,说明这个张量是一个叶子节点。

叶子节点的作用:

当requires_grad=True的时候,pytorch会自动计算运算过程,缓存中间的运算参数,为Autograd做准备。

但当一个tensor的is_leaf和requires_grad都为True的时候,才能获得这个张量节点的导数值。

所有requires_grad为False的张量都是叶子节点。

三、Autograd的机制

x.data: 存了tensor的data,即保存着张量的数值;
x.grad: 当计算梯度的时候,会在此保存该张量对应情况下的梯度值;
x.grad_fn:指向用于backward的函数的节点(None表示不存在导数,否则会指明导数);
x.is_leaf 判断是否是叶节点;
x.requires_grad:如果是设为True,那么在做backward时候将作为反馈的一部分参与backwards运算,如果为False则不参加backwards运算;

简介:

1.tensor

torch.tensor 是这个包的核心类,若设置他的属性requires_grad为True,那么它将追踪对于该张量的所有操作,当完成计算之后可以通过调用.backword(),来自动计算所有梯度,而这个张量的所有梯度将会自动累加到.grad属性中保存。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值