Learning Effcient Convolutional Networks through Network Slimming
已复现:https://github.com/onion-rain/MCTS:
python slimmer.py --arch vgg19_bn_cifar --gpu 4 --resume checkpoints/sparsity/cifar10_vgg19_bn_cifar_sr_best.pth.tar --slim 0.7
- 首先train with channel sparsity regularization,训练修改损失函数为:
- 在原损失函数基础上增加一个L1正则来限制γ的大小,
- γ为BN层的scaling factor
- g()为sparsity-induced penalty,这里取g(s) = |s|
- 注:
- BN层转换方程:
- Zin与Zout为BN层输入和输出,B为本次输入batch,μ为均值,σ为标准差,β为shift factor
- λ通常取1e-4
- 训练完按照预先设置的剪枝比例,把γ接近0的BN层连接的层剪掉
- 流程图:
- 至于那种有跨层连接的网络,比如resnet和densenet,在每个bottleneck或baseneck分出shortcut之后,residual那条支路上最开始加一个bn层再加一个channel select层,这样训练sparsity训练bn层然后控制channel select来将bn层scaling参数小的通道删掉