主要用pytorch,对其他的框架用的很少,而且也没经过系统的学习,对动态图和梯度求导没有个准确的认识。今天根据代码仔细的看一下。
import torch
from torch.autograd import Variabletorch.manual_seed(1)
x = torch.Tensor([2])
y = torch.Tensor([10])
loss = torch.nn.MSELoss()
w = Variable(torch.randn(1),requires_grad=True)
print(w)
for i in range(20):y_ = w * xif y - y_ <= 1e-5:breakelse:l = loss(y,y_)l.backward()print('w的梯度为{},数值为{},导数为{}.'.format(w.grad.data, w, -2*x*(y-y_)))print('是否叶子节点:', y_.is_leaf, y.is_leaf, w.is_leaf, x.is_leaf)print('梯度:', y.grad, w.grad, x.grad)print('梯度:', y_.grad)w = Variable(w - 0.1 * w.grad.data, requires_grad=True)
print('轮数{}'.format(i))
结果显示为:
tensor([0.6614], requires_grad=True)
w的梯度为tensor([-34.7092]),数值为tensor([0.6614], requires_grad=True),导数为tensor([-34.7092], grad_fn=<MulBackward0>).
是否叶子节点: False True True True
梯度: None tensor([-34.7092]) None
可以看到w的值为0.6614,梯度计算公式为:


可以看到叶子节点有w,x=2,y=10三个,其中变量只有w,也只有w是叶子节点中有梯度的。y_也是变量,也应当有梯度,但实际上没有对其梯度进行保留。

UserWarning: The .grad attribute of a Tensor that is not a leaf Tensor is being accessed.
如果想保留梯度的话,需要use .retain_grad()。
梯度: tensor([-17.3546])
这里得到的梯度是:

tensor([0.6614], requires_grad=True)
w的梯度为tensor([-34.7092]),数值为tensor([0.6614], requires_grad=True),导数为tensor([-34.7092], grad_fn=<MulBackward0>).
w的梯度为tensor([-6.9418]),数值为tensor([4.1323], requires_grad=True),导数为tensor([-6.9418], grad_fn=<MulBackward0>).
w的梯度为tensor([-1.3884]),数值为tensor([4.8265], requires_grad=True),导数为tensor([-1.3884], grad_fn=<MulBackward0>).
w的梯度为tensor([-0.2777]),数值为tensor([4.9653], requires_grad=True),导数为tensor([-0.2777], grad_fn=<MulBackward0>).
w的梯度为tensor([-0.0555]),数值为tensor([4.9931], requires_grad=True),导数为tensor([-0.0555], grad_fn=<MulBackward0>).
w的梯度为tensor([-0.0111]),数值为tensor([4.9986], requires_grad=True),导数为tensor([-0.0111], grad_fn=<MulBackward0>).
w的梯度为tensor([-0.0022]),数值为tensor([4.9997], requires_grad=True),导数为tensor([-0.0022], grad_fn=<MulBackward0>).
w的梯度为tensor([-0.0004]),数值为tensor([4.9999], requires_grad=True),导数为tensor([-0.0004], grad_fn=<MulBackward0>).
w的梯度为tensor([-8.7738e-05]),数值为tensor([5.0000], requires_grad=True),导数为tensor([-8.7738e-05], grad_fn=<MulBackward0>).
轮数9
[tensor([1.])]

PyTorch中的梯度计算1相关推荐

  1. 更新fielddata为true_在pytorch中停止梯度流的若干办法,避免不必要模块的参数更新...

    在pytorch中停止梯度流的若干办法,避免不必要模块的参数更新 2020/4/11 FesianXu 前言 在现在的深度模型软件框架中,如TensorFlow和PyTorch等等,都是实现了自动求导 ...

  2. PyTorch中的梯度累积

    我们在训练神经网络的时候,超参数batch_size的大小会对模型最终效果产生很大的影响,通常的经验是,batch_size越小效果越差:batch_size越大模型越稳定.理想很丰满,现实很骨感,很 ...

  3. Pytorch中的向前计算(autograd)、梯度计算以及实现线性回归操作

    在整个Pytorch框架中, 所有的神经网络本质上都是一个autograd package(自动求导工具包) autograd package提供了一个对Tensors上所有的操作进行自动微分的功能. ...

  4. Pytorch中的梯度知识总结

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

  5. Pytorch中的梯度回传

    来源:知乎-歪杠小胀 作者:https://zhuanlan.zhihu.com/p/451441329 01 记录写这篇文章的初衷 最近在复现一篇论文的训练代码时,发现原论文中的总loss由多个lo ...

  6. pytorch得到梯度计算结果

    借助pytorch可以很方便的计算梯度,但需要明确的是: 只有float类型的Tensor才可以 只有最后是一个标量才可以求导,就是最后的值只有大小,不能自带方向 文章目录 逐步计算梯度 完整代码 参 ...

  7. 【深度学习】PyTorch 中的线性回归和梯度下降

    作者 | JNK789   编译 | Flin  来源 | analyticsvidhya 我们正在使用 Jupyter notebook 来运行我们的代码.我们建议在Google Colaborat ...

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

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

  9. PyTorch中的叶节点、中间节点、梯度计算等知识点总结

    总结: 按照惯例,所有属性requires_grad=False的张量是叶子节点(即:叶子张量. 叶子节点张量). 对于属性requires_grad=True的张量可能是叶子节点张量也可能不是叶 子 ...

最新文章

  1. 优化系统后VS启动不了问题的一种解决方案
  2. 三层交换机vlan间访问(第一种方式)
  3. 癌症中克隆种群结构统计推断分析软件PyClone安装小记
  4. firefox推荐插件
  5. spring五:获取容器中对象信息
  6. intel的linux证书过期,数据库镜像中证书过期的解决方案
  7. Android四大组件ContentProvider
  8. 昨天,我的大学学习[2]
  9. HTML DOM文档对象查找元素的方法
  10. 设计师必备各类型3D字体图层样式PSD素材
  11. Windows 7安装 Visual Studio 2010之大战三大回合
  12. type=button 字体大一点_机械制图中文字用什么字体?你所在的企业图纸中文字又是什么字体...
  13. 如何设计 RQData 通讯协议 - Ricequant米筐量化
  14. 【Python-GUI开发】四 pyqt5 UI扁平化设计
  15. r语言员工离职_基于随机森林的优秀员工离职因素实证分析及预测
  16. Python批量合并处理B站视频
  17. JavaScript(JS) date.getDay()
  18. 游戏中符文系统与天赋系统等的作用
  19. 对于模糊人脸图片和原图的清晰度评估——sobel算子
  20. 山东双软认证需要什么条件

热门文章

  1. java arraylist comparator,关于java:如何使用Comparator对ArrayList进行排序?
  2. 腾讯企业邮箱发错了邮件怎么办,“邮件撤回”帮您解决问题
  3. android 佳博蓝牙打印机功能开发
  4. 口水战,实在是费心费力,浪费时间,以后坚持8020法则,决不手软!
  5. 十二.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法<上>
  6. 20 个超棒的免费的响应式 Joomla 模板
  7. 设计没素材没灵感,这些网站可以帮你快速找到你需要的照片
  8. linux 手机 飞鸽,在Linux下使用ipmsg(飞鸽传书)
  9. itchat研究笔记
  10. 11.14计算机导论课后总结