autograd包是PyTorch中神经网络的核心部分,简单学习一下.

autograd提供了所有张量操作的自动求微分功能. 它的灵活性体现在可以通过代码的运行来决定反向传播的过程, 这样就使得每一次的迭代都可以是不一样的.

Variable类

  • autograd.Variable是这个包中的核心类.
  • 它封装了Tensor,并且支持了几乎所有Tensor的操作.
  • 一旦你完成张量计算之后就可以调用.backward()函数,它会帮你把所有的梯度计算好.
  • 通过Variable的.data属性可以获取到张量.
  • 通过Variabe的.grad属性可以获取到梯度.

下图是Variable的结构图:

Function类

  • 对于实现自动求梯度还有一个很重要的类就是autograd.Function.
  • VariableFunction一起构建了非循环图,完成了前向传播的计算.
  • 每个通过Function函数计算得到的变量都有一个.grad_fn属性.
  • 用户自己定义的变量(不是通过函数计算得到的)的.grad_fn值为空.
  • 如果想计算某个变量的梯度,可以调用.backward()函数:
    1.当变量是标量的时候不需要指定任何参数.
    2.当变量不是标量的时候,需要指定一个跟该变量同样大小的张量grad_output用来存放计算好的梯度.

代码示例

  • import packet
import torch
from torch.autograd import Variable
  • Create a variable

x=Variable(torch.ones(2,2),requires_grad=True)
print (x)
  • Do an operation of variable
y=x+2
print(y)
  • grad_fn attribute
    这里的x是属于用户自己定义的,而y属于函数产生的,所以y有grad_fn属性,而x没有.
print (x.grad_fn)
print (y.grad_fn)
  • more operations on y

z = y * y * 3
out = z.mean()
print(z, out)

Gradients

如果你跟着上面的代码做下来的话,上面已经完成了变量x及计算函数的定义.
现在我们就可以用backward()自动求导啦.


out.backward()
print(x.grad)

反向计算得到的梯度如下所示:

  • 这里的out为标量,所以直接调用backward()函数即可.
  • 一定要注意当out为数组时,用先定义一样大小的Tensor例如grad_output执行.backgrad(grad_output)语句.

以上就基本完成了前向传播建立计算图以及反向传播求梯度的过程.

PyTorch入门学习(二):Autogard之自动求梯度相关推荐

  1. pytorch学习笔记(二):自动求梯度

    文章目录 前言 1 概念 2 Tensor 3 梯度 前言 在深度学习中,我们经常需要对函数求梯度(gradient).PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图, ...

  2. 《动手学深度学习 PyTorch版》学习笔记(二):自动求梯度

    一.自动求梯度 1.requires_grad_(), detach(), torch.no_grad()的区别 参考博客:https://www.jianshu.com/p/ff74ccae25f3 ...

  3. pytorch 入门学习使用逻辑斯蒂做二分类-6

    pytorch 入门学习使用逻辑斯蒂做二分类 使用pytorch实现逻辑斯蒂做二分类 import torch import torchvision import numpy as np import ...

  4. 深度学习PyTorch笔记(9):自动求导

    深度学习PyTorch笔记(9):自动求导 4. 自动求导 4.1 理解 4.2 梯度 4.3 .requires_grad与.grad_fn 4.4 调用.backward()反向传播来完成所有梯度 ...

  5. PyTorch框架学习二——基本数据结构(张量)

    PyTorch框架学习二--基本数据结构(张量) 一.什么是张量? 二.Tensor与Variable(PyTorch中) 1.Variable 2.Tensor 三.Tensor的创建 1.直接创建 ...

  6. Pytorch总结一之 数据操作、类型转换、数学计算、自动求梯度

    Pytorch总结一 在PyTorch中, torch.Tensor 是存储和变换数据的主要⼯具.如果你之前⽤过NumPy,你会发现Tensor 和NumPy的多维数组⾮常类似.然⽽, Tensor ...

  7. PyTorch框架学习二十——模型微调(Finetune)

    PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...

  8. hadoop hive hbase 入门学习 (二)

    hadoop 自学系列                hadoop hive hbase 入门学习 (一) hadoop安装.hdfs学习及mapreduce学习 hadoop 软件下载 (hadoo ...

  9. JBox2d入门学习二 -----我的小鸟

    入门学习一当中我学会了如何定义并且创建一个世界,在世界当中定义并且创建一个刚体,并尝试给刚体一个力.最近比较忙..现在抽空实现了一个类似于愤怒小鸟的例子,先看看图吧.   贴代码,注解写的比较详细了, ...

最新文章

  1. hdu4971 流-最大权闭包
  2. 博鳌论坛国际粮食安全-林裕豪:从玉农业对话丰收节贸易会
  3. GenericUDAF使用流程记载(转载+自己整理)
  4. php获取字符串扩展,PHP7扩展开发之字符串处理
  5. Excel催化剂插件安装过程升级,离线版全网公开下载!
  6. 【LeetCode】4月5日打卡-Day21-最大子序和问题
  7. 这可不是一般的便宜哦!
  8. pip 安装速度慢解决办法
  9. Java测试代码及原理
  10. Java中类与对象的关系与区别
  11. OpenCV学习之多通道图像的混合
  12. NOIP总结与反思及对今后的期望
  13. 张孝祥张老师一路走好!
  14. SPI,UART,I2C都有什么区别,及其各自的特点
  15. android 画爱心进度条_android自定义圆形进度条,实现动态画圆效果
  16. Openwrt Lede koolshare固件下屏蔽固定MAC地址以及屏蔽某些网站
  17. #185. [NOIP2016 提高组] 蚯蚓题解
  18. attach和detach区别
  19. 仿淘宝电商网站管理系统前端静态页面(html+jquery+css)(含毕业设计论文及源码)
  20. 用这个方法,苹果官网居然比二手市场还便宜,最近剁手的注意了

热门文章

  1. Linux下docker安装配置oracle,oracle创建用户并远程连接,实测可用!
  2. 伍六七带你学算法 入门篇-矩形重叠
  3. 2022-2028年中国急救中心行业发展战略规划及未来前景展望报告
  4. 2022-2028年中国封装用胶膜行业运营现状及投资发展潜力报告
  5. IDEA : Git Pull Failed 解决(IDEA中使用stash功能)
  6. word2vec 中的数学原理详解(二)预备知识
  7. 计图MPI分布式多卡
  8. 目标检测数据集The Object Detection Dataset
  9. seq2seq与Attention机制
  10. idea 搭建spring boot 项目