在pytorch的tensor类中,有个is_leaf的属性,姑且把它作为叶子节点. is_leafFalse的时候,则不是叶子节点, is_leafTrue的时候为叶子节点(或者叶张量)

所以问题来了: leaf的作用是什么?为什么要加 leaf?
我们都知道tensor中的 requires_grad()属性,当requires_grad()为True时我们将会记录tensor的运算过程并为自动求导做准备,但是并不是每个requires_grad()设为True的值都会在backward的时候得到相应的grad,它还必须为leaf。这就说明: leaf成为了在 requires_grad()下判断是否需要保留 grad的前提条件

is_leaf()

  1. 按照惯例,所有requires_grad为False的张量(Tensor) 都为叶张量( leaf Tensor)
  2. requires_grad为True的张量(Tensor),如果他们是由用户创建的,则它们是叶张量(leaf Tensor).这意味着它们不是运算的结果,因此gra_fn为None
  3. 只有是叶张量的tensor在反向传播时才会将本身的grad传入的backward的运算中. 如果想得到当前tensor在反向传播时的grad, 可以用retain_grad()这个属性

例子:

>>> a = torch.rand(10, requires_grad=True)
>>> a.is_leaf
True
>>> b = torch.rand(10, requires_grad=True).cuda()
>>> b.is_leaf
False
# b was created by the operation that cast a cpu Tensor into a cuda Tensor
>>> c = torch.rand(10, requires_grad=True) + 2
>>> c.is_leaf
False
# c was created by the addition operation
>>> d = torch.rand(10).cuda()
>>> d.is_leaf
True
# d does not require gradients and so has no operation creating it (that is tracked by the autograd engine)
>>> e = torch.rand(10).cuda().requires_grad_()
>>> e.is_leaf
True
# e requires gradients and has no operations creating it
>>> f = torch.rand(10, requires_grad=True, device="cuda")
>>> f.is_leaf
True
# f requires grad, has no operation creating it

leaf 叶子(张量)相关推荐

  1. Pytorch 叶子张量 leaf tensor (叶子节点) (detach)

    在Pytorch中,默认情况下,非叶节点的梯度值在反向传播过程中使用完后就会被清除,不会被保留.只有叶节点的梯度值能够被保留下来. 对于任意一个张量来说,我们可以用 tensor.is_leaf 来判 ...

  2. PyTorch 的 Autograd、计算图、叶子张量、inplace 操作、动态图,静态图(来自知乎)

    本博文来自:https://zhuanlan.zhihu.com/p/69294347 非常感谢此博主! PyTorch 作为一个深度学习平台,在深度学习任务中比 NumPy 这个科学计算库强在哪里呢 ...

  3. android 画布旋转,Android自定义View叶子旋转完整版(六)

    上一篇实现多叶子飘动旋转,今天完成最后的功能. 1.添加右侧旋转枫叶 2.添加滑动条效果,显示百分比 3.修复叶子飘出边框问题 1.添加右侧旋转叶子 Bitmap turnBitmap = ((Bit ...

  4. PyTorch 的 Autograd详解

    ↑ 点击蓝字 关注视学算法 作者丨xiaopl@知乎 来源丨https://zhuanlan.zhihu.com/p/69294347 编辑丨极市平台 PyTorch 作为一个深度学习平台,在深度学习 ...

  5. pytorch - autograd与逻辑回归

    1.torch.autograd--自动求导系统 深度学习模型的训练就是不断更新权值,权值的更新需要求解梯度,梯度在模型训练中是至关重要的.然而求解梯度十分繁琐,pytorch提供自动求导系统.我们不 ...

  6. 【pytorch】|tensor grad

    计算图与动态图机制 计算图是用来描述运算的有向无环图.计算图有两个主要元素:结点(Node)和边(Edge).结点表示数据,如向量,矩阵,张量:边表示运算,如加减乘除卷积等. 下面用计算图表示:y = ...

  7. 深度学习利器之自动微分(2)

    深度学习利器之自动微分(2) 文章目录 深度学习利器之自动微分(2) 0x00 摘要 0x01 前情回顾 0x02 自动微分 2.1 分解计算 2.2 计算模式 2.3 样例 2.4 前向模式(For ...

  8. autograd-自动求导系统

    torch.autograd 权值的更新需要求解梯度,pytorch提供了自动求导系统,我们只需要搭建前向传播计算图,由autograd的方法就可以得到所有张量的梯度. 其中最常用的方法是backwa ...

  9. Pytorch中的梯度知识总结

    文章目录 1.叶节点.中间节点.梯度计算 2.叶子张量 leaf tensor (叶子节点) (detach) 2.1 为什么需要叶子节点? 2.2 detach()将节点剥离成叶子节点 2.3 什么 ...

最新文章

  1. oracle 三表关联更新_Oracle数据库入门
  2. python脚本自动发邮件功能
  3. elementui树形复选框_Element-ui表格树形控件结合复选框实践
  4. oracle show选项,Oracleshowparameter命令的小技巧有哪些呢?
  5. Android支付宝SDK开发笔记
  6. c语言结构体出现乱码,结构体数组输出时出现了乱码情况 求大神帮帮看程序
  7. 高德sdk_联手HERE,高德进军地图海外市场 | CES 2020
  8. 大学生职业生涯规划计划与路径_我校举办2020年大学生职业生涯规划大赛
  9. 团队作业——Alpha冲刺之事后诸葛亮
  10. centos6.5 nginx php mysql_centos6.5 nginx+php+mysql之nginx安装
  11. CSS动画实现滚动播放
  12. SD和SDHC和SDXC卡的区别是什么
  13. 芯片测试的目的及原理介绍
  14. 算法设计与分析——背包问题(Java)
  15. 结构力学支座位移与温度荷载、力法与矩阵位移法、图乘法核心思想
  16. [转] prove, verify, bear out, demonstrate, confirm, validate, testify, certify 的区别
  17. 怎么在计算机网络上添加文件,教你win7如何设置网络共享文件夹
  18. filecoin lotus 转账fil流程和gas计算
  19. MySQL中的uuid()和uuid_short()函数
  20. Android 获取ROOT权限原理介绍和签名验证原理及反编译学习

热门文章

  1. LeetCode 696. 计数二进制子串
  2. LeetCode 179. 最大数(自定义谓词函数--Lambda表达式--排序)
  3. 计算机系统操作在线作业,电子科大《计算机操作系统》在线作业3
  4. linux取消中文网,SELinux如何关闭
  5. 【Python基础知识-pycharm版】第三节-列表
  6. python中的多线程-threading
  7. python中的_init_的使用
  8. 什么是小样本学习?这篇综述文章用166篇参考文献告诉你答案
  9. 论文浅尝 | DSKReG:基于关系GNN的推荐知识图谱可微抽样
  10. lambda函数+map函数的结合使用 list(map(lambda x: list(x)[0], X))