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 开发Activex组件方法
Nov 08 Python
详解django中自定义标签和过滤器
Jul 03 Python
Python遍历numpy数组的实例
Apr 04 Python
python实现移位加密和解密
Mar 22 Python
Python中一些深不见底的“坑”
Jun 12 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
python 代码运行时间获取方式详解
Sep 18 Python
Python调用Redis的示例代码
Nov 24 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
Mar 03 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
phpmyadmin config.inc.php配置示例
2013/08/27 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
学习php设计模式 php实现观察者模式(Observer)
2015/12/09 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
PHP实现的数据对象映射模式详解
2019/03/20 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
js 省地市级联选择
2010/02/07 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
2015/06/24 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
使用Script元素发送JSONP请求的方法
2016/06/12 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
详解vuex之store源码简单解析
2019/06/13 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
python使用logging模块发送邮件代码示例
2018/01/18 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
python cv2读取rtsp实时码流按时生成连续视频文件方式
2019/12/25 Python
python变量的作用域是什么
2020/05/26 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
Lookfantastic挪威官网:英国知名美妆购物网站
2017/07/26 全球购物
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
你所在的项目是如何确定版本号的
2015/12/28 面试题
餐饮主管岗位职责
2013/12/10 职场文书
我爱我校演讲稿
2014/05/21 职场文书
2015新生加入学生会自荐书
2015/03/24 职场文书
Python制作表白爱心合集
2022/01/22 Python
Java中的Kotlin 内部类原理
2022/06/16 Java/Android