模型壓縮工具Distiller 剪枝

2021-09-28 15:54:35 字數 3615 閱讀 3843

distiller自帶一些測試實例如resnet56+cifar-10,下面是對resnet56+cifar-10的測試:

version: 1                                        # 版本

pruners:

filter_pruner_60: # 後面的60表示剪掉60%的filters,如[16, 16, 3, 3]剪掉之後就是[7, 16, 3, 3]

class: 'l1rankedstructureparameterpruner' # 表示所使用的演算法,這裡使用l1rank

group_type: filters # 表示剪下型別,一般兩種filters/channel

desired_sparsity: 0.6 # 剪掉60%的filters

weights: [ # 下面是一些具體的需要剪下的權值

module.layer1.0.conv1.weight,

module.layer1.1.conv1.weight,

module.layer1.2.conv1.weight,

module.layer1.3.conv1.weight,

module.layer1.4.conv1.weight,

module.layer1.5.conv1.weight,

module.layer1.6.conv1.weight,

module.layer1.7.conv1.weight,

module.layer1.8.conv1.weight]

filter_pruner_50: # 同上

class: 'l1rankedstructureparameterpruner'

group_type: filters

desired_sparsity: 0.5

weights: [

module.layer2.1.conv1.weight,

module.layer2.2.conv1.weight,

module.layer2.3.conv1.weight,

module.layer2.4.conv1.weight,

module.layer2.6.conv1.weight,

module.layer2.7.conv1.weight]

filter_pruner_10: # 同上

class: 'l1rankedstructureparameterpruner'

group_type: filters

desired_sparsity: 0.1

weights: [module.layer3.1.conv1.weight]

filter_pruner_30: # 同上

class: 'l1rankedstructureparameterpruner'

group_type: filters

desired_sparsity: 0.3

weights: [

module.layer3.2.conv1.weight,

module.layer3.3.conv1.weight,

module.layer3.5.conv1.weight,

module.layer3.6.conv1.weight,

module.layer3.7.conv1.weight,

module.layer3.8.conv1.weight]

extensions:

net_thinner:

class: 'filterremover'

thinning_func_str: remove_filters

arch: 'resnet56_cifar' # 使用的網路

dataset: 'cifar10' # 資料集

lr_schedulers:

exp_finetuning_lr:

class: exponentiallr

gamma: 0.95

policies:

- pruner:

instance_name: filter_pruner_60

epochs: [0]

- pruner:

instance_name: filter_pruner_50

epochs: [0]

- pruner:

instance_name: filter_pruner_30

epochs: [0]

- pruner:

instance_name: filter_pruner_10

epochs: [0]

- extension:

instance_name: net_thinner

epochs: [0]

- lr_scheduler:

instance_name: exp_finetuning_lr

starting_epoch: 10

ending_epoch: 300

frequency: 1

剪枝

找到compress_classifier.py檔案,如下:

$python3 compress_classifier.py -a=resnet56_cifar -p=50 ../../../data.cifar10 --epochs=70 --lr=0.1 --compress=../pruning_filters_for_efficient_convnets/resnet56_cifar_filter_rank.yaml --resume-from=checkpoint.resnet56_cifar_baseline.pth.tar --reset-optimizer --vs=0
引數解釋: -a 表示模型名稱(這裡是工具自帶的模型名稱,其他的如resnet32_cifar, resnet44_cifar, resnet56_cifar等等 cifar的模型**檔案位於distiller/models/cifar10/resnet_cifar.py)

-p表示每隔多少列印一次

../../../data.cifar10是資料集路徑

--epochs 表示剪枝過後繼續訓練次數

--compress 表示所用的『策略』(compress_scheduler),一般是yaml檔案的路徑

--resume-from 表示儲存的模型的路徑

--reset-optimizer 如果設定此引數,那麼start_epoch=0,將optimizer重置為sgd, 學習綠設定為傳入的學習率

--vs validation-split

執行時會對模型進行剪枝,然後在測試集上測試,列印出top1和top5以及loss,執行結束後量化模型會儲存在logs下。

zip壓縮工具

yum install y zip yum install y unzip命令語法 zip 選項 引數 命令描述 zip命令可以用來解壓縮檔案,或者對檔案進行打包操作,它可以壓縮目錄或檔案,壓縮目錄時,需要指定目錄下的檔案。zip是個使用廣泛的壓縮程式,檔案經它壓縮後會另外產生具有 zip 副檔名的...

打包壓縮工具

1 建立歸檔,保留許可權 tar cpvf path file.tar file.root centos7 test tar cvfp f.tar f f1.txt 對多個檔案進行打包 f2.txt f3.txt 壓縮工具僅能支援單個檔案壓縮,因此配合打包工具實現打包壓縮 2 追加檔案至歸檔 不支援...

Linux壓縮工具

gzip,gunzip,zcat compress or expand files gzip option filenames d 解壓縮,相當於gunzip 指定壓縮比 1 9 預設為6,數字越大壓縮比越大,消耗的cpu越多,壓縮後的空間越小 c 壓縮後標準輸出,且保留原始檔 所以要跟 重定向輸出...