PyTorch基本数据类型(一)


Posted in Python onMay 22, 2019

PyTorch基础入门一:PyTorch基本数据类型

1)Tensor(张量)

Pytorch里面处理的最基本的操作对象就是Tensor(张量),它表示的其实就是一个多维矩阵,并有矩阵相关的运算操作。在使用上和numpy是对应的,它和numpy唯一的不同就是,pytorch可以在GPU上运行,而numpy不可以。所以,我们也可以使用Tensor来代替numpy的使用。当然,二者也可以相互转换。

Tensor的基本数据类型有五种:

  • 32位浮点型:torch.FloatTensor。pyorch.Tensor()默认的就是这种类型。
  • 64位整型:torch.LongTensor。
  • 32位整型:torch.IntTensor。
  • 16位整型:torch.ShortTensor。
  • 64位浮点型:torch.DoubleTensor。

那么如何定义Tensor张量呢?其实定义的方式和numpy一样,直接传入相应的矩阵即可即可。下面就定义了一个三行两列的矩阵:

import torch
# 导包
 
a = torch.Tensor([[1, 2], [3, 4], [5, 6]])
print(a)

不过在项目之中,更多的做法是以特殊值或者随机值初始化一个矩阵,就像下面这样:

import torch
 
# 定义一个3行2列的全为0的矩阵
b = torch.zeros((3, 2))
 
# 定义一个3行2列的随机值矩阵
c = torch.randn((3, 2))
 
# 定义一个3行2列全为1的矩阵
d = torch.ones((3, 2))
 
print(b)
print(c)
print(d)

Tensor和numpy.ndarray之间还可以相互转换,其方式如下:

  • Numpy转化为Tensor:torch.from_numpy(numpy矩阵)
  • Tensor转化为numpy:Tensor矩阵.numpy()

范例如下:

import torch
import numpy as np
 
# 定义一个3行2列的全为0的矩阵
b = torch.randn((3, 2))
 
# tensor转化为numpy
numpy_b = b.numpy()
print(numpy_b)
 
# numpy转化为tensor
numpy_e = np.array([[1, 2], [3, 4], [5, 6]])
torch_e = torch.from_numpy(numpy_e)
 
print(numpy_e)
print(torch_e)

之前说过,numpy与Tensor最大的区别就是在对GPU的支持上。Tensor只需要调用cuda()函数就可以将其转化为能在GPU上运行的类型。

我们可以通过torch.cuda.is_available()函数来判断当前的环境是否支持GPU,如果支持,则返回True。所以,为保险起见,在项目代码中一般采取“先判断,后使用”的策略来保证代码的正常运行,其基本结构如下:

import torch
 
# 定义一个3行2列的全为0的矩阵
tmp = torch.randn((3, 2))
 
# 如果支持GPU,则定义为GPU类型
if torch.cuda.is_available():
  inputs = tmp.cuda()
# 否则,定义为一般的Tensor类型
else:
  inputs = tmp

2)Variable(变量)

Pytorch里面的Variable类型数据功能更加强大,相当于是在Tensor外层套了一个壳子,这个壳子赋予了前向传播,反向传播,自动求导等功能,在计算图的构建中起的很重要的作用。Variable的结构图如下:

PyTorch基本数据类型(一)

其中最重要的两个属性是:data和grad。Data表示该变量保存的实际数据,通过该属性可以访问到它所保存的原始张量类型,而关于该 variable(变量)的梯度会被累计到.grad 上去。

在使用Variable的时候需要从torch.autograd中导入。下面通过一个例子来看一下它自动求导的过程:

import torch
from torch.autograd import Variable
 
# 定义三个Variable变量
x = Variable(torch.Tensor([1, 2, 3]), requires_grad=True)
w = Variable(torch.Tensor([2, 3, 4]), requires_grad=True)
b = Variable(torch.Tensor([3, 4, 5]), requires_grad=True)
 
# 构建计算图,公式为:y = w * x^2 + b
y = w * x * x + b
 
# 自动求导,计算梯度
y.backward(torch.Tensor([1, 1, 1]))
 
print(x.grad)
print(w.grad)
print(b.grad)

上述代码的计算图为y = w * x^2 + b。对x, w, b分别求偏导为:x.grad = 2wx,w.grad=x^2,b.grad=1。代值检验可得计算结果是正确的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python MD5文件生成码
Jan 12 Python
Python多线程编程(六):可重入锁RLock
Apr 05 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
python矩阵转换为一维数组的实例
Jun 05 Python
对python中的iter()函数与next()函数详解
Oct 18 Python
Python aiohttp百万并发极限测试实例分析
Oct 26 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
Mar 25 Python
python 弧度与角度互转实例
Apr 15 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
举例讲解Python装饰器
Dec 24 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 Python
PyTorch搭建多项式回归模型(三)
May 22 #Python
pytorch使用Variable实现线性回归
May 21 #Python
Python面向对象进阶学习
May 21 #Python
谈一谈基于python的面向对象编程基础
May 21 #Python
python字符串和常用数据结构知识总结
May 21 #Python
Opencv实现抠图背景图替换功能
May 21 #Python
python多进程读图提取特征存npy
May 21 #Python
You might like
PHP中extract()函数的妙用分析
2012/07/11 PHP
PHP实例分享判断客户端是否使用代理服务器及其匿名级别
2014/06/04 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
PHP在linux上执行外部命令的方法
2017/02/06 PHP
项目实践之javascript技巧
2007/12/06 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
JQuery 常用方法和事件详细介绍
2013/04/18 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
JavaScript实现缓动动画
2020/11/25 Javascript
[48:47]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python编码总结(编码类型、格式、转码)
2016/07/01 Python
详解python如何调用C/C++底层库与互相传值
2016/08/10 Python
python绘制中国大陆人口热力图
2018/11/07 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
工程业务员岗位职责
2013/12/31 职场文书
干部现实表现材料
2014/02/13 职场文书
地球一小时倡议书
2014/04/15 职场文书
花坛标语大全
2014/06/30 职场文书
低碳环保演讲稿
2014/08/28 职场文书
2014年教师学期工作总结
2014/11/08 职场文书
教师节联欢会主持词
2015/07/04 职场文书