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中的try和finally和with方法
May 05 Python
在Django中同时使用多个配置文件的方法
Jul 22 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
Apr 18 Python
django session完成状态保持的方法
Nov 27 Python
Python multiprocess pool模块报错pickling error问题解决方法分析
Mar 20 Python
Python实现i人事自动打卡的示例代码
Jan 09 Python
详解Python3 中的字符串格式化语法
Jan 15 Python
如何通过Django使用本地css/js文件
Jan 20 Python
Python多线程获取返回值代码实例
Feb 17 Python
Django ORM filter() 的运用详解
May 14 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
python使用pycharm安装pyqt5以及相关配置
Apr 22 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
模拟SQLSERVER的两个函数:dateadd(),datediff()
2006/10/09 PHP
php addslashes及其他清除空格的方法是不安全的
2012/01/25 PHP
php日历制作代码分享
2014/01/20 PHP
最新制作ThinkPHP3.2.3完全开发手册
2015/11/23 PHP
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
2020/06/19 Javascript
详解A标签中href=""的几种用法
2017/08/20 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
Python代码的打包与发布详解
2014/07/30 Python
Python中的推导式使用详解
2015/06/03 Python
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
python在文本开头插入一行的实例
2018/05/02 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
Python实现快速排序的方法详解
2019/10/25 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
支持IE8的纯css3开发的响应式设计动画菜单教程
2014/11/05 HTML / CSS
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
德国大型和小型家用电器网上商店:Energeto
2019/05/15 全球购物
英国现代家具和照明购物网站:Heal’s
2019/10/30 全球购物
药剂专业自荐信范文
2014/04/16 职场文书
小组名称和口号
2014/06/09 职场文书
校本教研活动总结
2014/07/01 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
2015入党自传格式范文
2015/06/26 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
Python代码风格与编程习惯重要吗?
2021/06/03 Python
利用python做数据拟合详情
2021/11/17 Python
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js