Logo
Section 1 / 7

训练工作流程

了解 PyTorch 图像模型中的训练流程。

导入

训练工作流程

了解 PyTorch 图像模型中的训练流程。

从高层角度来看,整个训练过程包含以下步骤:

初始化

  1. 初始化分布式训练的相关参数。此步骤仅在 args.distributed 为 True 时适用。
  2. 设置一个种子值(seed),以确保实验结果具有可复现性。
  3. 使用 timm.create_model 函数创建所需的模型结构。
  4. 根据模型的默认配置初始化数据集相关参数。每个模型都有其特定的配置,通常包含以下信息:
1{ 2 'url': '', 3 'num_classes': 1000, 4 'input_size': (3, 224, 224), 5 'pool_size': (7, 7), 6 'crop_pct': 0.875, 7 'interpolation': 'bicubic', 8 'mean': (0.485, 0.456, 0.406), 9 'std': (0.229, 0.224, 0.225), 10 'first_conv': 'conv1', 11 'classifier': 'fc' 12}
  1. 确定数据增强批分割的数量,并将数据划分为 N 组。其中一半组不进行任何数据增强,另一半则应用增强操作。训练脚本会为每组使用独立的批归一化层(batch normalization layer)。因此,训练过程中每个增强分组都将拥有各自的批归一化层。

注意:如果分割数为 0,则脚本会对整个批次统一应用所有相关的数据增强操作,然后使用该批次来计算批归一化的统计量(如均值和方差)。

优化器与批归一化

  1. 在多 GPU 训练时,训练脚本会初始化 PyTorch 原生的 SyncBatchNorm 或 apex 的 syncBN,用于批归一化处理,从而在整个跨多个 GPU 的批次上进行统一归一化。

  2. 检查 torchscript 参数,若启用,则调用 torch.jit 函数使模型具备可导出能力。

  3. 根据所有与优化器相关的参数初始化优化器。

  4. 若启用,则开启混合精度训练功能,使用 apex.amp 或 torch.cuda.amp.autocast 实现。

  5. 检查是否设置了 resume 参数以加载模型检查点,若有,则加载对应的模型权重并从中断处恢复训练。

  6. 基于模型权重设置指数移动平均(EMA)。

  7. 根据相关参数配置分布式训练环境。

  8. 初始化学习率调度器(scheduler)。

  9. 构建训练集和验证集。如有需要,自动下载数据集并完成类别映射。

数据增强

  1. 初始化 Mixup 或 CutMix 数据增强模块。

注意:此阶段并未实际执行数据增强,仅构建增强流程管道。

  1. 如果增强批分割数量大于 1,则将训练数据集转换为 AugmixDataset 类型。
  2. 创建训练和验证数据加载器(data loader)。

注意:数据增强和数据变换在此步骤中实际执行。

损失函数与训练

  1. 根据相关参数配置损失函数。
  2. 设置模型检查点保存器以及评估指标跟踪器。
  3. 对模型进行一个 epoch 的训练。持续训练直至满足保存或评估条件,随后对模型进行评估,并将输出的评估指标保存至文件中。

结论

ResNet50