Training Techniques
在调试imagenet的时候试错代价实在是太大了,于是开始整理一下训练的一些技巧,来manual-ml
Summary
Dataset | Network | Acc. | (Source) | Epochs | BS | LR | Additional |
---|---|---|---|---|---|---|---|
ImageNet | ResNet18 | 69.5 | Pytorch example | 90 | 128 | 0.1-[30,60,90]x0.1 | / |
ImageNet | ResNet50 | 76.3 | Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour | 90 | 512 | 0.5-[30,60,80]x0.1 | / |
- Cifar10 Normalization:
(0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)
-
ImageNet Norm
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
- imagenet的pytorch标准training - res18约69%,能tune到70
- Lr Schedule (Batchsize 128) 0.1开始,decay by 0.1 every 30 epoch (overall 90 epoch)
- 有一些文章说明了batch size和lr是成正比的,需要等比增加,也有人认为是一个平方关系
- 同时momentum也可以根据batch size做对应的调整(1-momentum)反比于BN
- 有一些文章说明了batch size和lr是成正比的,需要等比增加,也有人认为是一个平方关系
- 标准dataset pre-processing
- Lr Schedule (Batchsize 128) 0.1开始,decay by 0.1 every 30 epoch (overall 90 epoch)
-
Test的时候每个epoch先acc大后acc小属于正常情况,这是因为test的时候没有shuffle
- Google Brain的一篇文章 (Related Work在最后,而且很有用)
- 表示batch size变大等价于lr decay
- 说明了lr decay等价于simulated annealing
- (然而这对于我们这种正常显存用户没用)
- 实验中有一些setting
- 一般training scheme (Cifar) 0.1开始(Batch size 128),decay by 5,0.9 momentum
- 对应的increased lr 0.5 (Batch size 512),momentum 0.98
- ResNet50 ImageNet 76.3% - [30,60,80] decay
- Original ResNet Paper
- 初始lr 0.1,decay by 0.1 when error plateus, 1e-4 weight decay, 0.9 momentum
- 有standard augmentation\
- 对Finetune,一般采用原先训练时候的最低lr
- Cifar10 (160/40)
- Finetune (90/20)
- Code
- CIFAR10: bs 64, epoch 160, [0.5160,0.75160]decay by 0.1 (finetune 1e-3)
- ImageNet: bs 256, epoch 90, every 30 epoch 0.1
Pruning
-
Pruning from scratch引用了Rethinking的一个结论,就是prune model需要更长的训练时间(Cifar10从一般的160epoch到300)
- Rethinking the Value Of Network Pruning
- FPGM code
- tune from pretrain用的lr是0.01
- imagenet跑100个epoch lr-0.1,decay10 every30,batchsize 256
- Cifar 300 epoch,bs-128,lr-0.1-[150,225]by0.1,
- LeGR
Tricks
- [Label-Smoothing])(https://arxiv.org/pdf/1906.02629.pdf)
- 发现了当teacher用label-smoothing来训练的时候,KD的效果没有之前好了
- smoothing encourages the representations of training examples from the same class to group in tight clusters
- 一般取0.1