PyTorch中的张量
PyTorch是一个流行的开源深度学习库,它提供了一个动态计算图的高级接口,允许用户灵活地执行各种机器学习任务。在PyTorch中,张量是数据存储和运算的基本单元,类似于NumPy的ndarray。张量是多维数组,可以包含标量、向量、矩阵等数据类型,用于表示在一些矢量、标量和其他张量之间的线性关系。在数学上,张量是一个定义在向量空间和对偶空间的笛卡尔积上的多重线性映射。在物理学和工程学中,张量被广泛用于描述物理量在空间中的分布和变化3。
张量的维度、形状和类型
维度(Rank)
张量的维度指的是张量中用来索引元素的索引个数。0维张量就是标量,因为不需要索引;对于向量而言,只需要一个索引就可以得到相应元素。高维的张量其实就是对低维张量的堆叠。例如,一个二维张量就是一个矩阵,而一个三维张量则是一个“立方体”形状的数据结构3。
形状(Shape)
张量的形状指的是张量中每一维度的大小。形状中小括号的数字个数就表示了张量的维度数(秩)。例如,一个三维张量的形状可以是(3, 224, 224),表示有三个通道,每个通道的大小是224x2241。
类型(Type)
张量的类型指的是张量中每个元素的数据类型。PyTorch中,张量可以有不同的数据类型,包括浮点型和整型。浮点型按照精度不同,又分为16位、32位以及64位;整型则根据有无符号位以及精度,又分为8位无符号整型、8位有符号整型、16位有符号整型、32位有符号整型以及64位有符号整型。每个类型又可以区分为CPU类型以及GPU类型2。
张量的创建和使用
创建张量
在PyTorch中,可以使用torch.tensor()
函数来创建一个张量。例如,创建一个标量张量、向量张量或矩阵张量3。
使用0初始化向量
可以使用torch.zeros
函数来创建一个所有元素都为0的向量。类似地,torch.ones
函数可以用来创建一个所有元素都为1的向量3。
使用随机值初始化向量
PyTorch提供了torch.randn
来生成从标准正态分布中抽取的随机浮点数,以及torch.randint
来生成指定范围内的随机整数3。
创建二维张量
在PyTorch中,还可以创建二维张量(类似于NumPy中的矩阵)。可以使用torch.zeros
或torch.randn
来初始化二维张量3。
张量的基本运算
在PyTorch中,所有的数据都是通过张量来表示的。张量是一个多维数组,可以包含标量、向量、矩阵等数据类型。通过使用张量计算库(如PyTorch、TensorFlow等),可以方便地实现神经网络的前向传播、反向传播和优化等过程3。
PyTorch中的张量是数据存储和运算的基本单元,它们是多维数组,可以包含标量、向量、矩阵等数据类型。张量的维度、形状和类型是描述张性的关键属性。PyTorch提供了丰富的函数和方法来创建、操作和管理张量,使得深度学习模型的开发和部署变得更加便捷。、
其实pytorch中的张量和Python中的列表差不多,但也有所区别,今天我们来讲一下张量的基本语法以及常用操作。
第一步肯定是导入我们最熟悉的torch库
import torch
创建一个大小为3的一维张量,用1.0填充
# 创建一个大小为3的一维张量,用1.0填充
a = torch.ones(3)
print(a)
下面的操作就和列表的操作基本一样
print(a[0])
print(float(a[0]))
a[0] = 2.0
print(a)
使用zeros()函数来获得适当大小的数组
# 使用zeros()函数来获得适当大小的数组
points = torch.zeros(6)
print(points)
虽然说我们得到了全是0的张量,但是每个0的位置都可以自己按照需求进行数值的替换
下面举个例子
points[0] = 6.0
points[1] = 1.0
points[2] = 8.0
points[3] = 9.0
points[4] = 8.0
points[5] = 5.0
print(points)
这样一来我们就可以得到一个我们自己想要的张量了
或者自己直接使用函数直接构造一个自己的张量,避免了使用zeros函数还需要一个个进行数值替换那么麻烦
points1 = torch.tensor([4.0, 1.0, 5.0, 3.0, 2.0, 1.0])
print(points1)
创建一个二维张量
# 创建一个二维张量
points2 = torch.tensor([[4.0, 1.0],[5.0, 3.0],[2.0, 1.0]])
print(points2)
查看一个张量的形状
points2.shape
使用zeros()函数初始化张量的形状
points4 = torch.zeros(3, 2)
print(points4)
print(points4.shape)
和上面一样自己直接创建二维张量也是一样的,但是高维张量的索引和列表的索引有所不同,下面我用示例来展示一下
points5 = torch.tensor([[9.0, 8.0, 5.0],[6.0, 0.0, 4.0],[6.0,1.0,8.0]])
print(points5[0])
print(points5[0, 1])