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合并多个装饰器小技巧
Apr 28 Python
Python 实现引用其他.py文件中的类和类的方法
Apr 29 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
Python 调用 Windows API COM 新法
Aug 22 Python
python脚本后台执行方式
Dec 21 Python
python梯度下降算法的实现
Feb 24 Python
Python使用pdb调试代码的技巧
May 03 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
Python celery原理及运行流程解析
Jun 13 Python
Pytorch实现将模型的所有参数的梯度清0
Jun 24 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
python 模拟登录B站的示例代码
Dec 15 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 数学运算验证码实现代码
2009/10/11 PHP
常见的PHP五种设计模式小结
2011/03/23 PHP
PHP gbk环境下json_dencode传送来的汉字
2012/11/13 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
PHP微信企业号开发之回调模式开启与用法示例
2017/11/25 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
Dom操作之兼容技巧分享
2011/09/20 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
浅析Javascript的自动分号插入(ASI)机制
2016/09/29 Javascript
Jquery和Js获得元素标签名称的方法总结
2016/10/08 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
Python3 replace()函数使用方法
2018/03/19 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
python中的colorlog库使用详解
2019/07/05 Python
python 实现识别图片上的数字
2019/07/30 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
pandas实现将日期转换成timestamp
2019/12/07 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
园林技术个人的自我评价
2014/01/08 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
招商专员岗位职责
2014/02/08 职场文书
大学生就业意向书范文
2014/04/01 职场文书
个人委托书
2014/07/31 职场文书
县委务虚会发言材料
2014/10/20 职场文书
Nginx如何配置Http、Https、WS、WSS的方法步骤
2021/05/11 Servers
如何在Python中妥善使用进度条详解
2022/04/05 Python