• torch.autograd


    torch.autograd

    torch.autograd: 提供了类和函数,用来对任意的标量函数进行求导,要想使用自动 求导,只需要对已有的代码进行微小的改变,只需要将所有的tensor包含进 V a r i a b l e Variable Variable对象中即可。

    • torch.autograd.backward(variables, grad_variables, retain_variables=False)
      给定图的叶子节点 V a r i a b l e Variable Variable,计算图中变量的梯度和。

    注意:我们需要在调用此函数之前将leaf variable的梯度置零叶子节点和Variable是两个概念,叶子节点是说用户创建的变量,可以保存梯度以进行反向传播;Variable只是对tensor的包装,当设置Variable的required_grad=True时,可以计算梯度,但如果不是叶子节点的话,在反向传播之前会释放梯度

    参数说明

    • variables (variable 列表) – 被求微分的叶子节点,即 ys 。
    • grad_variables (Tensor 列表) – 对应variable的梯度。仅当variable不是标量且需要求梯度的时候使用
    • retain_variables (bool) – True,计算梯度时所需要的buffer在计算完梯度后不会被释放。如果想对一个子图多次求微分的话,需要设置为True

    class torch.autograd.Variable

    包装一个 T e n s o r Tensor Tensor,它同时保存着Variable的梯度和创建这个Variable的Function的引用。这个引用可以用来追溯创建这个Variable的整条链。如果Variable是用户创建的,那么它的creator是None,我们称这种对象为 leaf Variables。

    由于 a u t o g r a d autograd autograd只支持标量的值反向求导,梯度的大小总是和数据的大小相匹配,同时,仅仅给leaf variable分配梯度,其他的Variable的梯度总为0.

    变量

    • data 包含的Tensor。
    • grad 保存着Variable的梯度,这个属性是懒分配的,且不能被重新分配。
    • requires_grad 布尔值,指示这个Variable是否是被一个包含Variable的子图创建的,只能改变 l e a f V a r i a b l e leaf Variable leafVariable
    • creator 创建这个 V a r i a b l e Variable Variable的Function。对于leaf variable,这个属性为None。只读属性。这个属性其实是grad_fn,可能是官方文档上没有改正过来。下面提到creator我们都默认是grad_fn。

    属性

    在这里插入图片描述

    Variable

    Tensor张量

    Variable变量

    torch:两个基本对象:tensor:不能反向传播。Variable: 可以反向传播。

    tensor的算术运算,和选取操作和numpy一样,一次你numpy相似的运算操作都可以迁移过来

    variable是一种可以不断变化的变量,符合反向传播,参数更新的属性。pytorch的variable是一个存放会变化值的地理位置,里面的值会不停变化,像装糖果(糖果就是数据,即tensor)的盒子,糖果的数量不断变化。pytorch都是由tensor计算的,而tensor里面的参数是variable形式

    autograd根据用户对Variable的操作来构建其计算图。

    • requires_grad
      variable默认是不需要被求导的,即requires_grad属性默认为False,如果某一个节点的requires_grad为True,那么所有依赖它的节点requires_grad都为True
    • volatile
      variable的volatile属性默认为False,如果某一个variable的volatile属性被设为True,那么所有依赖它的节点volatile属性都为True。volatile属性为True的节点不会求导,volatile的优先级比requires_grad高。
    • retain_graph
      多次反向传播(多层监督)时,梯度是累加的。一般来说,单次反向传播后,计算图会free掉,也就是反向传播的中间缓存会被清空【这就是动态度的特点】。为进行多次反向传播需指定retain_graph=True来保存这些缓存
    • backward(grad_variables=None,retain_graph=None,create_graph=None)
      反向传播,求解Variable的梯度。放在中间缓存中。
    • grad_variable
      grad_variables是 y y y求导时的梯度参数,由于autograd仅用于标量,因此当 y y y不是标量且在声明时使用了requires_grad=True,必须指定grad_variables参数,在完成原始的反向传播之后得到的梯度会对这个grad_variables进行修正,然后将结果保存在Variable的grad中。grad_variables形状必须与Variable一致。在深度学习中求导与梯度有关,因此grad_variables一般会定义类似为[1, 0.1, 0.01, 0.001],表示梯度的方向,取较小的之不会对求导效率有影响。
  • 相关阅读:
    ES状态查询相关API
    Zookeeper学习2:原理、常用脚本、选举机制、监听器
    打印机语言监视器
    java基于springboot+vue的网上购物商城系统
    python爬虫(2)
    【车载测试专项】 整车控制器 逻辑时序测试
    java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
    C#流程控制语句
    离线数仓同步数据2
    用机器学习识别不断变化的股市状况—隐马尔可夫模型(HMM)股票指数预测实战
  • 原文地址:https://blog.csdn.net/kuxingseng123/article/details/128211268