基於caffe模型的模型裁剪和量化


      原論文《 Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman coding》https://arxiv.org/abs/1510.00149;

摘要:

            通過剪枝、權重共享和權重量化以及哈夫曼編碼等方法,作者在AlexNet和VGG-16 等模型上使用這些方法,可以在沒有精度損失的情況下,把alexnet模型參數壓縮35倍,把VGG模型參數壓縮49倍。

1、剪枝就是去掉一些不必要的網絡權重,只保留對網絡重要的權重參數

2、權值共享就是多個神經元的鏈接采用同一個權值,權重量化就是用更少的比特來標志一個權值

3、對權值進行哈夫曼編碼減少冗余

方法:

2.1 剪枝

剪枝生成稀疏矩陣:設置一個閾值,把小於閾值的鏈接設置為0,后續不在參與訓練,然后對網絡進行訓練,得到一個稀疏的權值矩陣。韓松論文,其余的:https://blog.csdn.net/weixin_36474809/article/details/80643784

2.2 代碼實現:

     cafffe的代碼實現: https://github.com/may0324/DeepCompression-caffe;韓松的論文實現結果:https://github.com/songhan/Deep-Compression-AlexNet。定義了mask變量,對權重比較小的值,裁剪后設置mask位,后續迭代運算時不對裁剪的權重進行diff計算。

代碼中有計算mask 的函數。對權重取絕對值,然后排序,排序后根據設置的裁剪系數,確定需要裁剪權重的閾值。

代碼只對卷機層和全連接層做了裁剪處理,卷積層和全連接層的代碼分別實現在類 CmpConvolutionLayer和CmpInnerProductLayer ;

其中類CmpConvolutionLayer的實現如下:

前向計算計算時,會先和maskdata 做計算;被裁剪的權重不在參與計算,

后向梯度更新的時候,也不在參與梯度更新,需要更新的diff也會與mask計算;

 

全連接層的計算類似。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM