Open xjcvip007 opened 5 years ago
mask实现并不影响pruning和fine-tuning的过程
感谢你的回答,可能我说的不是很清楚,举个例子,在mask_impl的实现中,假如现在对resnet进行剪枝,先用main_mask进行bn层稀疏化的训练;之后利用prune_mask进行剪枝,这步中剪枝后的模型权重保存了resnet的cfg变量;第三步重新用main_mask对上一步剪枝后的权重进行finetune,由此有三个小问题: (1)但是我看main_mask.py中并没有用到第二步的cfg变量来对剪枝后模型进行重构(load的时候没有使用cfg变量); (2)第二步保存的权重中为0的部分并没有进行剪枝吧,还是保存了下来,这样如何在第三步中载入剪枝后的模型呢? (3)剪枝后其实只是权重置0,最后存储下来的模型权重好像并没有太大变化吧? 期待你的回答,谢谢~
(1) 不需要cfg,因为mask的信息包含了cfg (2) mask模型的意义就在于没有实质的剪枝发生,模型的大小仍然保持一样。只是inference的时候mask模型等价于prune后的模型 (3) 是的
这里mask版的实现作者提到能解决整个层被裁剪的问题。若模型中间某整个层被裁剪了,即整个层对应BN层的gamma都被置0,那么在retrain过程中,pruned model应该无法有效收敛呀,因为在被裁整层之前梯度都被截断了,都是0。这块不知道是不是我理解的问题?
你好,感谢你的复现工作,有个小问题,在你mask的实现方法中,你对小于阈值的BN层部分进行了mask,但是并没有真正将其连接打断,这是否并不会导致最终模型权重的减小?期待你的解答