yolov5prune
yolov5prune copied to clipboard
剪枝后拿剪枝的权重稀疏训练会报错
作者你好,很感谢你的代码,代码逻辑很严谨,经过阅读代码我找到了我之前的问题所在。但是我又遇到了新的问题,当我想稀疏训练-》剪枝-》微调-》稀疏训练,反复迭代这个过程会报错,请问,剪枝之后的模型可以继续拿来做稀疏训练吗
剪枝后可以微调恢复精度然后继续稀疏训练。 稀疏训练可以在finetune_pruned.py基础上修改,只需要参考train_sparity.py中增加对bn层w的约束就行。 这里你的问题是剪枝后的模型不在规整,所以模型加载需要 ModelPruned 而不是Model,参考: https://github.com/midasklr/yolov5prune/blob/5d5575f3573111d3643c8af236dc59e03089fb59/finetune_pruned.py#L92
非常感谢作者的指导,我已经可以重新剪枝训练了。但是我对稀疏公式和代码的对应关系感到迷惑,反向传播公式是: 𝐿′=∑𝑙′+𝜆∑𝑔′(𝛾)=∑𝑙′+𝜆∑|𝛾|′=∑𝑙′+𝜆∑𝛾∗𝑠𝑖𝑔𝑛(𝛾),代码里的梯度计算是: m.weight.grad.data.add_(srtmp * torch.sign(m.weight.data))。 对比公式,代码里少了一项Y权值,这样做的原因是什么啊,这里我感到困惑,希望作者帮忙指点一下,感谢。
这里srtmp 就是Y权值,可以看看srtmp定义,是逐步衰减的
想问下你进行第二轮稀疏训练时,训练的map和第一轮微调后的map相差大吗,我的相差6-7个点
@dean1314 请问二次剪枝的效果好吗?我第一次剪枝(采用方案一,剪枝比0.7),微调恢复训练后还是掉了1~2个点,请问还建议继续二次剪枝吗?