rethinking-network-pruning icon indicating copy to clipboard operation
rethinking-network-pruning copied to clipboard

关于阻止已经置零的通道进行权重更新出现的问题

Open dlgyy opened this issue 5 years ago • 2 comments
trafficstars

我对您的工作感到很感兴趣,也在进行相关的研究,在实验的过程中,发现了一些有意思的现象,希望能与您进行讨论。 for m in model.modules(): if isinstance(m, nn.BatchNorm2d) or isinstance(m, nn.BatchNorm1d): mask = (m.weight.data != 0) mask = mask.float().cuda() m.weight.grad.data.mul_(mask) m.bias.grad.data.mul_(mask) 这部分代码是您用来阻止已经置零的权重进行进一步的梯度更新,这是很不错的想法,我也想在自己的工作中加入这部分代码,但是在pytorch中发现这部分代码并不能绝对的阻止权重的更新。虽然直观上他应该可以阻止参数的更新,但是实际上,那些已经置零的通道仍然会进行少量的更新。这样的一个直接的影响就是,应该失效的通道仍然在默默的发挥作用。不知道您是否注意到这种情况,期待您的回复。

dlgyy avatar Jan 05 '20 13:01 dlgyy

虽然直观上他应该可以阻止参数的更新

不是直观上,而是理论上那些已经置零的通道不会发挥作用。

Eric-mingjie avatar Jan 05 '20 18:01 Eric-mingjie

我有点不大清楚,是不是将已经置零的部分的梯度乘以0?这样子阻止它的更新?

kaijieshi7 avatar Feb 06 '20 09:02 kaijieshi7