总结:

按照惯例,所有属性requires_grad=False的张量是叶子节点(即:叶子张量、
叶子节点张量).
对于属性requires_grad=True的张量可能是叶子节点张量也可能不是叶
子节点张量而是中间节点(中间节点张量).  如果该张量的属性requires_grad=True,
而且是用于直接创建的,也即它的属性grad_fn=None,那么它就是叶子节点.
如果该张量的属性requires_grad=True,但是它不是用户直接创建的,而是由其他张量
经过某些运算操作产生的,那么它就不是叶子张量,而是中间节点张量,并且它的属性
grad_fn不是None,比如:grad_fn=<MeanBackward0>,这表示该张量是通过torch.mean()
运算操作产生的,是中间结果,所以是中间节点张量,所以不是叶子节点张量.
判断一个张量是不是叶子节点,可以通过它的属性is_leaf来查看.一个张量的属性requires_grad用来指示在反向传播时,是否需要为这个张量计算梯度.
如果这个张量的属性requires_grad=False,那么就不需要为这个张量计算梯度,也就
不需要为这个张量进行优化学习.在PyTorch的运算操作中,如果参加这个运算操作的所有输入张量的属性requires_grad都
是False的话,那么这个运算操作产生的结果,即输出张量的属性requires_grad也是False,
否则是True. 即输入的张量只要有一个需要求梯度(属性requires_grad=True),那么得到的
结果张量也是需要求梯度的(属性requires_grad=True).只有当所有的输入张量都不需要求
梯度时,得到的结果张量才会不需要求梯度.对于属性requires_grad=True的张量,在反向传播时,会为该张量计算梯度. 但是pytorch的
自动梯度机制不会为中间结果保存梯度,即只会为叶子节点计算的梯度保存起来,保存到该
叶子节点张量的属性grad中,不会在中间节点张量的属性grad中保存这个张量的梯度,这是
出于对效率的考虑,中间节点张量的属性grad是None.如果用户需要为中间节点保存梯度的
话,可以让这个中间节点调用方法retain_grad(),这样梯度就会保存在这个中间节点的grad属性中.

PyTorch中的叶节点、中间节点、梯度计算等知识点总结相关推荐

  1. 详解Pytorch中的requires_grad、叶子节点与非叶子节点、with torch.no_grad()、model.eval()、model.train()、BatchNorm层

    requires_grad requires_grad意为是否需要计算梯度 使用backward()函数反向传播计算梯度时,并不是计算所有tensor的梯度,只有满足下面条件的tensor的梯度才会被 ...

  2. 矩阵乘法,矩阵中各元素对应相乘及其梯度计算;

    矩阵乘法:x=([x1,x2]) w=([w1,w2],[w3,w4]) torch.matmul(x,w)=([x1w1+x2w3,x1w2+x2+w4]) x.grad=(w1+w2,w3+w4) ...

  3. pytorch局部范围内禁用梯度计算,no_grad、enable_grad、set_grad_enabled使用举例

    参考链接: Locally disabling gradient computation-1 参考链接: Locally disabling gradient computation-2 参考链接: ...

  4. backward()和zero_grad()在PyTorch中代表什么意思

    文章目录 问:`backward()`和`zero_grad()`是什么意思? backward() zero_grad() 问:求导和梯度什么关系 问:backward不是求导吗,和梯度有什么关系( ...

  5. pytorch中的NLLLoss和CrossEntropy

    直接计算CrossEntropy import torch import torch.nn.functional as F 先按照流程手动计算CrossEntropy class_dim = 3 z ...

  6. NNDL 实验五 前馈神经网络(2)自动梯度计算 优化问题

    目录 4.3 自动梯度计算 1. 使用pytorch的预定义算子来重新实现二分类任务.(必做) 4.3.1 利用预定义算子重新实现前馈神经网络 4.3.2 完善Runner类 4.3.3 模型训练 4 ...

  7. 实验五 前馈神经网络(2)自动梯度计算 优化问题

    一.自动梯度计算和预定义算子 虽然我们能够通过模块化的方式比较好地对神经网络进行组装,但是每个模块的梯度计算过程仍然十分繁琐且容易出错.在深度学习框架中,已经封装了自动梯度计算的功能,我们只需要聚焦模 ...

  8. 神经网络与深度学习(五)前馈神经网络(2)自动梯度计算和优化问题

    注:本次使用的数据集依旧是前两章的Moon1000数据集  from nndl.dataset import make_moons [详细代码见 神经网络与深度学习(五)前馈神经网络(1)--二分类任 ...

  9. NNDL实验五 前馈神经网络(2)自动梯度计算 优化问题

    4.3 自动梯度计算 虽然我们能够通过模块化的方式比较好地对神经网络进行组装,但是每个模块的梯度计算过程仍然十分繁琐且容易出错.在深度学习框架中,已经封装了自动梯度计算的功能,我们只需要聚焦模型架构, ...

最新文章

  1. 在终端显示文本的中间部分
  2. 数据结构与算法-数组
  3. web安全----XSS漏洞之基本原理
  4. oracle数据库领域,菜鸟成长课程之《Oracle数据库职业直通车》,引领大家真正进入Oracle数据库领域...
  5. NVIDIA TESLA M40
  6. js能调用c语言吗,如何从Javascript调用Object-C?
  7. 写个类操作窗口(句柄操作)
  8. 各式各样的极品程序员 你属于哪一种
  9. Ubuntu Java环境配置
  10. 压缩感知中常用的待还原信号种类
  11. 使用LitePal查询数据
  12. HTTP协议简单概述
  13. A/B/C类ip地址 掩码 广播地址 路由汇集 保留地址
  14. 嗨格式视频转换器全新上线,一个音视频转换神器
  15. 在R和Python中求峰度和偏度
  16. 写作专用各种表情和符号,使你的文章更加美观有趣!❤️❤️❤️
  17. Apache doris Datax DorisWriter扩展使用方法
  18. Excelize 发布 2.6.0 版本,功能强大的 Excel 文档基础库
  19. 中国各个朝代的历史地图
  20. 资源管理器计算机目录,资源管理器可以以什么方式显示计算机内所有文件的详细图表...

热门文章

  1. select2的使用
  2. Python社区交流
  3. 聊天室类PHP源码[无名轻聊]
  4. 流量分析——安恒科技(八月CTF)
  5. matlab_格兰杰因果关系检验
  6. JQuery 多选下拉列表左右移动
  7. Win7的资源管理器打不开
  8. Matlab中sym无法使用
  9. 学习笔记(01):大数据云端实验室项目实战-微博舆情大数据分析-大数据云端实验室项目实战-微博舆情大数据分析-1...
  10. Python.习题五 列表与元组(下)