PyTorch入门学习(二):Autogard之自动求梯度
autograd包是PyTorch中神经网络的核心部分,简单学习一下.
autograd提供了所有张量操作的自动求微分功能. 它的灵活性体现在可以通过代码的运行来决定反向传播的过程, 这样就使得每一次的迭代都可以是不一样的.
Variable类
autograd.Variable
是这个包中的核心类.- 它封装了Tensor,并且支持了几乎所有Tensor的操作.
- 一旦你完成张量计算之后就可以调用
.backward()
函数,它会帮你把所有的梯度计算好. - 通过Variable的
.data
属性可以获取到张量. - 通过Variabe的
.grad
属性可以获取到梯度.
下图是Variable的结构图:
Function类
- 对于实现自动求梯度还有一个很重要的类就是
autograd.Function
. Variable
跟Function
一起构建了非循环图,完成了前向传播的计算.- 每个通过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之自动求梯度相关推荐
- pytorch学习笔记(二):自动求梯度
文章目录 前言 1 概念 2 Tensor 3 梯度 前言 在深度学习中,我们经常需要对函数求梯度(gradient).PyTorch提供的autograd包能够根据输入和前向传播过程自动构建计算图, ...
- 《动手学深度学习 PyTorch版》学习笔记(二):自动求梯度
一.自动求梯度 1.requires_grad_(), detach(), torch.no_grad()的区别 参考博客:https://www.jianshu.com/p/ff74ccae25f3 ...
- pytorch 入门学习使用逻辑斯蒂做二分类-6
pytorch 入门学习使用逻辑斯蒂做二分类 使用pytorch实现逻辑斯蒂做二分类 import torch import torchvision import numpy as np import ...
- 深度学习PyTorch笔记(9):自动求导
深度学习PyTorch笔记(9):自动求导 4. 自动求导 4.1 理解 4.2 梯度 4.3 .requires_grad与.grad_fn 4.4 调用.backward()反向传播来完成所有梯度 ...
- PyTorch框架学习二——基本数据结构(张量)
PyTorch框架学习二--基本数据结构(张量) 一.什么是张量? 二.Tensor与Variable(PyTorch中) 1.Variable 2.Tensor 三.Tensor的创建 1.直接创建 ...
- Pytorch总结一之 数据操作、类型转换、数学计算、自动求梯度
Pytorch总结一 在PyTorch中, torch.Tensor 是存储和变换数据的主要⼯具.如果你之前⽤过NumPy,你会发现Tensor 和NumPy的多维数组⾮常类似.然⽽, Tensor ...
- PyTorch框架学习二十——模型微调(Finetune)
PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...
- hadoop hive hbase 入门学习 (二)
hadoop 自学系列 hadoop hive hbase 入门学习 (一) hadoop安装.hdfs学习及mapreduce学习 hadoop 软件下载 (hadoo ...
- JBox2d入门学习二 -----我的小鸟
入门学习一当中我学会了如何定义并且创建一个世界,在世界当中定义并且创建一个刚体,并尝试给刚体一个力.最近比较忙..现在抽空实现了一个类似于愤怒小鸟的例子,先看看图吧. 贴代码,注解写的比较详细了, ...
最新文章
- hdu4971 流-最大权闭包
- 博鳌论坛国际粮食安全-林裕豪:从玉农业对话丰收节贸易会
- GenericUDAF使用流程记载(转载+自己整理)
- php获取字符串扩展,PHP7扩展开发之字符串处理
- Excel催化剂插件安装过程升级,离线版全网公开下载!
- 【LeetCode】4月5日打卡-Day21-最大子序和问题
- 这可不是一般的便宜哦!
- pip 安装速度慢解决办法
- Java测试代码及原理
- Java中类与对象的关系与区别
- OpenCV学习之多通道图像的混合
- NOIP总结与反思及对今后的期望
- 张孝祥张老师一路走好!
- SPI,UART,I2C都有什么区别,及其各自的特点
- android 画爱心进度条_android自定义圆形进度条,实现动态画圆效果
- Openwrt Lede koolshare固件下屏蔽固定MAC地址以及屏蔽某些网站
- #185. [NOIP2016 提高组] 蚯蚓题解
- attach和detach区别
- 仿淘宝电商网站管理系统前端静态页面(html+jquery+css)(含毕业设计论文及源码)
- 用这个方法,苹果官网居然比二手市场还便宜,最近剁手的注意了