markdown PocketFlow压缩框架

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown PocketFlow压缩框架相关的知识,希望对你有一定的参考价值。

# 序言
框架由学习器和超参数优化器组成。
![PocketFlow压缩流程](https://pocketflow.github.io/pics/framework_design.png "PocketFlow框架")


# 学习器

|压缩方法|论文|
|:--:|:--:|
|ChannelPrunedLearner|lasso回归通道选择[Channel Pruning for Accelerating Very Deep Neural Networks](https://arxiv.org/abs/1707.06168)   残差结构中add/element sum的输入算子都不能裁剪通道,而通道较多的正是这两个算子|
|DisChnPrunedLearner|辨别感知通道裁剪[Discrimination-aware Channel Pruning for Deep Neural Networks](https://arxiv.org/abs/1810.11809)|
|WeightSparseLearner|基于动态裁剪策略的权值稀疏[To Prune, or Not to Prune: Exploring the Efficacy of Pruning for Model Compression](https://arxiv.org/abs/1710.01878)|
|UniformQuantLearner|权值量化`0,Nlevel-1` [Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference](https://arxiv.org/abs/1712.05877)|
|UniformQuantTFLearner|权值量化`0,Nlevel-1`[weight quantization with uniform reconstruction levels and TensorFlow APIs](https://www.tensorflow.org/api_docs/python/tf/quantization/quantize)|
|NonUniformQuantLearner|权值量化`Nlevel/2-1,Nlevel/2`[Deep Compression: Compressing Deep Neural Network with Pruning, Trained Quantization and Huffman Coding.](https://arxiv.org/abs/1510.00149)|
训练过程中,使用知识蒸馏来增强额外loss,用未压缩模型输出作为软标签。

#超参数优化器

[AMC:AMC: AutoML for Model Compression and Acceleration on Mobile Devices
](https://arxiv.org/abs/1802.03494)采用通道修剪和细粒度修剪的自动模型压缩的强化学习

超参数优化器工作流程:
每次迭代,超参数优化器选择超参数值组合,同时学习器生成候选模型进行快速迭代。然后评估候选模型以计算当前超参数设置的奖励函数reward。接着超参数优化器更新自己的模型来改进其对超参数空间的估计。最后多次迭代后获得最佳候选模型和对应的超参数设置,模型再用全数据finetune,来减少精度损失。

使用如下方法选定对于压缩模型重要的参数:


conda create --name PocketFlow python=3.6

source activate PocketFlow

pip install tensorflow-gpu==1.10.0

pip install numpy=1.14.5

conda install panda

conda install scikit-learn
cifar-10:使用binary版本

wget https://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz

下载完成后,解压到data目录

并在path.conf中设置路径:data_dir_local_cifar10 = /home/mars/hewu/tensorflow/PocketFlow/data/cifar-10-batches-bin

`在转pb和tflite模型时,如果是对input channel进行裁剪,那么如果conv的input channel来源于两个(或者更多)conv的Add操作,那么提速只能靠插入tf.gather操作,效果相对较差`
但是这样的input channel可以在训练过程中进行裁剪。

训练过程中可以裁剪,在转pb和tflite模型时,如果是对input channel进行裁剪,那么如果一个conv的输入来源于两个(或者更多)conv的Add操作,那么提速只能靠插入tf.gather操作,效果相对较差

Add操作后的卷积不能被裁剪



**训练过程中都是通过加mask的方式来约束部分channel全部为零的,并没有真正去除这部分channel,但是你在转pb或者tflite模型的时候需要考虑怎么去除这部分channel**

以上是关于markdown PocketFlow压缩框架的主要内容,如果未能解决你的问题,请参考以下文章

markdown PocketFlow导出及部署

markdown PocketFlow ChannelPrune代码详解

markdown JS框架的大小,只是缩小+缩小和压缩,(React,Angular 2,Vue,Ember)

markdown JS框架的大小,只是缩小+缩小和压缩,(React,Angular 2,Vue,Ember)

markdown [压缩/解压缩文件]压缩和解压缩.tar.gz文件#tar.gz #compress

markdown 图像压缩