Eric-mingjie / network-slimming

Network Slimming (Pytorch) (ICCV 2017)
MIT License
909 stars 214 forks source link

剪枝方面的一个小问题 #30

Open xjcvip007 opened 5 years ago

xjcvip007 commented 5 years ago

你好,感谢你的复现工作,有个小问题,在你mask的实现方法中,你对小于阈值的BN层部分进行了mask,但是并没有真正将其连接打断,这是否并不会导致最终模型权重的减小?期待你的解答

Eric-mingjie commented 5 years ago

mask实现并不影响pruning和fine-tuning的过程

xjcvip007 commented 4 years ago

感谢你的回答,可能我说的不是很清楚,举个例子,在mask_impl的实现中,假如现在对resnet进行剪枝,先用main_mask进行bn层稀疏化的训练;之后利用prune_mask进行剪枝,这步中剪枝后的模型权重保存了resnet的cfg变量;第三步重新用main_mask对上一步剪枝后的权重进行finetune,由此有三个小问题: (1)但是我看main_mask.py中并没有用到第二步的cfg变量来对剪枝后模型进行重构(load的时候没有使用cfg变量); (2)第二步保存的权重中为0的部分并没有进行剪枝吧,还是保存了下来,这样如何在第三步中载入剪枝后的模型呢? (3)剪枝后其实只是权重置0,最后存储下来的模型权重好像并没有太大变化吧? 期待你的回答,谢谢~

Eric-mingjie commented 4 years ago

(1) 不需要cfg,因为mask的信息包含了cfg (2) mask模型的意义就在于没有实质的剪枝发生,模型的大小仍然保持一样。只是inference的时候mask模型等价于prune后的模型 (3) 是的

zhaoxin111 commented 3 years ago

这里mask版的实现作者提到能解决整个层被裁剪的问题。若模型中间某整个层被裁剪了,即整个层对应BN层的gamma都被置0,那么在retrain过程中,pruned model应该无法有效收敛呀,因为在被裁整层之前梯度都被截断了,都是0。这块不知道是不是我理解的问题?