1. 张量的基本概念
1.1. 定义与特性
张量是PyTorch中最基础的数据结构,可视为多维数组的泛化形式,支持标量(0维)、向量(1维)、矩阵(2维)及更高维度的数据存储。其核心特性包括:
- 动态计算图:允许实时构建和调整计算流程,适合复杂模型(如RNN)的灵活设计
- 自动微分:通过
autograd
模块自动计算梯度,简化反向传播的实现。 - 设备兼容性:可无缝运行于CPU或GPU,利用GPU加速大规模计算
1.2. 数据类型与设备
PyTorch张量支持多种数据类型:
- 数值类型:如
torch.FloatTensor
(32位浮点数)、torch.LongTensor
(64位整数) - 布尔类型:
torch.BoolTensor
用于逻辑运算
通过.dtype
查看数据类型,.device
确认存储位置(CPU/GPU)。
2. 张量的创建与初始化
2.1. 直接创建
- 使用
torch.tensor()
从Python列表或NumPy数组转换:
data = [[1, 2], [3, 4]]tensor = torch.tensor(data) # 自动推断数据类型
- 特定初始化方法:
torch.zeros()
生成全零张量,torch.rand()
生成均匀分布随机数torch.arange()
生成序列值,torch.eye()
创建单位矩阵
2.2. 从NumPy转换
PyTorch与NumPy可共享底层内存,实现高效数据交互:
np_array = np.array([[1, 2], [3, 4]])tensor_from_np = torch.from_numpy(np_array) # 转换为张量np_from_tensor = tensor.numpy() # 转回NumPy数组
需注意内存连续性,必要时使用.contiguous()
。
3. 张量的核心操作
3.1. 数学运算
- 逐元素运算:加法(
+
)、乘法(*
)、绝对值(torch.abs()
)等 - 矩阵运算:矩阵乘法(
torch.mm()
)、转置(.t()
或.transpose()
) - 统计运算:求和(
.sum()
)、均值(.mean()
)、最大值(.max()
)
3.2. 索引与切片
语法与NumPy类似,支持多维索引和布尔筛选:
tensor_2d = torch.tensor([[1, 2, 3], [4, 5, 6]])print(tensor_2d[0, 1]) # 输出2(第1行第2列)print(tensor_2d[:, 1:3]) # 切片所有行的第2-3列
3.3. 形状重塑与广播
- 重塑:通过
.view()
或.reshape()
调整形状,需保持元素总数一致 - 广播机制:自动扩展不同形状张量的维度以匹配运算,如向量与矩阵相加
4. 高级特性与优化
4.1. 自动微分与梯度计算
设置requires_grad=True
启用梯度跟踪,backward()
自动计算梯度:
x = torch.tensor([1.0, 2.0], requires_grad=True)y = x ** 2y.sum().backward() # 计算梯度print(x.grad) # 输出[2.0, 4.0]
通过torch.no_grad()
临时禁用梯度以提升性能。
4.2. GPU加速与内存管理
- 设备切换:使用
.to('cuda')
将张量移至GPU,利用并行计算加速 - 内存优化:采用
in-place
操作(如.add_()
)减少内存占用
总结
PyTorch 张量是深度学习任务的核心载体,其灵活的操作接口、高效的GPU加速能力与自动微分特性,使其成为模型开发与优化的基石。