[剪枝]Channel Pruning for Accelerating Very Deep Neural Networks

Channel Pruning for Accelerating Very Deep Neural Networks

 

 

已复现:https://github.com/onion-rain/MCTS:

python thinet_exp.py --arch vgg16_bn_cifar --gpu 5 --resume checkpoints/baseline/cifar10_vgg16_bn_cifar_best.pth.tar --prune-percent 0.3 --lp-norm 2  --method lasso

 

  • 上图为两层卷积操作,通道剪枝是要将B减掉一些通道,即减掉第一层卷积的一些卷积核(虚线卷积),同第二层卷积W也要去掉相应通道(W中3个最小立方体块)

 

  • 即寻找合适的β和w使得原C与B经过剪枝后得到的C'最相似,即使得下式最小

  • β就是个向量,非0即1,1表示保留该通道,0表示删除该通道,β的L0范数就是β中非零元素个数要小于c(B的原通道数),也就是要减掉一些通道嘛
  • F范数就是矩阵各元素绝对值平方的总和开方
  • 将β的约束放到公式中,并且由于最小化L0范数是NP难题,遂用L1范数代替之:
    • c是输入通道数,n是输出通道数
    • W ==>n * c * kh * kw,就是卷积核
    • X ==>N * c * kh * kw, 就是输入特征图。
      • N原文为the number of samples,我的理解应该是每个特征图上卷积核卷积的次数,也就是新的特征图的height*wigth
    • λ是惩罚系数,通过增大λ就可以最小化β
    • bias term不在公式内
    • wi的F范数等于1是用来约束w的唯一解,也就是要求所有卷积核的所有weight的F范数等于1
  • 然后分两步反复迭代:
    • 先固定W优化β:

 

  • Z=XWT
  • 再固定β优化W
  • 优化过程中λ逐渐增大,每次增大λ我们就迭代上面两步使得β的L0范数稳定
  • 直到满足β的约束β的L0范数小于c,停止增大λ
  • 实际操作中我们发现1,2迭代太花费时间,于是我们先迭代步骤1使得β的L0范数小于c,再迭代步骤2一次,得到最终结果
  • 对于多分支网络:
  • 就是在分之后,residual分支前面加了个通道选择器
  • 优化目标是最后residual分支和shortcut分支合并之后得到的特征图尽可能保持不变,即优化目标由Y2变成了Y1-Y'1+Y2

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值