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+Django在windows下的开发环境配置图解
Nov 11 Python
Pyramid添加Middleware的方法实例
Nov 27 Python
Python中使用pprint函数进行格式化输出的教程
Apr 07 Python
开源Web应用框架Django图文教程
Mar 09 Python
Python标准库之itertools库的使用方法
Sep 07 Python
django中模板的html自动转意方法
May 27 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
使用TensorFlow实现SVM
Sep 06 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
TensorFlow绘制loss/accuracy曲线的实例
Jan 21 Python
GitHub上值得推荐的8个python 项目
Oct 30 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
模仿OSO的论坛(四)
2006/10/09 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
分享PHP计算两个日期相差天数的代码
2015/12/23 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
javascript replace()正则替换实现代码
2010/02/26 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
JS动画效果打开、关闭层的实现方法
2015/05/09 Javascript
jQuery+formdata实现上传进度特效遇到的问题
2016/02/24 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
浅谈react受控组件与非受控组件(小结)
2018/02/09 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
vue实现树状表格效果
2020/12/29 Vue.js
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
python生成并处理uuid的实现方式
2020/03/03 Python
举例详解CSS3中的Transition
2015/07/15 HTML / CSS
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
婚庆公司的创业计划书
2014/01/22 职场文书
市场营销方案范文
2014/03/11 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
财务部会计岗位职责
2015/02/03 职场文书
企业计划生育责任书
2015/05/09 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
详解Django的MVT设计模式
2021/04/29 Python
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS
Python 避免字典和元组的多重嵌套问题
2022/07/15 Python