Tensor
在数据科学和机器学习中,Tensor (张量) 是一个重要的数据类型,旨在提供一个易于处理的数据类型。
与列表比较
Tensor 和列表之间有以下几个主要的关联:
- 维度:Tensor 可以有多个维度,而列表每级有一个维度。
- 元素类型:列表可以包含不同的数据类型,而 Tensor 只能包含同一且特定类型的数据,例如整型 (int64, int32, int16, int8)、浮点型 (float64, float32, float16, bfloat16, float8) 等。
- GPU 支持:Tensor 可以在 GPU 等硬件加速器 上进行计算,这使得 Tensor 在处理大型数据集时具有更高的性能。
- 精度:Tensor 可以提供特定的精度,如16位脑浮点,以加速计算。
创建张量
与 pandas 类似,pytorch 也基于 numpy,因此有一些相同的初始化方式。
首先,让我们直接从数据创建张量。
import torch
# 创建一个1维列表
list_1d = [1, 2, 3, 4, 5]
print("一维列表:", list_1d)
# 创建一个2维列表
list_2d = [[1, 2, 3], [4, 5, 6]]
print("二维列表:", list_2d)
一维列表: [1, 2, 3, 4, 5]
二维列表: [[1, 2, 3], [4, 5, 6]]接下来,让我们创建与已知张量形状相同的,包含0、1或随机数的张量。
接下来,让我们创建已知形状的,包含0、1或随机数的张量。
Tensor 的属性
Tensor 有一些描述自身属性的方法,比如 shape、size、dtype、device 等。
- shape :返回 Tensor 的形状,是一个元组 (torch.Shape)。
- size :返回 Tensor 的元素总数。
- dtype :返回 Tensor 的数据类型。
张量操作
张量操作超过100种,包括算术运算、线性代数和矩阵操作(如转置、索引和切片)。要进行采样和复习,可以在此处找到全面的描述。
每种操作都可以在GPU上运行(通常比在CPU上更快)。
- CPU通常有多达16个核心。核心是实际进行计算的单元。每个核心按顺序处理任务(一次处理一个任务)。
- GPU拥有数千个核心。GPU核心以并行处理的方式进行计算。任务会被分解并分配到不同的核心上处理。这使得GPU在大多数情况下比CPU更快。GPU在处理大数据时性能优于小数据。GPU通常用于图形或神经网络的高强度计算(在神经网络单元中我们将进一步学习这个内容)。
- PyTorch可以使用 Nvidia 的 cuda 后端,Apple 的 mps 后端或 Microsoft 的 DirectML 后端来利用 GPU。
默认情况下,张量是在CPU上创建的。张量也可以在GPU上计算;要实现这一点,需要在创建张量时指定device参数或使用.to方法将它们移到GPU上(在此之前先检查GPU是否可用)。请记住,将大型张量在设备之间复制可能会耗费时间和内存。
张量操作
torch.Tensor 和 pandas.DataFrame 一样 兼容 NumPy 的多数操作,包括索引、切片、拼接等。
张量索引
张量可以直接使用方括号[]进行索引。
张量拼接
张量拼接是指将多个张量按照某个维度拼接在一起,形成一个新的张量。
在PyTorch中,张量拼接可以使用torch.cat()函数实现。
数学操作
单元素张量
单元素张量可以用.item()方法获取其值。
原地操作
将结果存储到操作数中的操作称为原地操作。
在 pandas 中,原地操作通常通过参数 inplace = True 或 copy = False 来控制。
在 PyTorch 中,原地操作通常通过方法名中包含 “” 来表示,例如:``x.copy(y),x.t_() 会直接更改 x`` 的值。
注意: 原地操作可以节省一些内存,但在计算导数时可能会出现问题,因为它们会立即丢失历史记录。因此,我们在大多数情况下不推荐使用它们。
tensor([[6., 5., 6., 6.],