TImm 笔记: 训练模型

1 训练所需参数

  1.1 需要的参数

timm训练脚本需要的唯一参数是训练数据的路径

比如我们数据长这样:

 因此为例训练imagenette2-320数据,我们需要:

python train.py <path_to_imagenette2-320_dataset>

1.2 默认参数

How to train your own models using timm? | timmdocs

2  训练脚本的各个步骤

        在本节中,我们将从宏观的角度来研究训练脚本中的各个步骤。

  1. 如果args.distributed=True,设置分布式训练参数。
  2. 为可重复的结果设置手动种子。(manual seed)
  3. 使用timm.create_model 创建模型
  4. 根据模型的默认配置设置数据配置。一般情况下,模型的默认配置如下: 
    {'url': '', 
    'num_classes': 1000, 
    'input_size': (3, 224, 224), 
    'pool_size': (7, 7), 
    'crop_pct': 0.875,
     'interpolation': 'bicubic', '
    mean': (0.485, 0.456, 0.406), 
    'std': (0.229, 0.224, 0.225), 
    'first_conv': 'conv1', 
    'classifier': 'fc'}
  5.          设置扩增批分割,如果扩增批分割( augmentation batch splits)的数量大于1,将所有模型的BatchNormlayers转换为Split batch Normalization层。                                                        通常,当我们训练一个模型时,我们将数据增强【data augmentation】应用于完整批【batch】,然后从这个完整批定义批规范【batch norm】统计数据,如均值和方差。                      但有时将数据分成组,并为每个组使用单独的批处理归一化层【Batch Normalization layers】来独立地归一化组是有益的。这在一些论文中被称为辅助批规范【auxiliary batch norm】,在timm中被称为SplitBatchNorm2d。                                                                                                                                                                                                                                      我们假设augmentation batch splits数量是2。我们将数据拆分成两个组,一组没有数据增强,一组有数据增强。然后我们使用两个独立的批处理归一化层【Batch Normalization layers】来归一化两个组别
  6. 如果我们使用多个gpu进行训练,那么设置apex syncBN或PyTorch native SyncBatchNorm,来设置Synchronized Batch Normalization。这意味着我们不是对每个单独的GPU上的数据进行归一化,而是在多个GPU上对整个批处理进行归一化。
  7. 使用torch.jit,如果我们需要有输出
  8. 根据传递给训练脚本的参数,初始化优化器
  9. 设置混合精度——使用apex.amp 或者torch.cuda.amp.autocast
  10. 如果是从某一个模型checkpoint 继续的,加载模型权重
  11. 设置模型权重的指数移动平均【exponential moving average】
  12. 根据步骤1中的参数设置分布式训练
  13. Setup learning rate scheduler.
  14. 建立训练集和验证集
  15. Setup Mixup/Cutmix data augmentation.
  16. 如果第五步augmentation batch splits数量大于1,那么将训练数据集转换成`AugmixDataset`
  17. 创建训练集和验证集的data loader
  18. 设置损失函数
  19. 设置模型保存点、模型评估指标
  20. 训练并验证模型,将评估结果保存到一个文件中

 

 3 EMA (Exponential Moving Average)

机器学习笔记:Momentum_UQI-LIUWJ的博客-CSDN博客

使用EMA训练模型,添加--model-ema

定义EMA的衰减率,使用--model-ema-decay + 值

model_weights = decay * model_weights + (1 - decay) * new_model_weights

 3.1 不使用EMA举例

python train.py ../imagenette2-320 --model resnet34

 3.2 使用EMA举例

python train.py ../imagenette2-320 --model resnet34 --model-ema --model-ema-decay 0.99
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值