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. 命令行神器之argparse使用笔记

    示例 废话不多说直接给例子: import argparse parser = argparse.ArgumentParser(description='Imbalanced Dataset Exam ...

  2. # 20175333曹雅坤《Java程序设计》第四周学习总结

    教材学习内容总结 第五章:子类与继承 5.1子类与父类:关键字extends 5.2子类的继承性:如果子类与父类在一个包中,除了private其他都可以继承:如果不在一个包中,则private和友好都 ...

  3. python自定义封装logging模块

    #coding:utf-8 import logging class TestLog(object): ''' 封装后的logging ''' def __init__(self , logger = ...

  4. 【转】Beginning Game Programming v2.0

    Beginning Game Programming v2.0 Last Updated 8/19/18 Greetings everyone, welcome to the ground up re ...

  5. python学习第32天

    # 使用模块操作进程# multiprocessing 一个多元化的进程模块# multiple 多元化 processing 进程 # 涵盖了和进程相关的几乎所有的内容# Process类 帮助你启 ...

  6. scrapy发送邮件

    scrapy发送邮件 应用场景:在爬虫关闭或者爬虫空闲时可以通过发送邮件的提醒. 通过twisted的非阻塞IO实现,可以直接写在spider中,也可以写在中间件或者扩展中,看你具体的需求. 在网上找 ...

  7. kafka Network

    Kafka network Processor SocketServer.Processor override def run() { startupComplete() try { while (i ...

  8. foot

    码云链接:https://gitee.com/zyyyyyyyyyyy/codes/rcfdzmin4a82v975pl1ko47 效果图: 原网站截图: 源代码: <!DOCTYPE html ...

  9. 写交互式脚本时,遇到到报错:not a regular file

    场景:在写两台ubuntu之间需要交互式登录操作shell脚本.就是在ubantu A上,做点什么事,然后远程到ubuntu B上进行操作,shell脚本存放在ubuntu A上. 我遇到这个报错:n ...

  10. C++中的const总结

    CONST 一.符号常量 声明: const 类型说明符 常量名 = 常量值: const float PI = 3.1415927; //可以交换const与float的位置 符号常量在声明时一定要 ...