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中使用MELIAE分析程序内存占用实例
Feb 18 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
python下载图片实现方法(超简单)
Jul 21 Python
Python对字符串实现去重操作的方法示例
Aug 11 Python
Python实现定时精度可调节的定时器
Apr 15 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
python矩阵的转置和逆转实例
Dec 12 Python
Python3 log10()函数简单用法
Feb 19 Python
python实现websocket的客户端压力测试
Jun 25 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
Python进程间通信multiprocess代码实例
Mar 18 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 24 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读取PDF内容配合Xpdf的使用
2012/11/24 PHP
如何利用PHP执行.SQL文件
2013/07/05 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
使用PHPMailer发送邮件实例
2017/02/15 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
基于jquery的跟随屏幕滚动代码
2012/07/24 Javascript
JS分页效果示例
2013/10/11 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
js实现简单的碰壁反弹效果
2016/08/30 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
vuex的简单使用教程
2018/02/02 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
Python正则替换字符串函数re.sub用法示例
2017/01/19 Python
python清除函数占用的内存方法
2018/06/25 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
Python高级特性与几种函数的讲解
2019/03/08 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
python中的对数log函数表示及用法
2020/12/09 Python
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
自荐信包含哪些内容
2013/10/30 职场文书
办加油卡单位介绍信
2014/01/09 职场文书
高中生自我评语大全
2014/01/19 职场文书
先进个人获奖感言
2014/01/24 职场文书
实习单位指导教师评语
2014/12/30 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python
tomcat的catalina.out日志按自定义时间格式进行分割的操作方法
2022/04/02 Servers
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers