Pruning_filters_for_efficient_convnets
Pruning_filters_for_efficient_convnets copied to clipboard
PyTorch implementation of "Pruning Filters For Efficient ConvNets"
Pruning Filters For Efficient ConvNets
Unofficial PyTorch implementation of pruning VGG on CIFAR-10 Data set
Reference: Pruning Filters For Efficient ConvNets, ICLR2017
Contact: Minseong Kim ([email protected])
Requirements
- torch (version: 1.2.0)
- torchvision (version: 0.4.0)
- Pillow (version: 6.1.0)
- matplotlib (version: 3.1.1)
- numpy (version: 1.16.5)
Usage
Arguments
-
--train-flag
: Train VGG on CIFAR Data set -
--save-path
: Path to save results, ex) trained_models/ -
--load-path
: Path to load checkpoint, add 'checkpoint.pht' withsave_path
, ex) trained_models/checkpoint.pth -
--resume-flag
: Resume the training from checkpoint loaded withload-path
-
--prune-flag
: Prune VGG -
--prune-layers
: List of target convolution layers for pruning, ex) conv1 conv2 -
--prune-channels
: List of number of channels for pruning theprune-layers
, ex) 4 14 -
--independent-prune-flag
: Prune multiple layers by independent strategy -
--retrain-flag
: Retrain the pruned nework -
--retrain-epoch
: Number of epoch for retraining pruned network -
--retrain-lr
: Number of epoch for retraining pruned network
Example Scripts
Train VGG on CIFAR-10 Data set
python main.py --train-flag --data-set CIFAR10 --vgg vgg16_bn --save-path ./trained_models/
Prune VGG by 'greedy strategy'
python main.py --prune-flag --load-path ./trained_models/check_point.pth --save-path ./trained_models/pruning_reuslts/ --prune-layers conv1 conv2 --prune-channels 1 1
Prune VGG by 'independent strategy'
python main.py --prune-flag --load-path ./trained_models/check_point.pth --save-path ./trained_models/pruning_reuslts/ --prune-layers conv1 conv2 --prune-channels 1 1 --independent-prune-flag
Retrain the pruned network
python main.py --prune-flag --load-path ./trained_models/check_point.pth --save-path ./trained_models/pruning_reuslts/ --prune-layers conv1 --prune-channels 1 --retrain-flag --retrain-epoch 20 --retrain-lr 0.001
Results
Absolute sum of filter weights for each layer of VGG-16 trained on CIFARA-10
- This graph was created in jupyter notebook. You can make the graph yourself.
Pruning filters with the lowest absolute weights sum and their corresponding test accuracies on CIFAR-10
- This graph was created in jupyter notebook. You can make the graph yourself.
Prune and retrain for each single layer of VGG-16 on CIFAR-10
- This graph was created in jupyter notebook. You can make the graph yourself.