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中的文件和目录操作实现代码
Mar 13 Python
Python中的装饰器用法详解
Jan 14 Python
python学习 流程控制语句详解
Jun 01 Python
Python装饰器原理与用法分析
Apr 30 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
手写一个python迭代器过程详解
Aug 27 Python
opencv+python实现均值滤波
Feb 19 Python
keras实现图像预处理并生成一个generator的案例
Jun 17 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
Jul 20 Python
python源文件的字符编码知识点详解
Mar 04 Python
Django基础CBV装饰器和中间件
Mar 22 Python
Python 文字识别
May 11 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 Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
2017/02/08 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
2019/05/06 PHP
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
2013/01/10 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
JavaScript实现音乐导航效果
2020/11/19 Javascript
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
股指期货心得体会
2014/09/10 职场文书
博士生专家推荐信
2015/03/25 职场文书
逃课检讨书范文
2015/05/06 职场文书
Python Pandas知识点之缺失值处理详解
2021/05/11 Python
pytorch 使用半精度模型部署的操作
2021/05/24 Python
css3 选择器
2022/05/11 HTML / CSS