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中模块的__all__属性详解
Oct 26 Python
Python paramiko模块的使用示例
Apr 11 Python
使用python对excle和json互相转换的示例
Oct 23 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
Python 获取windows桌面路径的5种方法小结
Jul 15 Python
Python 实例方法、类方法、静态方法的区别与作用
Aug 14 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
用python实现学生管理系统
Jul 24 Python
python中的被动信息搜集
Apr 29 Python
Python Django项目和应用的创建详解
Nov 27 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中数据的批量导入(csv文件)
2006/10/09 PHP
php上传、管理照片示例
2006/10/09 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
JS继承用法实例分析
2015/02/05 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
深入理解vue Render函数
2017/07/19 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
详解React中合并单元格的正确写法
2019/01/08 Javascript
JS localStorage存储对象,sessionStorage存储数组对象操作示例
2020/02/15 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
Python命令启动Web服务器实例详解
2017/02/23 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
使用python的pexpect模块,实现远程免密登录的示例
2019/02/14 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
2014/09/09 面试题
公务员培训自我鉴定
2013/09/19 职场文书
会计专业推荐信
2013/10/29 职场文书
护士实习鉴定范文
2013/12/22 职场文书
京剧自荐信
2014/01/26 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
班级安全教育实施方案
2014/02/23 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
财务会计专业自荐书
2014/06/30 职场文书
检讨书大全
2015/01/27 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书