🎯 核心框架概念
-
张量(Tensor) - PyTorch 中最基本的数据结构,类似于 NumPy 的数组。可以是一维、二维或多维的,用于存储数据。
-
自动求导(Autograd) - PyTorch 中的自动求导机制可以自动计算张量的梯度,是神经网络训练中反向传播的基础。
-
动态计算图 - PyTorch 使用动态计算图,计算图在执行过程中动态构建,更符合 Python 的编程习惯。
-
nn.Module - 构建神经网络的基本模块,提供方便的方式来定义神经网络的结构和参数。
-
Variable - 早期版本的自动求导包装类,现在张量直接支持自动求导。
📊 张量基础操作
-
张量创建 - 可以通过
torch.tensor()、torch.zeros()、torch.ones()、torch.randn()等多种方式创建张量。 -
张量属性 - 包括
dtype(数据类型)、shape(形状)、device(所在设备)等。 -
标量 - 零维的张量,表示单个数值。
-
向量 - 一维的张量。
-
矩阵 - 二维的张量。
-
张量运算 - 支持加减乘除、矩阵乘法、转置、切片等丰富的数学运算。
-
GPU 加速 - 张量可以在 GPU 上进行加速计算,通过
.cuda()或.to(device)实现。 -
张量形状操作 -
view()、reshape()等方法用于改变张量形状。 -
张量索引 - 支持类似 NumPy 的索引和切片操作。
-
张量拼接 - 使用
cat()、stack()等方法合并张量。
🏗️ 神经网络构建模块
-
层(Layers) - PyTorch 提供各种预定义层,如全连接层(
nn.Linear)、卷积层(nn.Conv2d)等。 -
激活函数 - 包括
ReLU、Sigmoid、Tanh、Softmax等,用于引入非线性。 -
损失函数 - 用于度量模型性能,如均方误差(
MSE)、交叉熵损失等。 -
优化器(Optimizers) - 如随机梯度下降(
SGD)、Adam、RMSprop等。 -
前向传播 - 在
nn.Module子类中实现forward方法定义网络的前向计算过程。 -
反向传播 - 通过调用
backward()方法自动计算梯度并传播。 -
参数初始化 - 对网络权重进行合适的初始化。
-
自定义层 - 通过继承
nn.Module创建自定义神经网络层。
🔄 训练流程与管理
-
数据加载器(DataLoader) - 用于有效地批量加载和处理数据。
-
数据集(Dataset) - 定义数据预处理和增强的基类。
-
训练循环 - 迭代数据集,在每个批次上执行前向传播、损失计算、反向传播和参数更新。
-
验证循环 - 在验证集上评估模型性能。
-
测试循环 - 在测试集上评估最终模型性能。
-
批次大小(Batch Size) - 每次训练使用的样本数量。
-
迭代次数(Iterations) - 完成一个 epoch 需要的批次数量。
-
周期(Epochs) - 整个数据集被完整训练一次。
💾 模型保存与加载
-
模型保存 - 使用
torch.save()将训练好的模型保存到磁盘。 -
模型加载 - 使用
torch.load()加载已保存的模型参数。 -
状态字典 - 通过
state_dict()获取模型参数,便于保存和加载。 -
检查点(Checkpointing) - 保存训练过程中的中间状态。
⚙️ 优化与调度
-
学习率调度 - 通过
torch.optim.lr_scheduler在训练过程中动态调整学习率。 -
梯度裁剪 - 防止梯度爆炸,限制梯度的大小。
-
权重衰减 - 正则化技术,防止过拟合。
-
动量(Momentum) - 优化器参数,加速收敛。
🔧 高级特性与优化
-
计算图 - 记录张量操作的有向无环图,用于自动微分。
-
梯度累积 - 在小批量训练中累积多个批次的梯度。
-
模型并行 - 将大型模型分布到多个 GPU 上进行训练。
-
数据并行 - 使用
nn.DataParallel在多个 GPU 上并行处理数据。 -
内存管理 - PyTorch 自动管理 GPU 内存,支持内存复用和优化。
-
异步执行 - GPU 操作默认异步执行,提高计算效率。
-
JIT 编译 - 通过 TorchScript 将模型编译为优化格式。
-
稀疏张量 - 用于处理大部分元素为零的高维数据。
-
量化张量 - 使用低精度数据类型减少模型大小和推理时间。
🎨 特殊张量类型
-
复数张量 - 支持复数运算,适用于信号处理等场景。
-
布尔张量 - 用于逻辑运算和掩码操作。
🔍 调试与分析工具
-
钩子(Hooks) - 用于在模型前向或反向传播过程中插入自定义操作。
-
梯度检查 - 验证自动微分计算的梯度是否正确。
-
性能分析器 - 内置工具用于分析模型性能和瓶颈。
-
张量可视化 - 使用工具可视化张量内容和分布。
🌐 生态系统集成
-
TorchVision - 计算机视觉专用库,提供预训练模型和数据集。
-
TorchText - 自然语言处理专用库。
-
TorchAudio - 音频处理专用库。
-
ONNX 支持 - 将模型导出为 ONNX 格式,实现跨框架兼容。
-
TensorBoard 集成 - 可视化训练过程和模型结构。
⚡ 计算优化技术
-
inplace 操作 - 原地修改张量值,节省内存。
-
确定性操作 - 确保相同输入产生相同输出。
-
自动混合精度 - 结合使用不同精度数据类型。
-
缓存机制 - 优化重复计算性能。
🔄 序列处理与转换
-
序列化 - 支持将模型和优化器状态序列化为字节流。
-
张量转换 - 与 NumPy 数组之间的相互转换。
🛠️ 工具与扩展功能
-
C++ 前端 - 支持在 C++ 环境中使用 PyTorch 模型。
-
分布式训练 - 支持在多台机器上分布式训练大型模型。
-
模型部署 - 通过 TorchScript 或 ONNX 在生产环境中部署训练好的模型。
📊 数据处理与增强
-
数据变换 - 使用
torchvision.transforms进行数据预处理和增强。 -
自定义数据集 - 通过继承
Dataset类创建针对特定任务的数据集。 -
采样器(Sampler) - 控制数据加载的顺序和策略。
-
数据增强 - 通过随机变换增加训练数据的多样性。
🎯 损失函数详解
-
交叉熵损失 - 用于分类任务的标准损失函数。
-
均方误差损失 - 用于回归任务的标准损失函数。
-
二元交叉熵 - 用于二分类问题的损失函数。
-
L1 损失 - 绝对误差损失函数。
-
Huber 损失 - 结合 L1 和 L2 损失的鲁棒损失函数。
🏗️ 网络层类型
-
卷积层 - 用于提取空间特征的层。
-
池化层 - 用于降维和防止过拟合。
-
归一化层 - 如批归一化、层归一化等。
-
循环层 - 如 LSTM、GRU 等,用于序列数据处理。
-
嵌入层 - 将离散特征映射到连续向量空间。
🔧 优化器配置
-
学习率 - 控制参数更新步长的超参数。
-
权重衰减 - 正则化参数,防止过拟合。
-
动量参数 - 加速优化过程的参数。
-
自适应优化器 - 如 Adam 等自动调整学习率的优化器。
📈 训练监控
-
训练损失 - 训练过程中计算的损失值。
-
验证损失 - 验证集上计算的损失值。
-
准确率 - 分类任务中的性能指标。
-
精度与召回率 - 用于评估分类模型性能。
🛡️ 正则化技术
-
Dropout - 随机忽略部分神经元,防止过拟合。
-
早停(Early Stopping) - 防止过拟合的训练策略。
-
批归一化 - 加速训练并提高模型性能的技术。
💡 实用工具函数
-
设备管理 - 管理 CPU 和 GPU 设备的工具函数。
-
随机种子 - 确保实验可复现性的设置。
-
模型总结 - 输出模型结构和参数统计。
-
参数计数 - 计算模型的可训练参数数量。
-
梯度统计 - 监控梯度分布和变化。
-
学习率监控 - 跟踪学习率变化情况。
-
模型评估模式 - 设置模型为评估模式,关闭 Dropout 等训练专用层。