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. spring对bean的管理细节

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  2. 《模式分类(原书第二版)》pdf格式下载电子书免费下载

    <模式分类(原书第二版)>pdf格式下载电子书免费下载: https://u253469.ctfile.com/fs/253469-302448505 内容简介 <模式分类>( ...

  3. asp.net webapi 获取报文体的问题

    用这种方法: var data=await Request.Content.ReadAsStringAsync(); 一般都无法获取到内容.原因是内部的流对象已经到了最后面.要获取到里面的需要把流的位 ...

  4. ueditor复制文本有多余的空行问题

    今天从ueditor中复制文本,粘贴到记事本中发现每一行后面都多了一个空行. Ueditor中的文本如图: 本来只有三行,全选复制所有内容,再粘贴到记事本中发现有每一行文本后面都有多余的空行: 如果我 ...

  5. KVO实现原理

    KVO意为键值观察Key-Value-Observer,本质仍然是观察者模式. 观察者模式的定义:一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象.这个主动通知通常是 ...

  6. js 个人笔记

    /* * Created by lsw 2018-06 */ ; (function (window) { //js ready var ie = !!(window.attachEvent & ...

  7. gatewayworker开发单聊应用解决的问题

    绑定唯一id时,遇到的信息发送同步问题 问题:A-B A-C A发送信息给B和C时  A绑定了唯一id  若B.C发送信息给A则A处会同时手到来自于BC的信息 用解绑和生成新的client_id无法避 ...

  8. C - Heavy Transportation && B - Frogger(迪杰斯变形)

    Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand bus ...

  9. Git客户端(TortoiseGit)基本使用详解

    1. 环境安装 Git最新版下载地址:https://gitforwindows.org/ TortoiseGit,Git客户端,32/64位最新版及对应的语言包下载地址:https://tortoi ...

  10. Typescript---01 数据类型

    Typescript数据类型 1. 布尔值boolean let isDone: boolean = false; 注意: 使用构造函数Boolean创造的对象不是布尔值,它是一个对象.所以下边的示例 ...