我正在研究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)为什么激活乘以梯度?为什么将它们归纳起来?
答案 0 :(得分:0)
大量激活表明此过滤器提供了重要的 功能。
大毕业证明该过滤器对不同类型的 输入
具有大激活度和大grad的过滤器很重要,不能删除
总和是因为只能删除整个过滤器
这是对问题3的有根据的猜测)
请纠正我。