编写.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的大小写一致。kwargs:backbone初始化时用到的参数,必须保持名称与代码中的名称一致。num_classes:类别数量。args:其他项参数,例如所使用的数据集dataset。
backbone: name: resnet18 kwargs: num_classes: 100 args: dataset: cifar100classifier:方法所使用的方法信息。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.9lr_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:训练时numpy,torch,cuda使用的种子点。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