博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Autograd:自动微分
阅读量:5161 次
发布时间:2019-06-13

本文共 1829 字,大约阅读时间需要 6 分钟。

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

转载于:https://www.cnblogs.com/monkeyT/p/9751405.html

你可能感兴趣的文章
线程上下文类加载器
查看>>
HttpClient——连接关闭
查看>>
BZOJ2437 NOI2011兔兔与蛋蛋(二分图匹配+博弈)
查看>>
数据库误删了数据再也不用跑路了,
查看>>
一、BOM 二、DOM
查看>>
Docker的部署安装(CentOS)
查看>>
ModelMap和ModelAndView区别
查看>>
虚拟机vmware下安装Ghost XP——正确的解决方案
查看>>
eclipse下:selenium+python自动化之Chrome driver
查看>>
洛谷P3006 [USACO11JAN]瓶颈Bottleneck(堆模拟)
查看>>
mysql 创建存储过程报错
查看>>
C++笔记
查看>>
移动端
查看>>
stat~~~访问文件状态的利器
查看>>
SORT--不要仅限于题目中
查看>>
面试题46:求1+2+...+n
查看>>
Cscope 安装和使用
查看>>
Rails常用插件
查看>>
基于Dockerfile 构建redis5.0.0(包括持久化)及RedisDestopManager 监控
查看>>
Git 一些常用命令
查看>>