Pruning 例子
LeNet( (conv1): Conv2d(1, 6, kernel_size=(3, 3), stride=(1, 1)) (conv2): Conv2d(6, 16, kernel_size=(3, 3), stride=(1, 1)) (fc1): Linear(in_features=400, out_features=120, bias=True) (fc2): Linear(in_features=120, out_features=84, bias=True) (fc3): Linear(in_features=84, out_features=10, bias=True) ) 在pytorch里面, prune通过对权重进行掩码来完成. 这个如何理解? 首先, 我们打印一下原始的conv1的权重看看: module = model.conv1 print(list(module.named_modules())) print(list(module.named_buffers())) print(list(module.named_parameters())) 这里列举了后面可能会用到三个方法, 这个可以查看当前的module到底是一个啥情况。 着重观察 named_parameters 因为参数都保存在这里, 打印完了之后可以看到: [('weight', Parameter containing: tensor([[[[-0.2312, 0.2133, -0.1313], [-0.2980, -0.1838, -0.2902], [-0.3006, 0.1338, -0.0980]]], [[[-0.1239, 0.1060, 0.3271], [-0.0301, -0.0245, 0.0493], [-0.0160, 0.0397, -0.1242]]]], device='cuda:0', requires_grad=True)), ('bias', Parameter containing: tensor([-0.2593, -0.0520, 0.0303, 0.0382, -0.0468, -0.1053], device='cuda:0', requires_grad=True))] 它有一个weight和一个bias, 这没错, 合乎常理. 我们甚至可以看看weights的尺寸是多少. ...