神经网络剪枝机制

Posted

技术标签:

【中文标题】神经网络剪枝机制【英文标题】:Neural Network pruning mechanism 【发布时间】:2019-05-27 01:13:44 【问题描述】:

我正在处理 SqueezeNet pruning 。我对基于论文的pruning code 有一些疑问:PRUNING CONVOLUTIONAL NEURAL NETWORKS FOR RESOURCE EFFICIENT INFERENCE

def compute_rank(self, grad):
    activation_index = len(self.activations) - self.grad_index - 1
    activation = self.activations[activation_index]
    values = \
        torch.sum((activation * grad), dim = 0, keepdim=True).\
            sum(dim=2, keepdim=True).sum(dim=3, keepdim=True)[0, :, 0, 0].data

    values = \
        values / (activation.size(0) * activation.size(2) * activation.size(3))

    if activation_index not in self.filter_ranks:
        self.filter_ranks[activation_index] = \
            torch.FloatTensor(activation.size(1)).zero_().cuda()

    self.filter_ranks[activation_index] += values
    self.grad_index += 1

1) 为什么 'values' 只使用 in_height (2) 和 in_width (3) 的激活? in_channels (1) 呢?

2) 为什么 filter_ranks[activation_index] 只依赖于 in_channels (1) ?

3) 为什么激活乘以梯度?为什么要总结它们?

【问题讨论】:

【参考方案1】:

大激活表明此过滤器提供了重要的 功能。

大梯度表明这个过滤器对不同类型的 输入

具有大激活和大梯度的过滤器很重要,不会被删除

求和是因为只能去掉整个过滤器

这是对问题 3) 的有根据的猜测

如有错误请指正。

【讨论】:

以上是关于神经网络剪枝机制的主要内容,如果未能解决你的问题,请参考以下文章

神经网络剪枝

如何实现神经网络剪枝?

ADMM算法在神经网络模型剪枝方面的应用

实践Pytorch中的模型剪枝方法

深度学习网络模型压缩剪枝

第55篇剪枝算法:通过网络瘦身学习高效卷积网络