PyTorch中所有的操作都是基于Tensor(张量)的,因此理解张量的含义并能够自由创建张量是十分必要的。
张量是PyTorch中最基本的操作对象。我们可以用数学中的概念来辅助理解一下张量,如图5-1所示。
- 标量(Scalar)只具有数值大小,而没有方向,部分有正负之分,如1、2、3、-10。
- 矢量(Vector)具有大小和方向,如(3,4)。
- 矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,如[[1,2],[3,4]]。
标量、矢量、矩阵都属于张量,标量是零维张量,向量是一维张量,矩阵是二维张量。张量还可以是三维的、四维的等。
PyTorch的张量与NumPy中的ndarray类似,但是在PyTorch中,张量可以使用GPU进行计算以提高运算性能。
5.1.2 使用特定数据创建张量
为了更好地理解张量中的矩阵,下面先介绍如何将现有的NumPy矩阵转换成张量中的矩阵。张量就是PyTorch中的一种矩阵形式,因此PyTorch中集成了将NumPy创建的矩阵数据转换成张量的方法torch.from_numpy(),示例代码如下:
import torch
import numpy as np
a = np.array([3.0, 4.0, 5.0])
b = torch.from_numpy(a)
print(b)
输出结果如下:
tensor([3., 4., 5.], dtype=torch.float64)
还可以直接输入数据创建,方法是torch.tensor(),输入数据并指定数据的类型(int/float/double) ,示例代码如下:
import torch
#直接输入数据创建
a = torch.tensor([[3, 4, 5],
[6, 7, 8]])
print(a)
print(a.type())
#输入数据并指定数据类型创建
b = torch.FloatTensor([[3, 4, 5],
[6, 7, 8]])
print(b)
print(b.type())
输出结果如下:
tensor([[3, 4, 5],
[6, 7, 8]])
torch.LongTensor
tensor([[3., 4., 5.],
[6., 7., 8.]])
torch.FloatTensor
在一些实际应用中,可能会遇到全0矩阵、全1矩阵的情况,这时张量的创建采用torch.full方法创建,torch.full()方法接收参数为shape,x,输出一个shape大小的元素全为x的张量,相关代码如下:
import torch
a = torch.full((2,3),1)
print(a)
print(a.type())
输出结果如下:
tensor([[1, 1, 1],
[1, 1, 1]])
torch.LongTensor
有些时候,可能会使用一些连续的数据,类似于等差序列。这时可以使用torch.arange()方法,它接收三个参数,前两个是边界值,后一个是步长(Step),输出边界值范围内步长的等差序列组成的它张量。
import torch
#torch.arange()方法创建
a = torch.arange(0,10,2)
print(a)
print(a.type())
输出结果如下:
tensor([0, 2, 4, 6, 8])
torch.LongTensor
《PyTorch深度学习与企业级项目实战(人工智能技术丛书)》(宋立桓,宋立林)【摘要 书评 试读】- 京东图书 (jd.com)
本文节选自《PyTorch深度学习与企业级项目实战》,获出版社和作者授权发布。
【赠书活动第5期】《PyTorch深度学习与企业级项目实战》-CSDN博客