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使用MONGODB入门实例
May 11 Python
浅谈对yield的初步理解
May 29 Python
TensorFlow损失函数专题详解
Apr 26 Python
基于python的多进程共享变量正确打开方式
Apr 28 Python
django进阶之cookie和session的使用示例
Aug 17 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
python正则表达式匹配IP代码实例
Dec 28 Python
Django choices下拉列表绑定实例
Mar 13 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 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
实用函数3
2007/11/08 PHP
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
javascript oop开发滑动(slide)菜单控件
2010/08/25 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
原生JavaScrpit中异步请求Ajax实现方法
2017/11/03 Javascript
json字符串传到前台input的方法
2018/08/06 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
[43:58]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第一场 1月8日
2021/03/11 DOTA
python字典get()方法用法分析
2015/04/17 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
What is view? why do we have view?
2012/06/22 面试题
什么是测试驱动开发(TDD)
2012/02/15 面试题
会计专业毕业生自我评价
2013/09/25 职场文书
会计实习期自我鉴定
2013/10/06 职场文书
写给女朋友的道歉信
2014/01/12 职场文书
求职面试个人自我评价
2014/02/28 职场文书
乳制品整治工作方案
2014/05/29 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
债务授权委托书范本
2014/10/17 职场文书
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS