神经网络修剪机制

时间:2018-12-29 17:06:55

标签: conv-neural-network pytorch torch activation-function pruning

我正在研究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 个答案:

答案 0 :(得分:0)

  

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

     

大毕业证明该过滤器对不同类型的   输入

     

具有大激活度和大grad的过滤器很重要,不能删除

     

总和是因为只能删除整个过滤器

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

请纠正我。