模型压缩,模型减枝,tf.nn.zero_fraction,统计0的比例,等。

     我们刚接到一个项目时,一开始并不是如何设计模型,而是去先跑一个现有的模型,看在项目需求在现有模型下面效果怎么样。当现有模型效果不错需要深入挖掘时,仅仅时跑现有模型是不够的,比如,如果你要在嵌入式里面去实现,目前大多数模型大小和计算量都不满足,这就产生了模型压缩和剪枝。

     模型压缩常做的是将模型从float变为int8,这不仅带来了模型参数空间上的减少,同时,是的很多较小的参数直接变为0,是的模型压缩可以变得比较小(一般是缩小到原来的20),但是这种方式下,压缩后的模型不一定能work,还得调整。

    模型剪枝,就是觉得算法实现这个任务or功能,没必要使用那么大的模型,但是目前深度学习的模型对我们来说还是个“黑盒子”,怎样剪枝合适?这就可以使用tf.nn.zero_fraction统计某个值的0的比例,这个tf.nn.zero_fraction计算出来的值越大,0的比例越高,说明这层网络种起作用的神经元个数越少。通过这个统计,我们是否可以这样采取策略:

    1、网络层数不变,减少该层网络的卷积核个数,训练看效果。

    2、我们将值为0占比高的网络砍掉,再训练查看效果。如果效果好,ok继续压缩,如果效果差,分析原因:a、是否是网络减少了一层,导致感受野变小了?可以尝试增大剩下网络的感受野。b、是否是模型复杂度不够了?可以尝试增加剩下网络卷积核和特征图个数,适当弥补砍掉网络带来的复杂度降低。

当然,还有其他很多模型压缩,模型减枝的技巧方式,比如使用mobile net代替传统卷积神经网络等。

    

原文地址:https://www.cnblogs.com/YouXiangLiThon/p/9565262.html