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程序语言快速上手教程
Jul 18 Python
Python通过解析网页实现看报程序的方法
Aug 04 Python
Python字典操作简明总结
Apr 13 Python
在Python中使用第三方模块的教程
Apr 27 Python
详谈Python2.6和Python3.0中对除法操作的异同
Apr 28 Python
用Django实现一个可运行的区块链应用
Mar 08 Python
python-opencv颜色提取分割方法
Dec 08 Python
python装饰器常见使用方法分析
Jun 26 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
Python Web版语音合成实例详解
Jul 16 Python
Python类的动态绑定实现原理
Mar 21 Python
python 指定源路径来解决import问题的操作
Mar 04 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
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
PHP文件缓存内容保存格式实例分析
2014/08/20 PHP
PHP开发注意事项总结
2015/02/04 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
PHP中大括号'{}'用法实例总结
2017/02/08 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
thinkPHP多表查询及分页功能实现方法示例
2017/07/03 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
window.open的功能全解析
2006/10/10 Javascript
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
bootstrap下拉菜单使用方法解析
2017/01/13 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
webpack vue 项目打包生成的文件,资源文件报404问题的修复方法(总结篇)
2018/01/09 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
Vue-router 报错NavigationDuplicated的解决方法
2020/03/31 Javascript
详细介绍Python语言中的按位运算符
2013/11/26 Python
Python Django基础二之URL路由系统
2019/07/18 Python
Python同时处理多个异常的方法
2020/07/28 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
租赁意向书范本
2014/04/01 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
CAD实训总结范文
2015/08/03 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
Linux中sftp常用命令整理
2022/06/28 Servers