LibContinual / docs /tutorials /zh /write_a_config_yaml_zh.md
boringKey's picture
Upload 236 files
5fee096 verified

编写.yaml配置文件

本节相关代码:

core/config/config.py
config/*

LibContinual中配置文件的组成

LibContinual的配置文件采用了yaml格式的文件,同时也支持从命令行中读取一些全局配置的更改。我们预先定义了一个默认的配置core/config/default.yaml。用户可以将自定义的配置放在config/目录下,保存为yaml格式的文件。配置定义在解析时的优先级顺序是default.yaml->config/->console。后一个定义会覆盖前一个定义中名称相同的值。

尽管default.yaml中设置的是持续学习中的一些最基础的配置,无法仅依靠default.yaml直接运行程序。运行代码前,用户需要在config/目录下定义已经在LibContinual中实现了的方法的配置。

考虑到持续方法有一些基本参数例如image_sie, epoch或者device id,这样的参数是经常需要改动的。LibContinual支持在命令行中对一些简单的配置进行更改而不需要修改yaml文件。同样的,在训练和测试过程中,很多不同的持续学习方法的参数是相同的。为了简洁起见,我们将这些相同的参数包装到了一起,放到了config/headers目录下,这样就能够通过导入的方式简洁地编写自定义方法的yaml文件。

以下是config/headers目录下文件的构成。

  • data.yaml:定义了训练所使用的数据的相关配置。
  • device.yaml:定义了训练所使用的GPU的相关配置。
  • model.yaml:定义了模型训练的相关配置。
  • optimizer.yaml:定义了训练所使用的优化器的相关配置。

LibContinual中配置文件的设置

以下详细介绍配置文件中每部分代表的信息以及如何编写,以下将以bic方法的配置给出示例。

数据设置

  • data_root:数据集存放的路径。

  • image_size:输入图像的尺寸。

  • pin_momery:是否使用内存加速读取。

  • augment:是否使用数据增强。

  • init_cls_num: 初始类别数量。

  • inc_cls_num: 增量类别数量。

  • task_num: 任务数量。

  • works:数据加载和预处理的工作线程数量。

    data_root: /data/cifar100
    image_size: 84
    pin_memory: False
    augment: True
    init_cls_num: 20
    inc_cls_num: 20
    task_num: 5
    works: 8 
    

模型设置

  • backbone:方法所使用的backbone信息。

    • name:使用的backbone的名称,需要与LibContinual中实现的backbone的大小写一致。
    • kwargsbackbone初始化时用到的参数,必须保持名称与代码中的名称一致。
      • num_classes:类别数量。
      • args:其他项参数,例如所使用的数据集dataset
    backbone:
        name: resnet18
        kwargs:
            num_classes: 100
              args: 
                  dataset: cifar100
    
  • classifier:方法所使用的方法信息。

    • name:使用的方法的名称,需要与LibContinual中实现的方法的名称一致。
  • kwargs:方法初始化时用到的参数,必须保持名称与代码中的名称一致。

    • feat_dim:维度设定。
    classifier:
        name: bic
        kwargs:
            feat_dim: 512
    

训练设置

  • epoch:训练的epoch数。

  • test_epoch: 测试的epoch数。

  • val_per_epoch: 验证阶段的每一次的epoch数。

  • stage2_epoch: 策略2的epoch数。

  • batch_size: 训练的批次尺寸。

    epoch: 50
    test_epoch: 5
    val_per_epoch: 5
    stage2_epoch: 100
    batch_size: 128
    

优化器设置

  • optimizer:训练阶段使用的优化器信息。

    • name:优化器名称,当前仅支持Pytorch提供的所有优化器。
    • kwargs:传入优化器的参数,名称需要与Pytorch优化器所需要的参数名称相同。
    • other:当前仅支持单独指定方法中的每一部分所使用的学习率,名称需要与方法中所使用的变量名相同。
    optimizer:
        name: SGD
        kwargs:
            lr: 0.01
            weight_decay: 2e-4
            momentum: 0.9
    
  • lr_scheduler:训练时使用的学习率调整策略,当前仅支持Pytorch提供的所有学习率调整策略。

    • name:学习率调整策略名称。
    • kwargs:其他Pytorch学习率调整策略所需要的参数。
    lr_scheduler:
      name: MultiStepLR
      kwargs:
        gamma: 0.1
        milestones: [25, 50]
    

硬件设置

  • device_ids:训练可以用到的gpu的编号,与nvidia-smi命令显示的编号相同。

  • n_gpu:训练使用并行训练的gpu个数,如果仅有1个GPU的话,则不适用并行训练。

  • seed:训练时numpytorchcuda使用的种子点。

  • deterministic:是否开启torch.backend.cudnn.benchmark以及torch.backend.cudnn.deterministic以及是否使训练随机种子确定。

    device_ids: 0,1,2,3,4,5,6,7
    n_gpu: 4
    seed: 1993
    deterministic: False