Autograd

1、深度学习的算法本质上是通过反向传播求导数,Pytorch的Autograd模块实现了此功能;在Tensor上的所有操作,Autograd都能为他们自动提供微分,避免手动计算导数的复杂过程。
2、autograd.Variable是Autograd中的核心类,它简单的封装了Tensor,并支持几乎所有Tensor操作;Tensor被封装为Variable之后,可以调用它的.backward()实现反向传播,自动计算所有的梯度。
3、Variable主要包含三个属性:
data:保存Variable所包含的Tensor;
grad:保存data对应的梯度,grad也是个Variable,而不是Tensor,它和data的形状一样;
grad_fn:指向一个Function对象,这个Function用来反向传播计算输入的梯度。

具体代码解析

  1. #_Author_:Monkey
  2. #!/usr/bin/env python
  3. #-*- coding:utf-8 -*-
  4. import torch as t
  5. from  torch.autograd import Variable
  6. x = Variable(t.ones(2,2),requires_grad = True)
  7. print(x)
  8. '''''tensor([[1., 1.],
  9. [1., 1.]], requires_grad=True)'''
  10. y = x.sum()
  11. print(y)
  12. '''''tensor(4., grad_fn=<SumBackward0>)'''
  13. print(y.grad_fn)    #指向一个Function对象,这个Function用来反向传播计算输入的梯度
  14. '''''<SumBackward0 object at 0x000002D4240AB860>'''
  15. y.backward()
  16. print(x.grad)
  17. '''''tensor([[1., 1.],
  18. [1., 1.]])'''
  19. y.backward()
  20. print(x.grad)
  21. '''''tensor([[2., 2.],
  22. [2., 2.]])'''
  23. y.backward()
  24. print( x.grad )
  25. '''''tensor([[3., 3.],
  26. [3., 3.]])'''
  27. '''''grad在反向传播过程中时累加的(accumulated),这意味着运行
  28. 反向传播,梯度都会累加之前的梯度,所以反向传播之前需要梯度清零'''
  29. print( x.grad.data.zero_() )
  30. '''''tensor([[0., 0.],
  31. [0., 0.]])'''
  32. y.backward()
  33. print( x.grad )
  34. '''''tensor([[1., 1.],
  35. [1., 1.]])'''
  36. m = Variable(t.ones(4,5))
  37. n = t.cos(m)
  38. print(m)
  39. print(n)
  40. '''''tensor([[1., 1., 1., 1., 1.],
  41. [1., 1., 1., 1., 1.],
  42. [1., 1., 1., 1., 1.],
  43. [1., 1., 1., 1., 1.]])
  44. tensor([[0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
  45. [0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
  46. [0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
  47. [0.5403, 0.5403, 0.5403, 0.5403, 0.5403]])'''
  48. m_tensor_cos = t.cos(m.data)
  49. print(m_tensor_cos)
  50. '''''ensor([[0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
  51. [0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
  52. [0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
  53. [0.5403, 0.5403, 0.5403, 0.5403, 0.5403]])'''

Autograd:自动微分的更多相关文章

  1. pytorch学习-AUTOGRAD: AUTOMATIC DIFFERENTIATION自动微分

    参考:https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html#sphx-glr-beginner-blitz-autog ...

  2. 【PyTorch深度学习60分钟快速入门 】Part2:Autograd自动化微分

      在PyTorch中,集中于所有神经网络的是autograd包.首先,我们简要地看一下此工具包,然后我们将训练第一个神经网络. autograd包为张量的所有操作提供了自动微分.它是一个运行式定义的 ...

  3. PyTorch自动微分基本原理

    序言:在训练一个神经网络时,梯度的计算是一个关键的步骤,它为神经网络的优化提供了关键数据.但是在面临复杂神经网络的时候导数的计算就成为一个难题,要求人们解出复杂.高维的方程是不现实的.这就是自动微分出 ...

  4. PyTorch 自动微分示例

    PyTorch 自动微分示例 autograd 包是 PyTorch 中所有神经网络的核心.首先简要地介绍,然后训练第一个神经网络.autograd 软件包为 Tensors 上的所有算子提供自动微分 ...

  5. PyTorch 自动微分

    PyTorch 自动微分 autograd 包是 PyTorch 中所有神经网络的核心.首先简要地介绍,然后将会去训练的第一个神经网络.该 autograd 软件包为 Tensors 上的所有操作提供 ...

  6. LibTorch 自动微分

    得益于反向传播算法,神经网络计算导数时非常方便,下面代码中演示如何使用LibTorch进行自动微分求导. 进行自动微分运算需要调用函数 torch::autograd::grad( outputs, ...

  7. 附录D——自动微分(Autodiff)

    本文介绍了五种微分方式,最后两种才是自动微分. 前两种方法求出了原函数对应的导函数,后三种方法只是求出了某一点的导数. 假设原函数是$f(x,y) = x^2y + y +2$,需要求其偏导数$\fr ...

  8. 自动微分(AD)学习笔记

    1.自动微分(AD) 作者:李济深链接:https://www.zhihu.com/question/48356514/answer/125175491来源:知乎著作权归作者所有.商业转载请联系作者获 ...

  9. <转>如何用C++实现自动微分

    作者:李瞬生转摘链接:https://www.zhihu.com/question/48356514/answer/123290631来源:知乎著作权归作者所有. 实现 AD 有两种方式,函数重载与代 ...

  10. (转)自动微分(Automatic Differentiation)简介——tensorflow核心原理

    现代深度学习系统中(比如MXNet, TensorFlow等)都用到了一种技术——自动微分.在此之前,机器学习社区中很少发挥这个利器,一般都是用Backpropagation进行梯度求解,然后进行SG ...

随机推荐

  1. 【5】学习C++之类的概念

    C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版.结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同:可以通过结构体来定义结构体变量,每个变量拥有相同的性 ...

  2. 题解:[GXOI/GZOI2019]与或和

    开始完全没思路 在洛谷看到样例一,突发奇想,决定先做一下元素只有0/1的情况 发现子任务1是全1子矩阵 子任务2是总子矩阵个数减去全0子矩阵 发现全0/1矩阵可以构造单调栈解决.具体做法:前缀和求出每 ...

  3. [精品书单]word排版设计

  4. 「JavaScript面向对象编程指南」基础

    DOM标准是独立的(即并不依赖JS)操作结构化文档的方式 BOM实际是个与浏览器有关的对象集合,原来没任何标准可言,H5诞生后才被定义了一些浏览器间通用的对象标准 ES5严格模式"use s ...

  5. 终于有人把P2P、P2C、O2O、B2C、B2B、C2C 的区别讲透了!

    原文地址:https://www.cnblogs.com/sap-ronny/p/8149960.html P2P.P2C .O2O .B2C.B2B. C2C,每天看着这些常见又陌生的名词,如果有人 ...

  6. GitLab CI/CD 进行持续集成

    简介 从 GitLab 8.0 开始,GitLab CI 就已经集成在 GitLab 中,我们只要在项目中添加一个 .gitlab-ci.yml 文件,然后添加一个 Runner,即可进行持续集成. ...

  7. oracle wallet使用与维护

    oracle wallet使用与维护2015年05月26日 17:58:55 SilenceRiver 阅读数:1614oracle wallet使用与维护---oracle无密码登录分类: Orac ...

  8. Tensorflow笔记二

    MNIST手写体识别 (Mixed National Institute of Standards and Technology database)的28*28字符识别共0-9类. 在ipython命 ...

  9. ProgressDialog替代

    在API level 26 中,ProgressDialog被声明不赞成使用,应使用的替代方法是ProgressBar 利用下列代码实现ProgressBar的出现和消失 progressBar.se ...

  10. LoadRunner结果分析与生成报告

    启动Analysis会话 1.打开HP LoadRunner2.打开LoadRunner Analysis在LoadRunner Analysis选项卡中单击分析负载测试3.打开Analysis会话文 ...