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文件和目录操作详解
Feb 08 Python
Django实现图片文字同时提交的方法
May 26 Python
Python基于pygame实现的弹力球效果(附源码)
Nov 11 Python
python pandas修改列属性的方法详解
Jun 09 Python
python 字典中取值的两种方法小结
Aug 02 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
Django Admin中增加导出Excel功能过程解析
Sep 04 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
python小白切忌乱用表达式
May 29 Python
解决pycharm下载库时出现Failed to install package的问题
Sep 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
PHP 中的类
2006/10/09 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
PHP输入流php://input介绍
2012/09/18 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
JSON+HTML实现国家省市联动选择效果
2014/05/18 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
详解Angularjs filter过滤器
2016/02/06 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
BootStrap表单控件之复选框checkbox和单选择按钮radio
2017/05/23 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
KMP算法精解及其Python版的代码示例
2016/06/01 Python
Python中标准模块importlib详解
2017/04/16 Python
python 定时修改数据库的示例代码
2018/04/08 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
python utc datetime转换为时间戳的方法
2019/01/15 Python
Django中URL的参数传递的实现
2019/08/04 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
Python 日期与时间转换的方法
2020/08/01 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
如何写一份好的自荐信
2014/01/02 职场文书
优秀员工推荐信
2014/05/10 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
学习党的群众路线教育实践活动心得体会范文
2014/11/03 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
基于Redis实现分布式锁的方法(lua脚本版)
2021/05/12 Redis