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爬取各类文档方法归类汇总
Mar 22 Python
python操作excel的包(openpyxl、xlsxwriter)
Jun 11 Python
对python实现二维函数高次拟合的示例详解
Dec 29 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
pyqt5 QProgressBar清空进度条的实例
Jun 21 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
pytorch实现CNN卷积神经网络
Feb 19 Python
Python os模块常用方法和属性总结
Feb 20 Python
Keras自定义IOU方式
Jun 10 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
Jun 11 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
python图像处理 PIL Image操作实例
Apr 09 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
第八节 访问方式 [8]
2006/10/09 PHP
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
php引用返回与取消引用的详解
2013/06/08 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
JavaScript面向对象编程入门教程
2014/04/16 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
JavaScript插件化开发教程 (一)
2015/01/27 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
Python进程间通信Queue实例解析
2018/01/25 Python
Python中的函数作用域
2018/05/07 Python
python3实现表白神器
2019/04/09 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
教师年度考核自我鉴定
2014/01/19 职场文书
学雷锋月活动总结
2014/04/25 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
公路局群众路线教育实践活动第一阶段工作汇报
2014/10/25 职场文书
社区公民道德宣传日活动总结
2015/03/23 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
对象析构函数__del__在Python中何时使用
2022/03/22 Python