结构化剪枝,顾名思义,即“有结构”的进行剪枝,对于全连接层权重,一般是剪去整行或者整列,事实上相当于减去了一个神经元,而对于卷积层,结构化剪枝可以是减去某个卷积核(输出通道上剪枝),也可以是剪去某个输入通道。等等
非结构化剪枝,则是对单一权重进行修剪,并不要求整行整列的修剪,好处是更能保持原先的精确度,因为结构化剪枝很容易剪去那些比较重要的权重。当然,非结构化剪枝也有其不便之处,因为非结构化剪枝并没有改变权重张量的”形状”,如果不采用特殊的压缩存储算法(如CSR、CSC),那么事实上模型的大小并没有发生改变,而是被那些分布无规则的0元素所占据。
在pytorch中,剪枝非常方便,我们可以通过语句
来实现剪枝,下面我用pytorch进行了一个简单的剪枝(非结构化)实验。
采用l1_unstructured剪枝:
结构化剪枝,修剪第0维,采用l2范数:
对多组参数进行剪枝:
全局剪枝:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/178547.html