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获取脚本所在目录的正确方法
Apr 15 Python
Python遍历文件夹和读写文件的实现代码
Aug 28 Python
python3如何将docx转换成pdf文件
Mar 23 Python
python基于物品协同过滤算法实现代码
May 31 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
在python里面运用多继承方法详解
Jul 01 Python
Python3 合并二叉树的实现
Sep 30 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
Jan 18 Python
python super用法及原理详解
Jan 20 Python
Python 为什么推荐蛇形命名法原因浅析
Jun 18 Python
Python读写csv文件流程及异常解决
Oct 20 Python
python3+PyQt5+Qt Designer实现界面可视化
Jun 10 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验证码(支持中文)
2007/02/14 PHP
PHP中文汉字验证码
2007/04/08 PHP
php中定义网站根目录的常用方法
2010/08/08 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
php实现数据库的增删改查
2017/02/26 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
PHP生成加减算法方式的验证码实例
2018/03/12 PHP
心扬JS分页函数代码
2010/09/10 Javascript
理清apply(),call()的区别和关系
2011/08/14 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
JavaScript函数节流概念与用法实例详解
2016/06/20 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
JavaScript点击按钮生成4位随机验证码
2021/01/28 Javascript
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
python实现简单加密解密机制
2019/03/19 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
Python实现封装打包自己写的代码,被python import
2020/07/12 Python
详解python爬取弹幕与数据分析
2020/11/14 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
资深财务管理人员自我评价
2013/09/22 职场文书
理货员的岗位职责
2013/11/23 职场文书
小学二年级学生评语
2014/04/21 职场文书
争当四好少年演讲稿
2014/09/13 职场文书
学习保证书
2015/01/17 职场文书
明确岗位职责
2015/02/14 职场文书
公司捐书倡议书
2015/04/27 职场文书
秋菊打官司观后感
2015/06/03 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
Dubbo+zookeeper搭配分布式服务的过程详解
2022/04/03 Java/Android