File size: 3,801 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


配置文件的路径如下:

````
config/*
````

### LibContinual配置文件构成

LibContinual配置文件使用`yaml`文件格式。我们预定义的配置文件位于`core/config/default.yaml`,用户可以将自定义的配置项放入`config/`目录下,并且保存为`.yaml`格式。

虽然大多数配置已经在`default.yaml`提前编写好了,但是您不能直接使用`default.yaml`配置来运行框架,需要预先定义所运行方法对应的配置文件。可以参考下面的参数说明编写你自己的配置文件。

在`config/headers`文件夹中,包含了以下文件:

- `data.yaml`:数据相关的配置定义在此文件中
- `device.yaml`:与GPU相关的配置项定义在此文件中
- `model.yaml`:与模型相关的配置定义此文件中
- `optimizer.yaml`:与优化器相关的配置定义在此文件中

### LibContinual配置文件的设置

#### 数据设置

- `data_root`:数据集的存储路径
- `image_size`:输入图片的大小
- `pin_momery`:是否使用内存来加速读取
- `workers`:并行读取数据进程的数量

```yaml
data_root: /data/cifar10/
image_size: 32
```

#### 模型设置

`backbone`:该方法中使用的骨干网络信息

- `name`: 骨干网络的名称,需要与LibContinual框架中的实现所对应

- `kwargs`:骨干网络所需要的参数,需要与代码中的命名一致

  - `num_classes`:模型需要的分类总数
  - `args`:需要的其他参数
    - `dataset`:所使用的数据集,不同数据集的骨干网络实现细节有所不同

  ```yaml
  backbone:
    name: resnet18
    kwargs:
      num_classes: 10
      args: 
        dataset: cifar10
  ```

`classifier`:方法中使用的分类器信息

- `name`:分类器的名称,需要与LibContinual中的方法实现保持一致

- `kwargs`:分类器的初始化参数,需要与代码实现的名称保持一致

  ```yaml
  classifier:
    name: PASS
    kwargs:
      num_class: 100
      feat_dim: 512
      # 下面是方法相关的超参数
      feat_KD: 10.0
      proto_aug: 10.0
      temp : 0.1
  ```

#### 训练设置

- `init_cls_num`:第一个任务的训练类别数
- `inc_cls_num`:随后增量任务的训练类别数
- `task_num`:任务总数
- `init_epoch`:第一个任务上的训练轮数
- `epoch`:增量任务上的训练轮数
- `val_per_epoch`:每过多少轮训练在测试集上测试性能
- `batch_size`:训练时的批次大小
- `warm_up`:训练之前的预热轮次

```yaml
warmup: 0
init_cls_num: 50
inc_cls_num: 10
task_num: 6
batch_size: 64
init_epoch: 100
epoch: 100
val_per_epoch: 10
```

#### 优化器设置

- `optimizer`:训练中使用的优化器信息
  - `name`:优化器的名称,只支持`Pytorch`内置的优化器
  - `kwargs`:该优化器使用的参数,参数名称需要与Pytorch中优化器参数的参数名称相同,例如
    - `lr`:优化器学习率
    - `weight_decay`:权重衰减

```yaml
optimizer:
  name: Adam
  kwargs:
    lr: 0.001
    weight_decay: 0.0002
```

`lr_scheduler`:训练中使用的学习率调整策略,只支持`Pytorch`内置的优化器调整策略

- `name`:学习率调整策略的名称
- `kwargs`:学习率调整策略的参数,注意不同的学习率调整策略会有不同的参数

```yaml
lr_scheduler:
  name: StepLR
  kwargs:
    step_size: 45
    gamma: 0.1
```

#### 硬件设置

- `device_ids`:所使用的GPU编号
- `n_gpu`:训练中使用的并行GPU数量, 如果是`1`, 表示不使用并行训练
- `deterministic`:是否开启 `torch.backend.cudnn.benchmark``torch.backend.cudnn.deterministic` 
- `seed`:在 `numpy``torch``cuda`中使用的随机种子

```yaml
device_ids: 3
n_gpu: 1
seed: 0
deterministic: False
```