File size: 5,050 Bytes
5fee096 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | # 编写`.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`:数据加载和预处理的工作线程数量。
```yaml
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`。
```yaml
backbone:
name: resnet18
kwargs:
num_classes: 100
args:
dataset: cifar100
```
+ `classifier`:方法所使用的方法信息。
+ `name`:使用的方法的名称,需要与LibContinual中实现的方法的名称一致。
+ `kwargs`:方法初始化时用到的参数,必须保持名称与代码中的名称一致。
+ `feat_dim`:维度设定。
```yaml
classifier:
name: bic
kwargs:
feat_dim: 512
```
### 训练设置
+ `epoch`:训练的`epoch`数。
+ `test_epoch`: 测试的`epoch`数。
+ `val_per_epoch`: 验证阶段的每一次的`epoch`数。
+ `stage2_epoch`: 策略2的`epoch`数。
+ `batch_size`: 训练的批次尺寸。
```yaml
epoch: 50
test_epoch: 5
val_per_epoch: 5
stage2_epoch: 100
batch_size: 128
```
### 优化器设置
+ `optimizer`:训练阶段使用的优化器信息。
+ `name`:优化器名称,当前仅支持`Pytorch`提供的所有优化器。
+ `kwargs`:传入优化器的参数,名称需要与Pytorch优化器所需要的参数名称相同。
+ `other`:当前仅支持单独指定方法中的每一部分所使用的学习率,名称需要与方法中所使用的变量名相同。
```yaml
optimizer:
name: SGD
kwargs:
lr: 0.01
weight_decay: 2e-4
momentum: 0.9
```
+ `lr_scheduler`:训练时使用的学习率调整策略,当前仅支持`Pytorch`提供的所有学习率调整策略。
+ `name`:学习率调整策略名称。
+ `kwargs`:其他`Pytorch`学习率调整策略所需要的参数。
```yaml
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`以及是否使训练随机种子确定。
```yaml
device_ids: 0,1,2,3,4,5,6,7
n_gpu: 4
seed: 1993
deterministic: False
```
|