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中利用原始套接字进行网络编程的示例
May 04 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
May 25 Python
python爬虫入门教程--正则表达式完全指南(五)
May 25 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
python命令行工具Click快速掌握
Jul 04 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
python字符串下标与切片及使用方法
Feb 13 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
Django多数据库配置及逆向生成model教程
Mar 28 Python
python能做哪些生活有趣的事情
Sep 09 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
Python暴力破解Mysql数据的示例
Nov 09 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
从手册去理解分析PHP session机制
2011/07/17 PHP
php实现用户在线时间统计详解
2011/10/08 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
2015/10/09 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
Javascript 实用小技巧
2010/04/07 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
使用bootstrap插件实现模态框效果
2017/05/10 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
nodejs实现范围请求的实现代码
2018/10/12 NodeJs
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
Python设计模式之观察者模式实例
2014/04/26 Python
Python with用法实例
2015/04/14 Python
简单说明Python中的装饰器的用法
2015/04/24 Python
Django在pycharm下修改默认启动端口的方法
2019/07/26 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
python 实现线程之间的通信示例
2020/02/14 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
C#面试常见问题
2013/02/25 面试题
会计岗位职责
2013/11/08 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
2014年化验员工作总结
2014/11/18 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
python解决12306登录验证码的实现
2021/04/18 Python
Redis分布式锁Redlock的实现
2021/08/07 Redis