pytorch基于卷积层通道剪枝的方法

原文:https://blog.csdn.net/yyqq7226741/article/details/78301231

本文基于文章:Pruning Convolutional Neural Networks for Resource Efficient Inference

https://arxiv.org/abs/1611.06440

下面以ResNet模型为例,讲解剪枝方法。

1  评估神经元(即通道)重要性

1.1 给模型中所有conv layer重新编号排次序;

1.2 计算每个conv layer所有通道rank值,并按通道归一化;

1.3 统计模型所有conv layer的通道数;

1.4 根据设置拟剪枝数量num(默认512),对所有convlayer通道rank值按从大到小排序,即确定rank值最小的num个通道,记录并返回它们的卷积层号和通道编号。

2  去除不重要神经元

2.1 根据拟剪枝列表(即卷积层号和通道编号),在训练好或加载的模型中去除;

2.2 如何去除,即把conv layer中按2.1中的列表,去除通道a,使a的前后通道相连,使第一卷积层输出通道数与第二层输入通道数相同,最后一个卷积层输出需与第一个全连层        输入通道数相同,这里全连层不计算rank值,拟剪枝的卷积层,需要conv继承操作;

注意:残差块中需要处理公式(1)F(X)=f(x)+x中f(x)与x不同维数情况;即在convlayer通道数改变后,添加residual = out即可。这个修改虽与公式(1)本意有些出入,但通过实验发现,在模型大小减少一半的情况下,仍可以较好地与原模型精度差在1%以内;

2.3 BatchNorm层通道数修改

当所有卷积层剪枝结束,依据邻近上一个卷积层输出通道数,通过BatchNorm层继承方式,它需修改成同样的通道数即可;

3 剪枝模型训练

全网参数更新,也可设置微调特定层参数更新

4 判断剪枝是否结束,若停止到下一步微调全网参数,否则重复1---3步骤;

5微调模型

使用与训练同一个数据库,也可用另外数据库,一般来说学习率要小于训练的1到2个数量级,微调结束后保存剪枝模型。

6 问题与讨论

6.1 具体模型需定制剪枝,需依照其模型生成文件,也包括forward函数,这要在计算Loss时使用;

6.2 测试阶段

需保证剪枝模型可forward操作,设置好Variable参数,即volatile=True,以免GPU资源泄露;

具体代码参见:https://github.com/eeric/channel_prune

pytorch基于卷积层通道剪枝的方法相关推荐

  1. PyTorch构建卷积层

    PyTorch构建卷积层 二维图像卷积 一. 二维卷积层的实现 1. 手动实现二维卷积层 2. Pytorch的卷积层API实现 二. 二维卷积层的填充和步幅 二维图像卷积 使用全连接层来处理图片时, ...

  2. 三分钟完全了解PyTorch中卷积层内部计算方法和权值初始值的来历,让你对模型有更深层次的理解

    首先先说明第一个答案,也就是PyTorch中卷积层的计算方法,其实这点很多人可能在书上已经看过图了,我只是用代码复现一遍 我们把所有变量都明确,首先是输入变量,我们设为2 * 2的全1矩阵,如下: 然 ...

  3. Pytorch中卷积层转向全连接层时,全连接层输入维度的确定

    Pytorch中卷积层转向全连接层时,全连接层输入维度的确定 一.代码法: 改变的AlexNet网络结构: AlexNet 二.公式法: 一.代码法: 改变的AlexNet网络结构: 输入维度为 ( ...

  4. pytorch中卷积层的使用方法

    1. 官方文档解释 如图为卷积层的参数汇总: 1.kernel_size: 指卷积核,一般情况下定义大小,这里我们只需要定义其size,而对于其中的参数会自动进行采样,会在训练过程中不断的进行调整. ...

  5. 卷积神经网络通道剪枝裁剪

    论文来自旷视科技2017年的论文Channel Pruning for Accelerating Very Deep Neural Network 论文地址:https://arxiv.org/abs ...

  6. 反卷积原理 + pytorch反卷积层参数output_padding

    一般我们会认为2维卷积的计算分为了以下3类: 1.full   2.same   3. valid 参考:https://cn.mathworks.com/help/matlab/ref/conv2. ...

  7. pytorch实现卷积层和BN层融合

    批归一化 数据的规范化也即(x−mean(x)/var(x))(x-mean(x)/var(x))(x−mean(x)/var(x)) 可以将数据的不同特征规范到均值为0,方差相同的标准正态分布,这就 ...

  8. PyTorch之—卷积层、激活层、BN

    文章目录 一.卷积层 二.池化层 三.归一化(BN) 一.卷积层 class torch.nn.Conv2d(in_channels, out_channels, kernel_size, strid ...

  9. Pytorch基于卷积神经网络的猫狗识别

    实验环境 Pytorch 1.4.0 conda 4.7.12 Jupyter Notebook 6.0.1 Python 3.7 数据集介绍 实验采用的猫和狗的图片来自 Kaggle 竞赛的一个赛题 ...

最新文章

  1. 表单实例(判断两次密码是否一致)
  2. [转]安卓开发startservice 和bindservice详解
  3. Python open读写文件实现脚本
  4. wireshark抓包过滤指定的字节数据
  5. js判断浏览器的类型。。。
  6. 问题 B: 调整表中元素顺序(线性表)
  7. WinDbg分析dump文件排查bug
  8. code blocks无法输出中文解决方法
  9. Hadoop经典面试题
  10. iOS13适配暗黑模式/夜间模式/深色模式/暗黑主题(DarkMode)
  11. 为ramda添加类型
  12. opengl——贴图
  13. 一、 Hbase特性 3v特性,Volume(量级) Varity(种类) Velocity(速度)
  14. 电脑手机硬件测试软件,手机硬件检测:Z-DeviceTest
  15. 学习Oracle Applications 相关文档
  16. pkusc2017 BingBingBangBang流水账
  17. 同志们,这个积分系统真不是个东西
  18. 铁路计算机联锁系统的设计方案,铁路信号计算机联锁系统的研究与设计
  19. Python大牛带你实现12306全自动抢票,学完后春运回家抢票无忧
  20. oracle evaluate,ORACLE VERSIONS 用法 | 学步园

热门文章

  1. mongodb数据库显示obj_MongoDB基础(三)—基本操作及管理 | leon的博客
  2. 计算机基础课教学心得,计算机基础教学心得
  3. 用极大似然法估计因子载荷矩阵_第7章-因子分析.ppt
  4. activiti-explorer mysql_Activiti explorer.war示例工程使用过程图解
  5. 工程数据计算机处理的方法有,第二章 CADCAM技术基础-工程数据的计算机处理2011.ppt...
  6. IDEA小技巧:Debug条件断点
  7. 皮一皮:据说这句话高情商的人说起来不一样...
  8. 遇到Request header is too large,你们是如何解决的?
  9. 哪家中国公司为Java 16贡献最多?Java第一大厂居然不是第一的...
  10. 每日一皮:所以重点到底是啥...