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中的生成器和yield详细介绍
Jan 09 Python
Python中最常用的操作列表的几种方法归纳
Apr 24 Python
python查看FTP是否能连接成功的方法
Jul 30 Python
Python OpenCV处理图像之图像像素点操作
Jul 10 Python
tensorflow实现简单逻辑回归
Sep 07 Python
python dict 相同key 合并value的实例
Jan 21 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 Python
python实现五子棋人机对战游戏
Mar 25 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
Jan 03 Python
Python pip install如何修改默认下载路径
Apr 29 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 Python
Python requests用法和django后台处理详解
Mar 19 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
xss防御之php利用httponly防xss攻击
2014/03/21 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
js代码实现微博导航栏
2015/07/30 PHP
一个可以随意添加多个序列的tag函数
2009/07/21 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
js动态创建及移除div的方法
2015/06/03 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
jQuery移动端日期(datedropper)和时间(timedropper)选择器附源码下载
2016/04/19 Javascript
使用Angular.js实现简单的购物车功能
2016/11/21 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
vue购物车插件编写代码
2017/11/27 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
Python list操作用法总结
2015/11/10 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
python区分不同数据类型的方法
2019/10/14 Python
pytorch:实现简单的GAN示例(MNIST数据集)
2020/01/10 Python
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
django中cookiecutter的使用教程
2020/12/03 Python
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
Linux的文件类型
2012/03/07 面试题
本科毕业生自荐信
2014/06/02 职场文书
爱情保证书
2015/01/17 职场文书
会议欢迎词
2015/01/23 职场文书
2015年光棍节活动总结
2015/03/24 职场文书
2015年市场部工作总结
2015/04/30 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
MySQL 开窗函数
2022/02/15 MySQL
python处理json数据文件
2022/04/11 Python