Pytorch中的自动求梯度机制和Variable类实例


Posted in Python onFebruary 29, 2020

自动求导机制是每一个深度学习框架中重要的性质,免去了手动计算导数,下面用代码介绍并举例说明Pytorch的自动求导机制。

首先介绍Variable,Variable是对Tensor的一个封装,操作和Tensor是一样的,但是每个Variable都有三个属性:Varibale的Tensor本身的.data,对应Tensor的梯度.grad,以及这个Variable是通过什么方式得到的.grad_fn,根据最新消息,在pytorch0.4更新后,torch和torch.autograd.Variable现在是同一类。torch.Tensor能像Variable那样追踪历史和反向传播。Variable仍能正确工作,但是返回的是Tensor。

我们拥抱这些新特性,看看Pytorch怎么进行自动求梯度。

#encoding:utf-8
import torch

x = torch.tensor([2.],requires_grad=True) #新建一个tensor,允许自动求梯度,这一项默认是false.
y = (x+2)**2 + 3 #y的表达式中包含x,因此y能进行自动求梯度
y.backward()
print(x.grad)

输出结果是:

tensor([8.])

这里添加一个小知识点,即torch.Tensor和torch.tensor的不同。二者均可以生成新的张量,但torch.Tensor()是python类,是默认张量类型torch.FloatTensor()的别名,使用torch.Tensor()会调用构造函数,生成单精度浮点类型的张量。

而torch.tensor()是函数,其中data可以是list,tuple,numpy,ndarray,scalar和其他类型,但只有浮点类型的张量能够自动求梯度。

torch.tensor(data, dtype=None, device=None, requires_grad=False)

言归正传,上一个例子的变量本质上是标量。下面一个例子对矩阵求导。

#encoding:utf-8
import torch

x = torch.ones((2,4),requires_grad=True)
y = torch.ones((2,1),requires_grad=True)
W = torch.ones((4,1),requires_grad=True)

J = torch.sum(y - torch.matmul(x,W)) #torch.matmul()表示对矩阵作乘法
J.backward()
print(x.grad)
print(y.grad)
print(W.grad)

输出结果是:

tensor([[-1., -1., -1., -1.],
   [-1., -1., -1., -1.]])
tensor([[1.],
   [1.]])
tensor([[-2.],
   [-2.],
   [-2.],
   [-2.]])

以上这篇Pytorch中的自动求梯度机制和Variable类实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python读写Redis数据库操作示例
Mar 18 Python
python中MySQLdb模块用法实例
Nov 10 Python
Python函数中定义参数的四种方式
Nov 30 Python
Python可变参数函数用法实例
Jul 07 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
Python3.x爬虫下载网页图片的实例讲解
May 22 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
python 移动图片到另外一个文件夹的实例
Jan 10 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
Django Path转换器自定义及正则代码实例
May 29 Python
Python Sqlalchemy如何实现select for update
Oct 12 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
Nov 10 Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 #Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 #Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 #Python
python实现门限回归方式
Feb 29 #Python
Python3.9又更新了:dict内置新功能
Feb 28 #Python
python实现logistic分类算法代码
Feb 28 #Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 #Python
You might like
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
CI框架中数据库操作函数$this->db->where()相关用法总结
2016/05/17 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
PHP查询大量数据内存耗尽问题的解决方法
2016/10/28 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
SlideView 图片滑动(扩展/收缩)展示效果
2010/08/01 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
你必须知道的Javascript知识点之"深入理解作用域链"的介绍
2013/04/23 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
javascript self对象使用详解
2016/10/18 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
详解小程序BackgroundAudioManager踩坑之旅
2019/12/08 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
vue中父子组件传值,解决钩子函数mounted只运行一次的操作
2020/07/27 Javascript
[50:38]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第二场 3月7日
2021/03/11 DOTA
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
2021/03/04 Python
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
Genny意大利官网:意大利高级时装品牌
2020/04/15 全球购物
2014年三八妇女节活动方案
2014/02/28 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
广播体操口号
2014/06/18 职场文书
土建施工员岗位职责
2014/07/16 职场文书
交通工程专业推荐信
2014/09/06 职场文书
2015年教师节慰问信
2015/03/23 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python