Tensor的基础知识
张量的基本概念
张量(Tensor)是神经网络中使用的主要数据结构,在网络的输入、转换和输出都涉及到张量。张量的概念是对其他更具体概念的数学概括,张量在计算机科学方面和数学方面本质上相同,但术语不同,对比图如下,其中Indexes required表示需要的索引数。

换言之,在深度学习和神经网络中,张量是n维数组,我们用张量这个词来表示所有的n值,比如标量是零维张量、矢量是一维张量、矩阵是二维张量、n维数组是n维张量。
张量的基本属性
张量的基本属性主要有三个:
- 秩(Rank)
- 轴(Axes)
- 形状(Shape)
(1)张量的秩是指张量中存在的维数
(2)张量的轴是指一个张量的一个特定的维数
(3)张量的形状是由每个轴的长度决定
三者的联系为一个张量的秩告诉我们一个张量有多少个轴,每个张量的形状告诉我们每个轴的长度,而轴的长度告诉我们沿轴有多少个索引!
举一个3乘以3的矩阵进行说明:
import torch
array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
t = torch.tensor(array)
len(t.shape)
t.shape
结果显示:


结果分析:
1. 一个张量的大小(Size)和一个张量的形状(Shape)是一样的。
2. 这个张量的形状揭示了一个张量的秩,该秩等于它的形状的长度。
3. 这个秩为2的张量的每一个轴的长度是3
补充说明:
一个张量的形状很重要,主要有以下几个原因:
- 形状有利于我们想象一个更高阶和更抽象的张量
- 形状对所有有关轴、秩和索引的信息进行了编码
- 神经网络中的重塑操作需要结合形状进行(在重塑时分量值的乘积等于张量中元素的总数)
Pytorch张量的属性
Pytorch张量除了拥有基本的三种属性外,还具备以下三种属性:
- 数据类型
- 设备
- 布局
import torch
t = torch.Tensor()
print(t.dtype)
print(t.device)
print(t.layout)
结果如下:
torch.float32
cpu
torch.strided
(1)数据类型

(2)设备
我们可以为张量指定一个设备,这个设备可以是CPU,也可以是GPU,这决定张量计算的位置。
device = torch.device('cuda:0')
device
在jupyter notebook上运行上面的代码,其输出结果如下:
device(type='cuda', index=0)
这意味着这个设备是一个GPU,index=0表示第一个GPU。
注意事项:
- 在使用多设备时,张量只能与存在于同一个设备上的其他张量之间进行操作。
- 只用相同数据类型的张量之间才能进行指定的操作,否则将报错。
Pytorch张量的创建
(1)Pytorch中提供了四种不同的方法来创建有初始值的张量,具体如下:
import torch
import numpy as np
data = np.array([1, 2, 3])
# 四种不同方法
torch.Tensor(data)
torch.tensor(data)
torch.as_tensor(data)
torch.from_numpy(data)
四种方法各自返回的结果如下:

四种方法的区别:
- 第一个方法是类的构造函数,其他三个方法是构建张量对象的工厂函数
- 构造函数在构造一个张量时使用全局缺省值,而工厂函数则根据输入推断数据类型
- 工厂函数允许显示配置数据类型,而构造函数则没有这个功能
- 第一个方法和第二个方法在内存中创建了一个额外的输入数据副本,而第三个方法和第四个方法则是在内存中共享数据(可以类比指针)。
对于第4点的区别可通过如下代码进行说明:
import torch
import numpy as np
data = np.array([1, 2 , 3])
t1 = torch.Tensor(data)
t2 = torch.tensor(data)
t3 = torch.as_tensor(data)
t4 = torch.from_numpy(data)
# 改变元素的值
data[0] = 0
data[1] = 0
data[2] = 0
print(t1)
print(t2)
print(t3)
print(t4)
结果如下:
tensor([1., 2., 3.])
tensor([1, 2, 3], dtype=torch.int32)
tensor([0, 0, 0], dtype=torch.int32)
tensor([0, 0, 0], dtype=torch.int32)
在选择方法时,建议优先考虑torch.tensor()和torch.as_tensor().
(torch.from_numpy调用时只接受numpy数组)
(2)Pytorch中有几种没有提供任何数据的情况下使用的创建选项,具体如下:

本文介绍了张量的基础概念及其在深度学习中的应用。包括张量的秩、轴、形状等基本属性,以及Pytorch中张量的数据类型、设备、布局等特性,并详细说明了张量的不同创建方法。

1万+

被折叠的 条评论
为什么被折叠?



