模型压缩(2)——模型剪枝

本文介绍了如何使用PyTorch内置的prune工具和微软的NNI库进行深度学习模型剪枝,包括具体操作步骤和剪枝后的模型精度及大小比较。剪枝后,模型大小显著减小,但未经微调的剪枝模型精度大幅下降,经过微调后能部分恢复精度。
摘要由CSDN通过智能技术生成

1. 使用pytorch的prune工具进行剪枝

使用pytorch自带的prune函数进行剪枝,剪枝后被剪掉的参数为0,应将为0的参数剔除运算,否则为虚假的剪枝,速度甚至更慢

参考代码如下,model为训练后的模型,经循环得到剪枝模型,需微调回复精度,感觉没太大作用,不做具体演示。

from torch.nn.utils import prune
# 使用named_modules可以得到每一个最小层,使用named_children仅能得到较大的块
for n,module in model.named_modules():
    # 对线性层剪枝
    if isinstance(module,torch.nn.Linear):
        # 可以选择多种裁剪方式,此处选择了随机裁剪;
        # 其中name代表是对哪个参数进行裁剪,如果对偏置进行裁剪则该参数值为'bias';
        # amount是指裁剪比例
        prune.random_unstructured(module,name = 'weight', amount = 0.3)
        # 此时model.weight被替换为model.weight_orig和model.weight_mask 
        # 使用list(module.named_buffers())可以查看
        prune.remove(module,'weight')

2. 使用微软的nni工具进行剪枝

需要安装nni库,从nni.algorithms.compression.pytorch.pruning中选择想要的剪枝方法

教程链接:Pruning — An open source AutoML toolkit for neural architecture search, model compression and hyper-parameter tuning (NNI v2.6.1)https://nni.readthedocs.io/en/stable/Compression/pruning.html

演示demo:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值