【pocketflow系列四】学习模块

一、通道剪枝

官网地址:https://pocketflow.github.io/cp_learner/

1、介绍

剪枝:是一种既能压缩模型大小,又能加速的方法。2017年提出的通道剪枝,通过剪掉一定比例的卷积层的通道。2018年提出的通道剪枝对2017年的算法进行了提升,通过强化学习的方式得到更优的压缩比例。另外,开发者可以使用蒸馏以及group tuning提高压缩后的模型精度。Group tuning组调整的意思是,设定一组层,然后依次对每个组进行剪枝和fine-tuning微调。比如,我们将3个层作为一组。则我们先对3个层进行剪枝,然后我们微调整个网络。再依次进行下一组3个层的剪枝,再微调整个网络。蒸馏和group tuning被实验证明,在大部分场景下,能够提高经过一定压缩的模型精度。

 

2、可选的剪枝方法

代码路径:./learners/channel_pruning

剪枝:--learners to channel

剪枝有3种类型可以设置:cp_prune_option

(1)uniform通道剪枝

类型设置:--cp_prune_option=uniform

比例设置:--cp_uniform_preserve_ratio=0.5

 

(2)list通道剪枝

通过list的方式设定每个层的剪枝比例

类型设置:--cp_prune_option=list

参数设置:ratio.list

比如:

./ratio.list

1.0, 0.1875, 0.1875, 0.1875, 0.1875, 0.1875, 0.1875, 0.1875, 1.0, 0.25, 1.0, 0.25, 0.21875, 0.21875, 0.21875, 1.0, 0.5625, 1.0, 0.546875, 0.546875, 0.546875, 1 

(3)自动通道剪枝

类型设置:--cp_prune_option=auto 

 

3、通道剪枝参数

通道剪枝分两步:Lasso算法进行通道选择;线性回归进行特征map。

这两步种,可以通过特征map的采样来减少计算量。设置参数:--cp_nb_points_per_layer 。

对于一些有很多黑色区域的数据集,可以设置batch:cp_nb_batches。

还有一个针对移动端的设置:--cp_quadruple。

 

4、蒸馏

蒸馏是一种在大多数场景中都能提高压缩模型精度的方法。

设置参数:--enbl_dst=True

 

5、group tuning

能够很好的提升压缩模型的性能。

使能:--cp_finetune=True

group:-cp_list_group

迭代次数:cp_nb_iters_ft_ratio

学习率:cp_lrn_rate_ft

 

二、通道剪枝2017

三、通道剪枝2018

四、权重稀疏

 

五、uniform权重量化

官方地址:https://pocketflow.github.io/uq_learner/#uniform-quantization

 

1、介绍

均匀量化被广泛应用在模型压缩和加速。原始模型权重都是32bit浮点数。通过均匀量化,4bit/8bit被用来作为权重。对于kbit量化,节省的空间为:32/k。比如,对于8bit量化,模型大小可以压缩4倍。

 

目前有两种均匀量化可以选择:

 

 

六、non-uniform权重量化

 

七、蒸馏

官网地址:https://pocketflow.github.io/distillation/

 

八、多GPU训练

官网地址:https://pocketflow.github.io/multi_gpu_training/

猜你喜欢

转载自blog.csdn.net/weixin_41770169/article/details/90042522