From 14b392cb3e5523c8677bcb78c92d5e155366d85a Mon Sep 17 00:00:00 2001 From: Lucas Liebenwein Date: Tue, 15 Nov 2022 23:16:44 -0800 Subject: [PATCH] Sparse Flow (Node) paper and v2.2.0 release --- README.md | 48 +- misc/imgs/node_overview.png | Bin 0 -> 140508 bytes misc/requirements.txt | 8 +- .../prune/{mbv2.yaml => mobilenet_v2.yaml} | 0 .../retrain/{mbv2.yaml => mobilenet_v2.yaml} | 0 paper/alds/script/results_viewer.py | 6 +- paper/node/README.md | 68 ++ paper/node/param/cnf/cifar_multiscale.yaml | 68 ++ paper/node/param/cnf/mnist_multiscale.yaml | 66 + paper/node/param/directories.yaml | 6 + .../tabular/bsds300/l3_hm20_f2_softplus.yaml | 61 + .../param/tabular/gas/l3_hm20_f5_tanh.yaml | 61 + .../tabular/hepmass/l2_hm10_f10_softplus.yaml | 68 ++ .../miniboone/l2_hm20_f1_softplus.yaml | 65 + .../param/tabular/power/l3_hm10_f5_tanh.yaml | 61 + .../param/toy/ffjord/common/experiment.yaml | 29 + .../ffjord/common/sweep_activation_da.yaml | 12 + .../toy/ffjord/common/sweep_model_da.yaml | 12 + .../toy/ffjord/common/sweep_model_large.yaml | 14 + .../toy/ffjord/common/sweep_model_med.yaml | 14 + .../toy/ffjord/common/sweep_model_small.yaml | 14 + .../param/toy/ffjord/common/sweep_solver.yaml | 16 + .../ffjord/gaussians/l2_h128_sigmoid_da.yaml | 8 + .../ffjord/gaussians/l4_h64_sigmoid_da.yaml | 7 + .../toy/ffjord/gaussians/network_da.yaml | 3 + .../ffjord/gaussians/sweep_activation_da.yaml | 9 + .../toy/ffjord/gaussians/sweep_model_da.yaml | 9 + .../ffjord/gaussians/sweep_model_small.yaml | 9 + .../toy/ffjord/gaussians/sweep_solver.yaml | 9 + .../param/toy/ffjord/gaussians/training.yaml | 25 + .../toy/ffjord/gaussians/vanilla_l2_h128.yaml | 8 + .../gaussiansspiral/l4_h64_sigmoid_da.yaml | 7 + .../ffjord/gaussiansspiral/network_da.yaml | 3 + .../ffjord/gaussiansspiral/sweep_act_da.yaml | 9 + .../gaussiansspiral/sweep_model_da.yaml | 9 + .../gaussiansspiral/sweep_model_med.yaml | 9 + .../ffjord/gaussiansspiral/sweep_opt_ref.yaml | 56 + .../ffjord/gaussiansspiral/sweep_solver.yaml | 9 + .../toy/ffjord/gaussiansspiral/training.yaml | 25 + .../gaussiansspiral/vanilla_l4_h64.yaml | 8 + .../toy/ffjord/spirals/l4_h64_sigmoid_da.yaml | 7 + .../param/toy/ffjord/spirals/network_da.yaml | 3 + .../toy/ffjord/spirals/sweep_act_da.yaml | 9 + .../toy/ffjord/spirals/sweep_model_da.yaml | 9 + .../toy/ffjord/spirals/sweep_model_large.yaml | 9 + .../toy/ffjord/spirals/sweep_opt_ref.yaml | 56 + .../param/toy/ffjord/spirals/training.yaml | 25 + .../toy/ffjord/spirals/vanilla_l4_h64.yaml | 8 + .../param/toy/node/common/experiment.yaml | 29 + .../toy/node/common/sweep_activation_da.yaml | 12 + .../param/toy/node/common/sweep_model_da.yaml | 14 + .../node/param/toy/node/common/sweep_opt.yaml | 28 + .../param/toy/node/common/sweep_solver.yaml | 16 + .../toy/node/concentric/l2_h128_tanh_da.yaml | 8 + .../toy/node/concentric/l2_h64_tanh_da.yaml | 7 + .../param/toy/node/concentric/network_da.yaml | 3 + .../node/concentric/sweep_activation_da.yaml | 9 + .../toy/node/concentric/sweep_model_da.yaml | 9 + .../toy/node/concentric/sweep_opt_da.yaml | 9 + .../toy/node/concentric/sweep_solver.yaml | 9 + .../param/toy/node/concentric/training.yaml | 25 + .../param/toy/node/moons/l2_h128_tanh_da.yaml | 8 + .../param/toy/node/moons/l2_h32_tanh_da.yaml | 8 + .../param/toy/node/moons/l2_h3_tanh_da.yaml | 8 + .../param/toy/node/moons/l2_h64_tanh_da.yaml | 7 + .../node/param/toy/node/moons/network_da.yaml | 3 + .../toy/node/moons/sweep_activation_da.yaml | 9 + .../param/toy/node/moons/sweep_model_da.yaml | 9 + .../param/toy/node/moons/sweep_opt_da.yaml | 9 + .../param/toy/node/moons/sweep_solver.yaml | 9 + paper/node/param/toy/node/moons/training.yaml | 25 + .../toy/node/spirals/l2_h64_tanh_da.yaml | 7 + .../param/toy/node/spirals/network_da.yaml | 3 + .../toy/node/spirals/sweep_activation_da.yaml | 9 + .../toy/node/spirals/sweep_model_da.yaml | 9 + .../param/toy/node/spirals/sweep_opt_da.yaml | 9 + .../param/toy/node/spirals/sweep_solver.yaml | 9 + .../node/param/toy/node/spirals/training.yaml | 25 + paper/node/script/plot_datasets.py | 67 + paper/node/script/plots2d.py | 209 ++++ paper/node/script/plots_cnf.py | 215 ++++ paper/node/script/sizes/nn_.py | 567 +++++++++ paper/node/script/sizes/sizes_maf.py | 61 + paper/node/script/sizes/sizes_naf.py | 1082 +++++++++++++++++ paper/node/script/sizes/sizes_sos.py | 459 +++++++ paper/node/script/sparsehessian.py | 321 +++++ paper/node/script/view_hessian.py | 276 +++++ paper/node/script/view_hessian_wrapper.py | 36 + paper/node/script/view_modes.py | 344 ++++++ paper/node/script/view_results.py | 762 ++++++++++++ paper/node/script/view_toysweep.py | 535 ++++++++ paper/sipp/README.md | 14 +- paper/sipp/param/cifar/cascade/wrn28_2.yaml | 31 + .../param/cifar/sweep/resnet20_default.yaml | 36 + .../param/cifar/sweep/resnet20_sizes.yaml | 34 + paper/sipp/param/mnist/fc_nettrim.yaml | 33 + paper/sipp/param/mnist/lenet300.yaml | 33 + paper/sipp/param/mnist/lenet300_sizes.yaml | 60 + paper/sipp/param/mnist/lenet300_sizes2.yaml | 60 + paper/sipp/param/mnist/lenet5.yaml | 43 + paper/sipp/script/results_comparisons.py | 200 +++ paper/sipp/{ => script}/results_viewer.py | 47 +- paper/sipp/script/sweep_s.py | 269 ++++ src/experiment/experiment/evaluator.py | 2 - src/experiment/experiment/param/default.yaml | 2 + .../training/{mnist => cifar}/lenet5.yaml | 0 .../param/training/mnist/lenet.yaml | 8 +- src/experiment/experiment/util/data.py | 52 +- src/experiment/setup.py | 1 + src/torchprune/README.md | 16 + src/torchprune/setup.py | 1 + .../torchprune/method/base/base_sparsifier.py | 11 +- .../torchprune/method/ref/__init__.py | 2 +- .../torchprune/method/ref/ref_net.py | 13 + .../torchprune/method/sipp/sipp_allocator.py | 6 +- .../torchprune/util/datasets/__init__.py | 8 +- .../torchprune/util/datasets/dds.py | 4 +- .../torchprune/util/datasets/tabular.py | 105 ++ .../torchprune/util/datasets/toy.py | 296 +++++ .../util/external/cnn/models/cifar/wrn.py | 8 +- .../util/external/ffjord/.gitignore | 3 + .../torchprune/util/external/ffjord/LICENSE | 21 + .../torchprune/util/external/ffjord/README.md | 56 + .../cnn => external/ffjord}/__init__.py | 0 .../external/ffjord/assets/github_flow.gif | Bin 0 -> 1061540 bytes .../util/external/ffjord/datasets/LICENSE.txt | 26 + .../util/external/ffjord/datasets/__init__.py | 5 + .../util/external/ffjord/datasets/bsds300.py | 33 + .../util/external/ffjord/datasets/gas.py | 69 ++ .../util/external/ffjord/datasets/hepmass.py | 112 ++ .../external/ffjord/datasets/miniboone.py | 66 + .../util/external/ffjord/datasets/power.py | 71 ++ .../ffjord/diagnostics/approx_error_1d.py | 265 ++++ .../diagnostics/plot_bottleneck_losses.py | 70 ++ .../diagnostics/plot_compare_multiscale.py | 60 + .../external/ffjord/diagnostics/plot_flows.py | 157 +++ .../ffjord/diagnostics/plot_nfe_vs_dim_vae.py | 50 + .../ffjord/diagnostics/plot_sn_losses.py | 81 ++ .../external/ffjord/diagnostics/scrap_log.py | 64 + .../external/ffjord/diagnostics/viz_cnf.py | 257 ++++ .../diagnostics/viz_high_fidelity_toy.py | 132 ++ .../ffjord/diagnostics/viz_multiscale.py | 222 ++++ .../external/ffjord/diagnostics/viz_toy.py | 179 +++ .../util/external/ffjord/imgs/github.png | Bin 0 -> 7960 bytes .../util/external/ffjord/imgs/maple_leaf.jpg | Bin 0 -> 55459 bytes .../util/external/ffjord/train_cnf.py | 444 +++++++ .../external/ffjord/train_discrete_tabular.py | 235 ++++ .../external/ffjord/train_discrete_toy.py | 186 +++ .../util/external/ffjord/train_img2d.py | 253 ++++ .../util/external/ffjord/train_misc.py | 200 +++ .../util/external/ffjord/train_tabular.py | 306 +++++ .../util/external/ffjord/train_toy.py | 231 ++++ .../util/external/ffjord/train_vae_flow.py | 358 ++++++ .../cnn => external/ffjord/vae_lib}/LICENSE | 2 +- .../external/ffjord/vae_lib/models/CNFVAE.py | 412 +++++++ .../external/ffjord/vae_lib/models/VAE.py | 735 +++++++++++ .../ffjord/vae_lib}/models/__init__.py | 0 .../external/ffjord/vae_lib/models/flows.py | 299 +++++ .../external/ffjord/vae_lib/models/layers.py | 209 ++++ .../ffjord/vae_lib/optimization/__init__.py | 0 .../ffjord/vae_lib/optimization/loss.py | 271 +++++ .../ffjord/vae_lib/optimization/training.py | 171 +++ .../external/ffjord/vae_lib/utils/__init__.py | 0 .../ffjord/vae_lib/utils/distributions.py | 65 + .../ffjord/vae_lib/utils/load_data.py | 205 ++++ .../ffjord/vae_lib/utils/log_likelihood.py | 60 + .../external/ffjord/vae_lib/utils/plotting.py | 104 ++ .../ffjord/vae_lib/utils/visual_evaluation.py | 53 + src/torchprune/torchprune/util/metrics.py | 61 +- .../torchprune/util/models/__init__.py | 7 +- src/torchprune/torchprune/util/models/cnf.py | 452 +++++++ .../torchprune/util/models/cnn/README.md | 74 -- .../torchprune/util/models/cnn/TRAINING.md | 119 -- .../torchprune/util/models/cnn/cifar.py | 350 ------ .../torchprune/util/models/cnn/imagenet.py | 344 ------ .../util/models/cnn/models/cifar/__init__.py | 70 -- .../util/models/cnn/models/cifar/alexnet.py | 44 - .../util/models/cnn/models/cifar/densenet.py | 171 --- .../util/models/cnn/models/cifar/preresnet.py | 158 --- .../util/models/cnn/models/cifar/resnet.py | 180 --- .../util/models/cnn/models/cifar/resnext.py | 126 -- .../util/models/cnn/models/cifar/vgg.py | 138 --- .../util/models/cnn/models/cifar/wrn.py | 128 -- .../models/cnn/models/imagenet/__init__.py | 3 - .../models/cnn/models/imagenet/resnext.py | 173 --- .../util/models/cnn/utils/__init__.py | 11 - .../torchprune/util/models/cnn/utils/eval.py | 18 - .../util/models/cnn/utils/images/cifar.png | Bin 344825 -> 0 bytes .../util/models/cnn/utils/images/imagenet.png | Bin 46471 -> 0 bytes .../util/models/cnn/utils/logger.py | 127 -- .../torchprune/util/models/cnn/utils/misc.py | 76 -- .../util/models/cnn/utils/progress/LICENSE | 13 - .../models/cnn/utils/progress/MANIFEST.in | 1 - .../util/models/cnn/utils/progress/README.rst | 131 -- .../util/models/cnn/utils/progress/demo.gif | Bin 924334 -> 0 bytes .../cnn/utils/progress/progress/__init__.py | 127 -- .../models/cnn/utils/progress/progress/bar.py | 88 -- .../cnn/utils/progress/progress/counter.py | 48 - .../cnn/utils/progress/progress/helpers.py | 91 -- .../cnn/utils/progress/progress/spinner.py | 44 - .../util/models/cnn/utils/progress/setup.py | 29 - .../cnn/utils/progress/test_progress.py | 48 - .../util/models/cnn/utils/visualize.py | 110 -- .../torchprune/util/models/fcnet.py | 8 + .../torchprune/util/models/ffjord.py | 626 ++++++++++ .../torchprune/util/models/ffjord_cnf.py | 435 +++++++ .../torchprune/util/models/ffjord_tabular.py | 383 ++++++ src/torchprune/torchprune/util/models/node.py | 369 ++++++ src/torchprune/torchprune/util/net.py | 8 +- src/torchprune/torchprune/util/nn_loss.py | 65 + src/torchprune/torchprune/util/transforms.py | 15 + 211 files changed, 16859 insertions(+), 3126 deletions(-) create mode 100644 misc/imgs/node_overview.png rename paper/alds/param/imagenet/prune/{mbv2.yaml => mobilenet_v2.yaml} (100%) rename paper/alds/param/imagenet/retrain/{mbv2.yaml => mobilenet_v2.yaml} (100%) create mode 100644 paper/node/README.md create mode 100644 paper/node/param/cnf/cifar_multiscale.yaml create mode 100644 paper/node/param/cnf/mnist_multiscale.yaml create mode 100644 paper/node/param/directories.yaml create mode 100644 paper/node/param/tabular/bsds300/l3_hm20_f2_softplus.yaml create mode 100644 paper/node/param/tabular/gas/l3_hm20_f5_tanh.yaml create mode 100644 paper/node/param/tabular/hepmass/l2_hm10_f10_softplus.yaml create mode 100644 paper/node/param/tabular/miniboone/l2_hm20_f1_softplus.yaml create mode 100644 paper/node/param/tabular/power/l3_hm10_f5_tanh.yaml create mode 100644 paper/node/param/toy/ffjord/common/experiment.yaml create mode 100644 paper/node/param/toy/ffjord/common/sweep_activation_da.yaml create mode 100644 paper/node/param/toy/ffjord/common/sweep_model_da.yaml create mode 100644 paper/node/param/toy/ffjord/common/sweep_model_large.yaml create mode 100644 paper/node/param/toy/ffjord/common/sweep_model_med.yaml create mode 100644 paper/node/param/toy/ffjord/common/sweep_model_small.yaml create mode 100644 paper/node/param/toy/ffjord/common/sweep_solver.yaml create mode 100644 paper/node/param/toy/ffjord/gaussians/l2_h128_sigmoid_da.yaml create mode 100644 paper/node/param/toy/ffjord/gaussians/l4_h64_sigmoid_da.yaml create mode 100644 paper/node/param/toy/ffjord/gaussians/network_da.yaml create mode 100644 paper/node/param/toy/ffjord/gaussians/sweep_activation_da.yaml create mode 100644 paper/node/param/toy/ffjord/gaussians/sweep_model_da.yaml create mode 100644 paper/node/param/toy/ffjord/gaussians/sweep_model_small.yaml create mode 100644 paper/node/param/toy/ffjord/gaussians/sweep_solver.yaml create mode 100644 paper/node/param/toy/ffjord/gaussians/training.yaml create mode 100644 paper/node/param/toy/ffjord/gaussians/vanilla_l2_h128.yaml create mode 100644 paper/node/param/toy/ffjord/gaussiansspiral/l4_h64_sigmoid_da.yaml create mode 100644 paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml create mode 100644 paper/node/param/toy/ffjord/gaussiansspiral/sweep_act_da.yaml create mode 100644 paper/node/param/toy/ffjord/gaussiansspiral/sweep_model_da.yaml create mode 100644 paper/node/param/toy/ffjord/gaussiansspiral/sweep_model_med.yaml create mode 100644 paper/node/param/toy/ffjord/gaussiansspiral/sweep_opt_ref.yaml create mode 100644 paper/node/param/toy/ffjord/gaussiansspiral/sweep_solver.yaml create mode 100644 paper/node/param/toy/ffjord/gaussiansspiral/training.yaml create mode 100644 paper/node/param/toy/ffjord/gaussiansspiral/vanilla_l4_h64.yaml create mode 100644 paper/node/param/toy/ffjord/spirals/l4_h64_sigmoid_da.yaml create mode 100644 paper/node/param/toy/ffjord/spirals/network_da.yaml create mode 100644 paper/node/param/toy/ffjord/spirals/sweep_act_da.yaml create mode 100644 paper/node/param/toy/ffjord/spirals/sweep_model_da.yaml create mode 100644 paper/node/param/toy/ffjord/spirals/sweep_model_large.yaml create mode 100644 paper/node/param/toy/ffjord/spirals/sweep_opt_ref.yaml create mode 100644 paper/node/param/toy/ffjord/spirals/training.yaml create mode 100644 paper/node/param/toy/ffjord/spirals/vanilla_l4_h64.yaml create mode 100644 paper/node/param/toy/node/common/experiment.yaml create mode 100644 paper/node/param/toy/node/common/sweep_activation_da.yaml create mode 100644 paper/node/param/toy/node/common/sweep_model_da.yaml create mode 100644 paper/node/param/toy/node/common/sweep_opt.yaml create mode 100644 paper/node/param/toy/node/common/sweep_solver.yaml create mode 100644 paper/node/param/toy/node/concentric/l2_h128_tanh_da.yaml create mode 100644 paper/node/param/toy/node/concentric/l2_h64_tanh_da.yaml create mode 100644 paper/node/param/toy/node/concentric/network_da.yaml create mode 100644 paper/node/param/toy/node/concentric/sweep_activation_da.yaml create mode 100644 paper/node/param/toy/node/concentric/sweep_model_da.yaml create mode 100644 paper/node/param/toy/node/concentric/sweep_opt_da.yaml create mode 100644 paper/node/param/toy/node/concentric/sweep_solver.yaml create mode 100644 paper/node/param/toy/node/concentric/training.yaml create mode 100644 paper/node/param/toy/node/moons/l2_h128_tanh_da.yaml create mode 100644 paper/node/param/toy/node/moons/l2_h32_tanh_da.yaml create mode 100644 paper/node/param/toy/node/moons/l2_h3_tanh_da.yaml create mode 100644 paper/node/param/toy/node/moons/l2_h64_tanh_da.yaml create mode 100644 paper/node/param/toy/node/moons/network_da.yaml create mode 100644 paper/node/param/toy/node/moons/sweep_activation_da.yaml create mode 100644 paper/node/param/toy/node/moons/sweep_model_da.yaml create mode 100644 paper/node/param/toy/node/moons/sweep_opt_da.yaml create mode 100644 paper/node/param/toy/node/moons/sweep_solver.yaml create mode 100644 paper/node/param/toy/node/moons/training.yaml create mode 100644 paper/node/param/toy/node/spirals/l2_h64_tanh_da.yaml create mode 100644 paper/node/param/toy/node/spirals/network_da.yaml create mode 100644 paper/node/param/toy/node/spirals/sweep_activation_da.yaml create mode 100644 paper/node/param/toy/node/spirals/sweep_model_da.yaml create mode 100644 paper/node/param/toy/node/spirals/sweep_opt_da.yaml create mode 100644 paper/node/param/toy/node/spirals/sweep_solver.yaml create mode 100644 paper/node/param/toy/node/spirals/training.yaml create mode 100644 paper/node/script/plot_datasets.py create mode 100644 paper/node/script/plots2d.py create mode 100644 paper/node/script/plots_cnf.py create mode 100644 paper/node/script/sizes/nn_.py create mode 100644 paper/node/script/sizes/sizes_maf.py create mode 100644 paper/node/script/sizes/sizes_naf.py create mode 100644 paper/node/script/sizes/sizes_sos.py create mode 100644 paper/node/script/sparsehessian.py create mode 100644 paper/node/script/view_hessian.py create mode 100644 paper/node/script/view_hessian_wrapper.py create mode 100644 paper/node/script/view_modes.py create mode 100644 paper/node/script/view_results.py create mode 100644 paper/node/script/view_toysweep.py create mode 100644 paper/sipp/param/cifar/cascade/wrn28_2.yaml create mode 100644 paper/sipp/param/cifar/sweep/resnet20_default.yaml create mode 100644 paper/sipp/param/cifar/sweep/resnet20_sizes.yaml create mode 100644 paper/sipp/param/mnist/fc_nettrim.yaml create mode 100644 paper/sipp/param/mnist/lenet300.yaml create mode 100644 paper/sipp/param/mnist/lenet300_sizes.yaml create mode 100644 paper/sipp/param/mnist/lenet300_sizes2.yaml create mode 100644 paper/sipp/param/mnist/lenet5.yaml create mode 100644 paper/sipp/script/results_comparisons.py rename paper/sipp/{ => script}/results_viewer.py (73%) create mode 100644 paper/sipp/script/sweep_s.py rename src/experiment/experiment/param/training/{mnist => cifar}/lenet5.yaml (100%) create mode 100644 src/torchprune/torchprune/util/datasets/tabular.py create mode 100644 src/torchprune/torchprune/util/datasets/toy.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/.gitignore create mode 100644 src/torchprune/torchprune/util/external/ffjord/LICENSE create mode 100644 src/torchprune/torchprune/util/external/ffjord/README.md rename src/torchprune/torchprune/util/{models/cnn => external/ffjord}/__init__.py (100%) create mode 100644 src/torchprune/torchprune/util/external/ffjord/assets/github_flow.gif create mode 100644 src/torchprune/torchprune/util/external/ffjord/datasets/LICENSE.txt create mode 100644 src/torchprune/torchprune/util/external/ffjord/datasets/__init__.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/datasets/bsds300.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/datasets/gas.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/datasets/hepmass.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/datasets/miniboone.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/datasets/power.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/approx_error_1d.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_bottleneck_losses.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_compare_multiscale.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_flows.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_nfe_vs_dim_vae.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_sn_losses.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/scrap_log.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_cnf.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_high_fidelity_toy.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_multiscale.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_toy.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/imgs/github.png create mode 100644 src/torchprune/torchprune/util/external/ffjord/imgs/maple_leaf.jpg create mode 100644 src/torchprune/torchprune/util/external/ffjord/train_cnf.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/train_discrete_tabular.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/train_discrete_toy.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/train_img2d.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/train_misc.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/train_tabular.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/train_toy.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/train_vae_flow.py rename src/torchprune/torchprune/util/{models/cnn => external/ffjord/vae_lib}/LICENSE (96%) create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/models/CNFVAE.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/models/VAE.py rename src/torchprune/torchprune/util/{models/cnn => external/ffjord/vae_lib}/models/__init__.py (100%) create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/models/flows.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/models/layers.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/__init__.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/loss.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/training.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/__init__.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/distributions.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/load_data.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/log_likelihood.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/plotting.py create mode 100644 src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/visual_evaluation.py create mode 100644 src/torchprune/torchprune/util/models/cnf.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/README.md delete mode 100644 src/torchprune/torchprune/util/models/cnn/TRAINING.md delete mode 100644 src/torchprune/torchprune/util/models/cnn/cifar.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/imagenet.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/models/cifar/__init__.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/models/cifar/alexnet.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/models/cifar/densenet.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/models/cifar/preresnet.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/models/cifar/resnet.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/models/cifar/resnext.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/models/cifar/vgg.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/models/cifar/wrn.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/models/imagenet/__init__.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/models/imagenet/resnext.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/__init__.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/eval.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/images/cifar.png delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/images/imagenet.png delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/logger.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/misc.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/progress/LICENSE delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/progress/MANIFEST.in delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/progress/README.rst delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/progress/demo.gif delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/progress/progress/__init__.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/progress/progress/bar.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/progress/progress/counter.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/progress/progress/helpers.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/progress/progress/spinner.py delete mode 100755 src/torchprune/torchprune/util/models/cnn/utils/progress/setup.py delete mode 100755 src/torchprune/torchprune/util/models/cnn/utils/progress/test_progress.py delete mode 100644 src/torchprune/torchprune/util/models/cnn/utils/visualize.py create mode 100644 src/torchprune/torchprune/util/models/ffjord.py create mode 100644 src/torchprune/torchprune/util/models/ffjord_cnf.py create mode 100644 src/torchprune/torchprune/util/models/ffjord_tabular.py create mode 100644 src/torchprune/torchprune/util/models/node.py diff --git a/README.md b/README.md index 7e6aa1b..55337d5 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ -# Neural Network Pruning -[Lucas Liebenwein](https://people.csail.mit.edu/lucasl/), -[Cenk Baykal](http://www.mit.edu/~baykal/), -[Alaa Maalouf](https://www.linkedin.com/in/alaa-maalouf/), -[Igor Gilitschenski](https://www.gilitschenski.org/igor/), -[Dan Feldman](http://people.csail.mit.edu/dannyf/), -[Daniela Rus](http://danielarus.csail.mit.edu/) +# torchprune +Main contributors of this code base: +[Lucas Liebenwein](http://www.mit.edu/~lucasl/), +[Cenk Baykal](http://www.mit.edu/~baykal/). + +Please check individual paper folders for authors of each paper.

@@ -15,10 +14,11 @@ This repository contains code to reproduce the results from the following papers: | Paper | Venue | Title & Link | | :---: | :---: | :--- | +| **Node** | NeurIPS 2021 | [Sparse Flows: Pruning Continuous-depth Models](https://proceedings.neurips.cc/paper/2021/hash/bf1b2f4b901c21a1d8645018ea9aeb05-Abstract.html) | | **ALDS** | NeurIPS 2021 | [Compressing Neural Networks: Towards Determining the Optimal Layer-wise Decomposition](https://arxiv.org/abs/2107.11442) | | **Lost** | MLSys 2021 | [Lost in Pruning: The Effects of Pruning Neural Networks beyond Test Accuracy](https://proceedings.mlsys.org/paper/2021/hash/2a79ea27c279e471f4d180b08d62b00a-Abstract.html) | | **PFP** | ICLR 2020 | [Provable Filter Pruning for Efficient Neural Networks](https://openreview.net/forum?id=BJxkOlSYDH) | -| **SiPP** | arXiv | [SiPPing Neural Networks: Sensitivity-informed Provable Pruning of Neural Networks](https://arxiv.org/abs/1910.05422) | +| **SiPP** | SIAM 2022 | [SiPPing Neural Networks: Sensitivity-informed Provable Pruning of Neural Networks](https://doi.org/10.1137/20M1383239) | ### Packages In addition, the repo also contains two stand-alone python packages that @@ -35,6 +35,7 @@ about the paper and scripts and parameter configuration to reproduce the exact results from the paper. | Paper | Location | | :---: | :---: | +| **Node** | [paper/node](./paper/node) | | **ALDS** | [paper/alds](./paper/alds) | | **Lost** | [paper/lost](./paper/lost) | | **PFP** | [paper/pfp](./paper/pfp) | @@ -98,14 +99,27 @@ using the codebase. | --- | --- | | [src/torchprune/README.md](./src/torchprune) | more details to prune neural networks, how to use and setup the data sets, how to implement custom pruning methods, and how to add your data sets and networks. | | [src/experiment/README.md](./src/experiment) | more details on how to configure and run your own experiments, and more information on how to re-produce the results. | +| [paper/node/README.md](./paper/node) | check out for more information on the [Node](https://proceedings.neurips.cc/paper/2021/hash/bf1b2f4b901c21a1d8645018ea9aeb05-Abstract.html) paper. | | [paper/alds/README.md](./paper/alds) | check out for more information on the [ALDS](https://arxiv.org/abs/2107.11442) paper. | | [paper/lost/README.md](./paper/lost) | check out for more information on the [Lost](https://proceedings.mlsys.org/paper/2021/hash/2a79ea27c279e471f4d180b08d62b00a-Abstract.html) paper. | | [paper/pfp/README.md](./paper/pfp) | check out for more information on the [PFP](https://openreview.net/forum?id=BJxkOlSYDH) paper. | -| [paper/sipp/README.md](./paper/sipp) | check out for more information on the [SiPP](https://arxiv.org/abs/1910.05422) paper. | +| [paper/sipp/README.md](./paper/sipp) | check out for more information on the [SiPP](https://doi.org/10.1137/20M1383239) paper. | ## Citations Please cite the respective papers when using our work. +### [Sparse flows: Pruning continuous-depth models](https://proceedings.neurips.cc/paper/2021/hash/bf1b2f4b901c21a1d8645018ea9aeb05-Abstract.html) +``` +@article{liebenwein2021sparse, + title={Sparse flows: Pruning continuous-depth models}, + author={Liebenwein, Lucas and Hasani, Ramin and Amini, Alexander and Rus, Daniela}, + journal={Advances in Neural Information Processing Systems}, + volume={34}, + pages={22628--22642}, + year={2021} +} +``` + ### [Towards Determining the Optimal Layer-wise Decomposition](https://arxiv.org/abs/2107.11442) ``` @inproceedings{liebenwein2021alds, @@ -140,12 +154,16 @@ url={https://openreview.net/forum?id=BJxkOlSYDH} } ``` -### [SiPPing Neural Networks](https://arxiv.org/abs/1910.05422) +### [SiPPing Neural Networks](https://doi.org/10.1137/20M1383239) (Weight Pruning) ``` -@article{baykal2019sipping, -title={SiPPing Neural Networks: Sensitivity-informed Provable Pruning of Neural Networks}, -author={Baykal, Cenk and Liebenwein, Lucas and Gilitschenski, Igor and Feldman, Dan and Rus, Daniela}, -journal={arXiv preprint arXiv:1910.05422}, -year={2019} +@article{baykal2022sensitivity, + title={Sensitivity-informed provable pruning of neural networks}, + author={Baykal, Cenk and Liebenwein, Lucas and Gilitschenski, Igor and Feldman, Dan and Rus, Daniela}, + journal={SIAM Journal on Mathematics of Data Science}, + volume={4}, + number={1}, + pages={26--45}, + year={2022}, + publisher={SIAM} } ``` \ No newline at end of file diff --git a/misc/imgs/node_overview.png b/misc/imgs/node_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..ff19684dc8afa7613172d91ade5ecace37516419 GIT binary patch literal 140508 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 A)&Kwi literal 0 HcmV?d00001 diff --git a/misc/requirements.txt b/misc/requirements.txt index efe3eb2..704fb17 100644 --- a/misc/requirements.txt +++ b/misc/requirements.txt @@ -3,10 +3,10 @@ -e ./src/experiment # We need those with special tags unfortunately... --f https://download.pytorch.org/whl/torch_stable.html -torch==1.7.1+cu110 -torchvision==0.8.2+cu110 -torchaudio===0.7.2 +-f https://download.pytorch.org/whl/lts/1.8/torch_lts.html +torch==1.8.2+cu111 +torchvision==0.9.2+cu111 +torchaudio==0.8.2 # Some extra requirements for the code base jupyter diff --git a/paper/alds/param/imagenet/prune/mbv2.yaml b/paper/alds/param/imagenet/prune/mobilenet_v2.yaml similarity index 100% rename from paper/alds/param/imagenet/prune/mbv2.yaml rename to paper/alds/param/imagenet/prune/mobilenet_v2.yaml diff --git a/paper/alds/param/imagenet/retrain/mbv2.yaml b/paper/alds/param/imagenet/retrain/mobilenet_v2.yaml similarity index 100% rename from paper/alds/param/imagenet/retrain/mbv2.yaml rename to paper/alds/param/imagenet/retrain/mobilenet_v2.yaml diff --git a/paper/alds/script/results_viewer.py b/paper/alds/script/results_viewer.py index 95b405a..f2c8d8b 100644 --- a/paper/alds/script/results_viewer.py +++ b/paper/alds/script/results_viewer.py @@ -38,7 +38,7 @@ TABLE_BOLD_THRESHOLD = 0.005 # auto-discover files from folder without "common.yaml" -FILES = glob.glob(os.path.join(FOLDER, "[!common]*.yaml")) +FILES = glob.glob(os.path.join(FOLDER, "*[!common]*.yaml")) def key_files(item): @@ -52,6 +52,7 @@ def key_files(item): "resnet18", "resnet101", "wide_resnet50_2", + "mobilenet_v2", "deeplabv3_resnet50", ] @@ -127,6 +128,8 @@ def get_results(file, logger, legend_on): elif "imagenet/prune" in file: graphers[0]._figure.gca().set_xlim([0, 87]) graphers[0]._figure.gca().set_ylim([-87, 5]) + elif "imagenet/retrain/mobilenet_v2" in file: + graphers[0]._figure.gca().set_ylim([-5, 0.5]) elif "imagenet/retrain/" in file: graphers[0]._figure.gca().set_ylim([-3.5, 1.5]) elif "imagenet/retraincascade" in file: @@ -317,6 +320,7 @@ def generate_table_entries( "resnet18": "ResNet18", "resnet101": "ResNet101", "wide_resnet50_2": "WRN50-2", + "mobilenet_v2": "MobileNetV2", "deeplabv3_resnet50": "DeeplabV3-ResNet50", } diff --git a/paper/node/README.md b/paper/node/README.md new file mode 100644 index 0000000..c24e74d --- /dev/null +++ b/paper/node/README.md @@ -0,0 +1,68 @@ +# Sparse flows: Pruning continuous-depth models +[Lucas Liebenwein*](https://people.csail.mit.edu/lucasl/), +[Ramin Hasani*](http://www.raminhasani.com), +[Alexander Amini](https://www.mit.edu/~amini/), +[Daniela Rus](http://danielarus.csail.mit.edu/) + +***Equal contribution** + +

+ +

+ + +Continuous deep learning architectures enable learning of flexible +probabilistic models for predictive modeling as neural ordinary differential +equations (ODEs), and for generative modeling as continuous normalizing flows. +In this work, we design a framework to decipher the internal dynamics of these +continuous depth models by pruning their network architectures. Our empirical +results suggest that pruning improves generalization for neural ODEs in +generative modeling. We empirically show that the improvement is because +pruning helps avoid mode- collapse and flatten the loss surface. Moreover, +pruning finds efficient neural ODE representations with up to 98% less +parameters compared to the original network, without loss of accuracy. We hope +our results will invigorate further research into the performance-size +trade-offs of modern continuous-depth models. + +## Setup +Check out the main [README.md](../../README.md) and the respective packages for +more information on the code base. + +## Overview + +### Run compression experiments +The experiment configurations are located [here](./param). To reproduce the +experiments for a specific configuration, run: +```bash +python -m experiment.main param/toy/ffjord/spirals/vanilla_l4_h64.yaml +``` + +The pruning experiments will be run fully automatically and store all the +results. + +### Experimental evaluations + +The [script](./script) contains the evaluation and plotting scripts to +evaluate and analyze the various experiments. Please take a look at each of +them to understand how to load the pruning experiments and how to analyze +the pruning experiments. + +Each plot and experiment presented in the paper can be reproduced this way. + +## Citation +Please cite the following paper when using our work. + +### Paper link +[Sparse flows: Pruning continuous-depth models](https://proceedings.neurips.cc/paper/2021/hash/bf1b2f4b901c21a1d8645018ea9aeb05-Abstract.html) + +### Bibtex +``` +@article{liebenwein2021sparse, + title={Sparse flows: Pruning continuous-depth models}, + author={Liebenwein, Lucas and Hasani, Ramin and Amini, Alexander and Rus, Daniela}, + journal={Advances in Neural Information Processing Systems}, + volume={34}, + pages={22628--22642}, + year={2021} +} +``` diff --git a/paper/node/param/cnf/cifar_multiscale.yaml b/paper/node/param/cnf/cifar_multiscale.yaml new file mode 100644 index 0000000..c08c237 --- /dev/null +++ b/paper/node/param/cnf/cifar_multiscale.yaml @@ -0,0 +1,68 @@ +network: + name: "ffjord_multiscale_cifar" + dataset: "CIFAR10" + outputSize: 10 + +training: + transformsTrain: + - type: RandomHorizontalFlip + kwargs: {} + transformsTest: [] + transformsFinal: + - type: Resize + kwargs: { size: 32 } + - type: ToTensor + kwargs: {} + - type: RandomNoise + kwargs: { "normalization": 255.0 } + + loss: "NLLBitsLoss" + lossKwargs: {} + + metricsTest: + - type: NLLBits + kwargs: {} + - type: Dummy + kwargs: {} + + batchSize: 200 # don't change that since it's hard-coded + + optimizer: "Adam" + optimizerKwargs: + lr: 1.0e-3 + weight_decay: 0.0 + + numEpochs: 50 + earlyStopEpoch: 0 + enableAMP: False + + lrSchedulers: + - type: MultiStepLR + stepKwargs: { milestones: [45] } + kwargs: { gamma: 0.1 } + +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + +experiments: + methods: + - "ThresNet" + - "FilterThresNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 1 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 12 + maxVal: 0.80 + minVal: 0.05 + + retrainIterations: -1 diff --git a/paper/node/param/cnf/mnist_multiscale.yaml b/paper/node/param/cnf/mnist_multiscale.yaml new file mode 100644 index 0000000..fab6fac --- /dev/null +++ b/paper/node/param/cnf/mnist_multiscale.yaml @@ -0,0 +1,66 @@ +network: + name: "ffjord_multiscale_mnist" + dataset: "MNIST" + outputSize: 10 + +training: + transformsTrain: [] + transformsTest: [] + transformsFinal: + - type: Resize + kwargs: { size: 28 } + - type: ToTensor + kwargs: {} + - type: RandomNoise + kwargs: { "normalization": 255.0 } + + loss: "NLLBitsLoss" + lossKwargs: {} + + metricsTest: + - type: NLLBits + kwargs: {} + - type: Dummy + kwargs: {} + + batchSize: 200 # don't change that since it's hard-coded + + optimizer: "Adam" + optimizerKwargs: + lr: 1.0e-3 + weight_decay: 0.0 + + numEpochs: 50 + earlyStopEpoch: 0 + enableAMP: False + + lrSchedulers: + - type: MultiStepLR + stepKwargs: { milestones: [45] } + kwargs: { gamma: 0.1 } + +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + +experiments: + methods: + - "ThresNet" + - "FilterThresNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 1 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 12 + maxVal: 0.80 + minVal: 0.05 + + retrainIterations: -1 diff --git a/paper/node/param/directories.yaml b/paper/node/param/directories.yaml new file mode 100644 index 0000000..ab6b9e8 --- /dev/null +++ b/paper/node/param/directories.yaml @@ -0,0 +1,6 @@ +# relative directories from where main.py was called +directories: + results: "./data/node/results" + trained_networks: null + training_data: "./data/training" + local_data: "./local" diff --git a/paper/node/param/tabular/bsds300/l3_hm20_f2_softplus.yaml b/paper/node/param/tabular/bsds300/l3_hm20_f2_softplus.yaml new file mode 100644 index 0000000..ced304b --- /dev/null +++ b/paper/node/param/tabular/bsds300/l3_hm20_f2_softplus.yaml @@ -0,0 +1,61 @@ +network: + name: "ffjord_l3_hm20_f2_softplus" + dataset: "Bsds300" + outputSize: 63 + +training: + transformsTrain: [] + transformsTest: [] + transformsFinal: [] + + loss: "NLLNatsLoss" + lossKwargs: {} + + metricsTest: + - type: NLLNats + kwargs: {} + - type: Dummy + kwargs: {} + + batchSize: 10000 + + optimizer: "Adam" + optimizerKwargs: + lr: 1.0e-3 + weight_decay: 1.0e-6 + + numEpochs: 100 + earlyStopEpoch: 0 + + enableAMP: False + + lrSchedulers: + - type: MultiStepLR + stepKwargs: { milestones: [96, 99] } + kwargs: { gamma: 0.1 } + +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + +experiments: + methods: + - "ThresNet" + - "FilterThresNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 1 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 8 + maxVal: 0.70 + minVal: 0.10 + + retrainIterations: -1 diff --git a/paper/node/param/tabular/gas/l3_hm20_f5_tanh.yaml b/paper/node/param/tabular/gas/l3_hm20_f5_tanh.yaml new file mode 100644 index 0000000..7678a0b --- /dev/null +++ b/paper/node/param/tabular/gas/l3_hm20_f5_tanh.yaml @@ -0,0 +1,61 @@ +network: + name: "ffjord_l3_hm20_f5_tanh" + dataset: "Gas" + outputSize: 8 + +training: + transformsTrain: [] + transformsTest: [] + transformsFinal: [] + + loss: "NLLNatsLoss" + lossKwargs: {} + + metricsTest: + - type: NLLNats + kwargs: {} + - type: Dummy + kwargs: {} + + batchSize: 1000 + + optimizer: "Adam" + optimizerKwargs: + lr: 1.0e-3 + weight_decay: 1.0e-6 + + numEpochs: 30 + earlyStopEpoch: 0 + + enableAMP: False + + lrSchedulers: + - type: MultiStepLR + stepKwargs: { milestones: [25, 28] } + kwargs: { gamma: 0.1 } + +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + +experiments: + methods: + - "ThresNet" + - "FilterThresNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 1 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 8 + maxVal: 0.70 + minVal: 0.10 + + retrainIterations: -1 diff --git a/paper/node/param/tabular/hepmass/l2_hm10_f10_softplus.yaml b/paper/node/param/tabular/hepmass/l2_hm10_f10_softplus.yaml new file mode 100644 index 0000000..04f28ea --- /dev/null +++ b/paper/node/param/tabular/hepmass/l2_hm10_f10_softplus.yaml @@ -0,0 +1,68 @@ +network: + name: "ffjord_l2_hm10_f10_softplus" + dataset: "Hepmass" + outputSize: 21 + +training: + transformsTrain: [] + transformsTest: [] + transformsFinal: [] + + loss: "NLLNatsLoss" + lossKwargs: {} + + metricsTest: + - type: NLLNats + kwargs: {} + - type: Dummy + kwargs: {} + + batchSize: 10000 + + optimizer: "Adam" + optimizerKwargs: + lr: 1.0e-3 + weight_decay: 1.0e-6 + + numEpochs: 400 + earlyStopEpoch: 0 + + enableAMP: False + + lrSchedulers: + - type: MultiStepLR + stepKwargs: { milestones: [325, 375] } + kwargs: { gamma: 0.1 } + +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + numEpochs: 300 + earlyStopEpoch: 0 + + lrSchedulers: + - type: MultiStepLR + stepKwargs: { milestones: [250, 295] } + kwargs: { gamma: 0.1 } + +experiments: + methods: + - "ThresNet" + - "FilterThresNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 1 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 12 + maxVal: 0.80 + minVal: 0.05 + + retrainIterations: -1 diff --git a/paper/node/param/tabular/miniboone/l2_hm20_f1_softplus.yaml b/paper/node/param/tabular/miniboone/l2_hm20_f1_softplus.yaml new file mode 100644 index 0000000..9cd4394 --- /dev/null +++ b/paper/node/param/tabular/miniboone/l2_hm20_f1_softplus.yaml @@ -0,0 +1,65 @@ +network: + name: "ffjord_l2_hm20_f1_softplus" + dataset: "Miniboone" + outputSize: 43 + +training: + transformsTrain: [] + transformsTest: [] + transformsFinal: [] + + loss: "NLLNatsLoss" + lossKwargs: {} + + metricsTest: + - type: NLLNats + kwargs: {} + - type: Dummy + kwargs: {} + + batchSize: 1000 + + optimizer: "Adam" + optimizerKwargs: + lr: 1.0e-3 + weight_decay: 1.0e-6 + + numEpochs: 400 + earlyStopEpoch: 0 + + enableAMP: False + + lrSchedulers: + - type: MultiStepLR + stepKwargs: { milestones: [300, 350] } + kwargs: { gamma: 0.1 } + +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + +experiments: + methods: + - "ThresNet" + - "FilterThresNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 3 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 12 + maxVal: 0.80 + minVal: 0.05 + - type: "linear" + numIntervals: 4 + maxVal: 0.04 + minVal: 0.01 + + retrainIterations: -1 diff --git a/paper/node/param/tabular/power/l3_hm10_f5_tanh.yaml b/paper/node/param/tabular/power/l3_hm10_f5_tanh.yaml new file mode 100644 index 0000000..71b07b4 --- /dev/null +++ b/paper/node/param/tabular/power/l3_hm10_f5_tanh.yaml @@ -0,0 +1,61 @@ +network: + name: "ffjord_l3_hm10_f5_tanh" + dataset: "Power" + outputSize: 6 + +training: + transformsTrain: [] + transformsTest: [] + transformsFinal: [] + + loss: "NLLNatsLoss" + lossKwargs: {} + + metricsTest: + - type: NLLNats + kwargs: {} + - type: Dummy + kwargs: {} + + batchSize: 10000 + + optimizer: "Adam" + optimizerKwargs: + lr: 1.0e-3 + weight_decay: 1.0e-6 + + numEpochs: 100 + earlyStopEpoch: 0 + + enableAMP: False + + lrSchedulers: + - type: MultiStepLR + stepKwargs: { milestones: [90, 97] } + kwargs: { gamma: 0.1 } + +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + +experiments: + methods: + - "ThresNet" + - "FilterThresNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 1 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 8 + maxVal: 0.70 + minVal: 0.10 + + retrainIterations: -1 diff --git a/paper/node/param/toy/ffjord/common/experiment.yaml b/paper/node/param/toy/ffjord/common/experiment.yaml new file mode 100644 index 0000000..511c93b --- /dev/null +++ b/paper/node/param/toy/ffjord/common/experiment.yaml @@ -0,0 +1,29 @@ +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + +experiments: + methods: + - "FilterThresNet" + - "ThresNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 3 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 20 + maxVal: 0.80 + minVal: 0.20 + - type: "linear" + numIntervals: 9 + maxVal: 0.18 + minVal: 0.02 + + retrainIterations: -1 diff --git a/paper/node/param/toy/ffjord/common/sweep_activation_da.yaml b/paper/node/param/toy/ffjord/common/sweep_activation_da.yaml new file mode 100644 index 0000000..fcbe321 --- /dev/null +++ b/paper/node/param/toy/ffjord/common/sweep_activation_da.yaml @@ -0,0 +1,12 @@ +file: "paper/node/param/toy/ffjord/common/experiment.yaml" + +# we vary the activation function +customizations: + - key: ["network", "name"] + value: "ffjord_l4_h64_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l4_h64_softplus_da" + - key: ["network", "name"] + value: "ffjord_l4_h64_tanh_da" + - key: ["network", "name"] + value: "ffjord_l4_h64_relu_da" diff --git a/paper/node/param/toy/ffjord/common/sweep_model_da.yaml b/paper/node/param/toy/ffjord/common/sweep_model_da.yaml new file mode 100644 index 0000000..d906115 --- /dev/null +++ b/paper/node/param/toy/ffjord/common/sweep_model_da.yaml @@ -0,0 +1,12 @@ +file: "paper/node/param/toy/ffjord/common/experiment.yaml" + +# now we vary the architecture +customizations: + - key: ["network", "name"] + value: "ffjord_l4_h64_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l8_h64_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l2_h128_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l2_h64_sigmoid_da" diff --git a/paper/node/param/toy/ffjord/common/sweep_model_large.yaml b/paper/node/param/toy/ffjord/common/sweep_model_large.yaml new file mode 100644 index 0000000..ad6de78 --- /dev/null +++ b/paper/node/param/toy/ffjord/common/sweep_model_large.yaml @@ -0,0 +1,14 @@ +file: "paper/node/param/toy/ffjord/common/experiment.yaml" + +# now we vary the architecture +customizations: + - key: ["network", "name"] + value: "ffjord_l8_h37_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l6_h45_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l4_h64_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l3_h90_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l2_h1700_sigmoid_da" diff --git a/paper/node/param/toy/ffjord/common/sweep_model_med.yaml b/paper/node/param/toy/ffjord/common/sweep_model_med.yaml new file mode 100644 index 0000000..d37fc6b --- /dev/null +++ b/paper/node/param/toy/ffjord/common/sweep_model_med.yaml @@ -0,0 +1,14 @@ +file: "paper/node/param/toy/ffjord/common/experiment.yaml" + +# now we vary the architecture with approximately fixed # of parameters +customizations: + - key: ["network", "name"] + value: "ffjord_l8_h18_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l6_h22_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l4_h30_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l3_h43_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l2_h400_sigmoid_da" diff --git a/paper/node/param/toy/ffjord/common/sweep_model_small.yaml b/paper/node/param/toy/ffjord/common/sweep_model_small.yaml new file mode 100644 index 0000000..9dcccf5 --- /dev/null +++ b/paper/node/param/toy/ffjord/common/sweep_model_small.yaml @@ -0,0 +1,14 @@ +file: "paper/node/param/toy/ffjord/common/experiment.yaml" + +# now we vary the architecture with approximately fixed # of parameters +customizations: + - key: ["network", "name"] + value: "ffjord_l8_h10_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l6_h12_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l4_h17_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l3_h23_sigmoid_da" + - key: ["network", "name"] + value: "ffjord_l2_h128_sigmoid_da" diff --git a/paper/node/param/toy/ffjord/common/sweep_solver.yaml b/paper/node/param/toy/ffjord/common/sweep_solver.yaml new file mode 100644 index 0000000..4f75ce2 --- /dev/null +++ b/paper/node/param/toy/ffjord/common/sweep_solver.yaml @@ -0,0 +1,16 @@ +file: "paper/node/param/toy/ffjord/common/experiment.yaml" + +# we vary the solver +customizations: + - key: ["network", "name"] + value: "ffjord_l4_h64_sigmoid_rk4_autograd" + - key: ["network", "name"] + value: "ffjord_l4_h64_sigmoid_rk4_adjoint" + - key: ["network", "name"] + value: "ffjord_l4_h64_sigmoid_dopri_autograd" + - key: ["network", "name"] + value: "ffjord_l4_h64_sigmoid_dopri_adjoint" + - key: ["network", "name"] + value: "ffjord_l4_h64_sigmoid_euler_autograd" + - key: ["network", "name"] + value: "ffjord_l4_h64_sigmoid_euler_adjoint" diff --git a/paper/node/param/toy/ffjord/gaussians/l2_h128_sigmoid_da.yaml b/paper/node/param/toy/ffjord/gaussians/l2_h128_sigmoid_da.yaml new file mode 100644 index 0000000..28818a0 --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussians/l2_h128_sigmoid_da.yaml @@ -0,0 +1,8 @@ +network: + file: "paper/node/param/toy/ffjord/gaussians/network_da.yaml" + name: "ffjord_l2_h128_sigmoid_da" + +training: + file: "paper/node/param/toy/ffjord/gaussians/training.yaml" + +file: "paper/node/param/toy/ffjord/common/experiment.yaml" diff --git a/paper/node/param/toy/ffjord/gaussians/l4_h64_sigmoid_da.yaml b/paper/node/param/toy/ffjord/gaussians/l4_h64_sigmoid_da.yaml new file mode 100644 index 0000000..05ed81c --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussians/l4_h64_sigmoid_da.yaml @@ -0,0 +1,7 @@ +network: + file: "paper/node/param/toy/ffjord/gaussians/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussians/training.yaml" + +file: "paper/node/param/toy/ffjord/common/experiment.yaml" diff --git a/paper/node/param/toy/ffjord/gaussians/network_da.yaml b/paper/node/param/toy/ffjord/gaussians/network_da.yaml new file mode 100644 index 0000000..4dcacdc --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussians/network_da.yaml @@ -0,0 +1,3 @@ +name: "ffjord_l4_h64_sigmoid_da" +dataset: "ToyGaussians" +outputSize: 2 diff --git a/paper/node/param/toy/ffjord/gaussians/sweep_activation_da.yaml b/paper/node/param/toy/ffjord/gaussians/sweep_activation_da.yaml new file mode 100644 index 0000000..b1c848b --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussians/sweep_activation_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/gaussians/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussians/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/ffjord/common/sweep_activation_da.yaml" diff --git a/paper/node/param/toy/ffjord/gaussians/sweep_model_da.yaml b/paper/node/param/toy/ffjord/gaussians/sweep_model_da.yaml new file mode 100644 index 0000000..9c1c004 --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussians/sweep_model_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/gaussians/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussians/training.yaml" + +# now we vary the model +file: "paper/node/param/toy/ffjord/common/sweep_model_da.yaml" diff --git a/paper/node/param/toy/ffjord/gaussians/sweep_model_small.yaml b/paper/node/param/toy/ffjord/gaussians/sweep_model_small.yaml new file mode 100644 index 0000000..472c5fa --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussians/sweep_model_small.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/gaussians/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussians/training.yaml" + +# now we vary the model +file: "paper/node/param/toy/ffjord/common/sweep_model_small.yaml" diff --git a/paper/node/param/toy/ffjord/gaussians/sweep_solver.yaml b/paper/node/param/toy/ffjord/gaussians/sweep_solver.yaml new file mode 100644 index 0000000..80f89fa --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussians/sweep_solver.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/gaussians/network.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussians/training.yaml" + +# now we vary the solver +file: "paper/node/param/toy/ffjord/common/sweep_solver.yaml" diff --git a/paper/node/param/toy/ffjord/gaussians/training.yaml b/paper/node/param/toy/ffjord/gaussians/training.yaml new file mode 100644 index 0000000..e9b2554 --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussians/training.yaml @@ -0,0 +1,25 @@ +transformsTrain: [] +transformsTest: [] +transformsFinal: [] + +loss: "NLLPriorLoss" +lossKwargs: {} + +metricsTest: + - type: NLLPrior + kwargs: {} + - type: Dummy + kwargs: {} + +batchSize: 1024 + +optimizer: "AdamW" +optimizerKwargs: + lr: 5.0e-3 + weight_decay: 1.0e-5 + +numEpochs: 100 + +enableAMP: False + +lrSchedulers: [] diff --git a/paper/node/param/toy/ffjord/gaussians/vanilla_l2_h128.yaml b/paper/node/param/toy/ffjord/gaussians/vanilla_l2_h128.yaml new file mode 100644 index 0000000..2326bdd --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussians/vanilla_l2_h128.yaml @@ -0,0 +1,8 @@ +network: + file: "paper/node/param/toy/ffjord/gaussians/network_da.yaml" + name: "cnf_l2_h128_sigmoid_da" + +training: + file: "paper/node/param/toy/ffjord/gaussians/training.yaml" + +file: "paper/node/param/toy/ffjord/common/experiment.yaml" diff --git a/paper/node/param/toy/ffjord/gaussiansspiral/l4_h64_sigmoid_da.yaml b/paper/node/param/toy/ffjord/gaussiansspiral/l4_h64_sigmoid_da.yaml new file mode 100644 index 0000000..cac948f --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussiansspiral/l4_h64_sigmoid_da.yaml @@ -0,0 +1,7 @@ +network: + file: "paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussiansspiral/training.yaml" + +file: "paper/node/param/toy/ffjord/common/experiment.yaml" diff --git a/paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml b/paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml new file mode 100644 index 0000000..5e1865e --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml @@ -0,0 +1,3 @@ +name: "ffjord_l4_h64_sigmoid_da" +dataset: "ToyGaussiansSpiral" +outputSize: 2 diff --git a/paper/node/param/toy/ffjord/gaussiansspiral/sweep_act_da.yaml b/paper/node/param/toy/ffjord/gaussiansspiral/sweep_act_da.yaml new file mode 100644 index 0000000..5abf6ba --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussiansspiral/sweep_act_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussiansspiral/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/ffjord/common/sweep_activation_da.yaml" diff --git a/paper/node/param/toy/ffjord/gaussiansspiral/sweep_model_da.yaml b/paper/node/param/toy/ffjord/gaussiansspiral/sweep_model_da.yaml new file mode 100644 index 0000000..9dc88e0 --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussiansspiral/sweep_model_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussiansspiral/training.yaml" + +# now we vary the model +file: "paper/node/param/toy/ffjord/common/sweep_model_da.yaml" diff --git a/paper/node/param/toy/ffjord/gaussiansspiral/sweep_model_med.yaml b/paper/node/param/toy/ffjord/gaussiansspiral/sweep_model_med.yaml new file mode 100644 index 0000000..b395378 --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussiansspiral/sweep_model_med.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussiansspiral/training.yaml" + +# now we vary the model +file: "paper/node/param/toy/ffjord/common/sweep_model_med.yaml" diff --git a/paper/node/param/toy/ffjord/gaussiansspiral/sweep_opt_ref.yaml b/paper/node/param/toy/ffjord/gaussiansspiral/sweep_opt_ref.yaml new file mode 100644 index 0000000..6134a06 --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussiansspiral/sweep_opt_ref.yaml @@ -0,0 +1,56 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussiansspiral/training.yaml" + +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + +experiments: + methods: [] + mode: "cascade" + + numRepetitions: 1 + numNets: 1 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 2 + maxVal: 0.80 + minVal: 0.20 + + retrainIterations: -1 + +customizations: + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 0.01 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 1.0e-6 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 1.0e-5 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 1.0e-4 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 0.01 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 1.0e-6 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 1.0e-5 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 1.0e-4 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 0.01 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 1.0e-7 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 1.0e-6 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 1.0e-5 } diff --git a/paper/node/param/toy/ffjord/gaussiansspiral/sweep_solver.yaml b/paper/node/param/toy/ffjord/gaussiansspiral/sweep_solver.yaml new file mode 100644 index 0000000..784f5b9 --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussiansspiral/sweep_solver.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/gaussiansspiral/training.yaml" + +# now we vary the solver +file: "paper/node/param/toy/ffjord/common/sweep_solver.yaml" diff --git a/paper/node/param/toy/ffjord/gaussiansspiral/training.yaml b/paper/node/param/toy/ffjord/gaussiansspiral/training.yaml new file mode 100644 index 0000000..21f219c --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussiansspiral/training.yaml @@ -0,0 +1,25 @@ +transformsTrain: [] +transformsTest: [] +transformsFinal: [] + +loss: "NLLPriorLoss" +lossKwargs: {} + +metricsTest: + - type: NLLPrior + kwargs: {} + - type: Dummy + kwargs: {} + +batchSize: 1024 + +optimizer: "AdamW" +optimizerKwargs: + lr: 0.05 + weight_decay: 0.01 + +numEpochs: 100 + +enableAMP: False + +lrSchedulers: [] diff --git a/paper/node/param/toy/ffjord/gaussiansspiral/vanilla_l4_h64.yaml b/paper/node/param/toy/ffjord/gaussiansspiral/vanilla_l4_h64.yaml new file mode 100644 index 0000000..feb1d10 --- /dev/null +++ b/paper/node/param/toy/ffjord/gaussiansspiral/vanilla_l4_h64.yaml @@ -0,0 +1,8 @@ +network: + file: "paper/node/param/toy/ffjord/gaussiansspiral/network_da.yaml" + name: "cnf_l4_h64_sigmoid_da" + +training: + file: "paper/node/param/toy/ffjord/gaussiansspiral/training.yaml" + +file: "paper/node/param/toy/ffjord/common/experiment.yaml" diff --git a/paper/node/param/toy/ffjord/spirals/l4_h64_sigmoid_da.yaml b/paper/node/param/toy/ffjord/spirals/l4_h64_sigmoid_da.yaml new file mode 100644 index 0000000..b4e4bef --- /dev/null +++ b/paper/node/param/toy/ffjord/spirals/l4_h64_sigmoid_da.yaml @@ -0,0 +1,7 @@ +network: + file: "paper/node/param/toy/ffjord/spirals/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/spirals/training.yaml" + +file: "paper/node/param/toy/ffjord/common/experiment.yaml" diff --git a/paper/node/param/toy/ffjord/spirals/network_da.yaml b/paper/node/param/toy/ffjord/spirals/network_da.yaml new file mode 100644 index 0000000..3965cba --- /dev/null +++ b/paper/node/param/toy/ffjord/spirals/network_da.yaml @@ -0,0 +1,3 @@ +name: "ffjord_l4_h64_sigmoid_da" +dataset: "ToySpirals2" +outputSize: 2 diff --git a/paper/node/param/toy/ffjord/spirals/sweep_act_da.yaml b/paper/node/param/toy/ffjord/spirals/sweep_act_da.yaml new file mode 100644 index 0000000..c6f1dd0 --- /dev/null +++ b/paper/node/param/toy/ffjord/spirals/sweep_act_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/spirals/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/spirals/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/ffjord/common/sweep_activation_da.yaml" diff --git a/paper/node/param/toy/ffjord/spirals/sweep_model_da.yaml b/paper/node/param/toy/ffjord/spirals/sweep_model_da.yaml new file mode 100644 index 0000000..22365fd --- /dev/null +++ b/paper/node/param/toy/ffjord/spirals/sweep_model_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/spirals/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/spirals/training.yaml" + +# now we vary the model +file: "paper/node/param/toy/ffjord/common/sweep_model_da.yaml" diff --git a/paper/node/param/toy/ffjord/spirals/sweep_model_large.yaml b/paper/node/param/toy/ffjord/spirals/sweep_model_large.yaml new file mode 100644 index 0000000..b0a30e1 --- /dev/null +++ b/paper/node/param/toy/ffjord/spirals/sweep_model_large.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/spirals/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/spirals/training.yaml" + +# now we vary the model +file: "paper/node/param/toy/ffjord/common/sweep_model_large.yaml" diff --git a/paper/node/param/toy/ffjord/spirals/sweep_opt_ref.yaml b/paper/node/param/toy/ffjord/spirals/sweep_opt_ref.yaml new file mode 100644 index 0000000..43067d6 --- /dev/null +++ b/paper/node/param/toy/ffjord/spirals/sweep_opt_ref.yaml @@ -0,0 +1,56 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/ffjord/spirals/network_da.yaml" + +training: + file: "paper/node/param/toy/ffjord/spirals/training.yaml" + +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + +experiments: + methods: [] + mode: "cascade" + + numRepetitions: 1 + numNets: 1 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 2 + maxVal: 0.80 + minVal: 0.20 + + retrainIterations: -1 + +customizations: + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 0.01 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 1.0e-6 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 1.0e-5 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 1.0e-4 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 0.01 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 1.0e-6 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 1.0e-5 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 1.0e-4 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 0.01 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 1.0e-7 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 1.0e-6 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 1.0e-5 } diff --git a/paper/node/param/toy/ffjord/spirals/training.yaml b/paper/node/param/toy/ffjord/spirals/training.yaml new file mode 100644 index 0000000..7551456 --- /dev/null +++ b/paper/node/param/toy/ffjord/spirals/training.yaml @@ -0,0 +1,25 @@ +transformsTrain: [] +transformsTest: [] +transformsFinal: [] + +loss: "NLLPriorLoss" +lossKwargs: {} + +metricsTest: + - type: NLLPrior + kwargs: {} + - type: Dummy + kwargs: {} + +batchSize: 1024 + +optimizer: "AdamW" +optimizerKwargs: + lr: 0.05 + weight_decay: 1.0e-6 + +numEpochs: 100 + +enableAMP: False + +lrSchedulers: [] diff --git a/paper/node/param/toy/ffjord/spirals/vanilla_l4_h64.yaml b/paper/node/param/toy/ffjord/spirals/vanilla_l4_h64.yaml new file mode 100644 index 0000000..d8cc39e --- /dev/null +++ b/paper/node/param/toy/ffjord/spirals/vanilla_l4_h64.yaml @@ -0,0 +1,8 @@ +network: + file: "paper/node/param/toy/ffjord/spirals/network_da.yaml" + name: "cnf_l4_h64_sigmoid_da_high_tol" + +training: + file: "paper/node/param/toy/ffjord/spirals/training.yaml" + +file: "paper/node/param/toy/ffjord/common/experiment.yaml" diff --git a/paper/node/param/toy/node/common/experiment.yaml b/paper/node/param/toy/node/common/experiment.yaml new file mode 100644 index 0000000..511c93b --- /dev/null +++ b/paper/node/param/toy/node/common/experiment.yaml @@ -0,0 +1,29 @@ +file: "paper/node/param/directories.yaml" + +retraining: + startEpoch: 0 + +experiments: + methods: + - "FilterThresNet" + - "ThresNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 3 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 20 + maxVal: 0.80 + minVal: 0.20 + - type: "linear" + numIntervals: 9 + maxVal: 0.18 + minVal: 0.02 + + retrainIterations: -1 diff --git a/paper/node/param/toy/node/common/sweep_activation_da.yaml b/paper/node/param/toy/node/common/sweep_activation_da.yaml new file mode 100644 index 0000000..b6601af --- /dev/null +++ b/paper/node/param/toy/node/common/sweep_activation_da.yaml @@ -0,0 +1,12 @@ +file: "paper/node/param/toy/node/common/experiment.yaml" + +# now we vary the activation function +customizations: + - key: ["network", "name"] + value: "node_l2_h64_tanh_da" + - key: ["network", "name"] + value: "node_l2_h64_sigmoid_da" + - key: ["network", "name"] + value: "node_l2_h64_softplus_da" + - key: ["network", "name"] + value: "node_l2_h64_relu_da" diff --git a/paper/node/param/toy/node/common/sweep_model_da.yaml b/paper/node/param/toy/node/common/sweep_model_da.yaml new file mode 100644 index 0000000..7076374 --- /dev/null +++ b/paper/node/param/toy/node/common/sweep_model_da.yaml @@ -0,0 +1,14 @@ +file: "paper/node/param/toy/node/common/experiment.yaml" + +# now we vary the architecture +customizations: + - key: ["network", "name"] + value: "node_l2_h32_tanh_da" + - key: ["network", "name"] + value: "node_l2_h64_tanh_da" + - key: ["network", "name"] + value: "node_l2_h128_tanh_da" + - key: ["network", "name"] + value: "node_l4_h32_tanh_da" + - key: ["network", "name"] + value: "node_l4_h128_tanh_da" diff --git a/paper/node/param/toy/node/common/sweep_opt.yaml b/paper/node/param/toy/node/common/sweep_opt.yaml new file mode 100644 index 0000000..c6c86e0 --- /dev/null +++ b/paper/node/param/toy/node/common/sweep_opt.yaml @@ -0,0 +1,28 @@ +file: "paper/node/param/toy/node/common/experiment.yaml" + +# now we vary the optimizer +customizations: + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 1.0e-6 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 1.0e-5 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.05, "weight_decay": 1.0e-4 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 1.0e-6 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 1.0e-5 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.01, "weight_decay": 1.0e-4 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 1.0e-7 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 1.0e-6 } + - key: ["training", "optimizerKwargs"] + value: { "lr": 0.005, "weight_decay": 1.0e-5 } diff --git a/paper/node/param/toy/node/common/sweep_solver.yaml b/paper/node/param/toy/node/common/sweep_solver.yaml new file mode 100644 index 0000000..9f610b5 --- /dev/null +++ b/paper/node/param/toy/node/common/sweep_solver.yaml @@ -0,0 +1,16 @@ +file: "paper/node/param/toy/node/common/experiment.yaml" + +# now we vary the solver +customizations: + - key: ["network", "name"] + value: "node_l4_h32_tanh_dopri_adjoint" + - key: ["network", "name"] + value: "node_l4_h32_tanh_dopri_autograd" + - key: ["network", "name"] + value: "node_l4_h32_tanh_rk4_adjoint" + - key: ["network", "name"] + value: "node_l4_h32_tanh_rk4_autograd" + - key: ["network", "name"] + value: "node_l4_h32_tanh_euler_adjoint" + - key: ["network", "name"] + value: "node_l4_h32_tanh_euler_autograd" diff --git a/paper/node/param/toy/node/concentric/l2_h128_tanh_da.yaml b/paper/node/param/toy/node/concentric/l2_h128_tanh_da.yaml new file mode 100644 index 0000000..3425d86 --- /dev/null +++ b/paper/node/param/toy/node/concentric/l2_h128_tanh_da.yaml @@ -0,0 +1,8 @@ +network: + name: "node_l2_h128_tanh_da" + file: "paper/node/param/toy/node/concentric/network_da.yaml" + +training: + file: "paper/node/param/toy/node/concentric/training.yaml" + +file: "paper/node/param/toy/node/common/experiment.yaml" diff --git a/paper/node/param/toy/node/concentric/l2_h64_tanh_da.yaml b/paper/node/param/toy/node/concentric/l2_h64_tanh_da.yaml new file mode 100644 index 0000000..eb16d82 --- /dev/null +++ b/paper/node/param/toy/node/concentric/l2_h64_tanh_da.yaml @@ -0,0 +1,7 @@ +network: + file: "paper/node/param/toy/node/concentric/network_da.yaml" + +training: + file: "paper/node/param/toy/node/concentric/training.yaml" + +file: "paper/node/param/toy/node/common/experiment.yaml" diff --git a/paper/node/param/toy/node/concentric/network_da.yaml b/paper/node/param/toy/node/concentric/network_da.yaml new file mode 100644 index 0000000..d5f9fd2 --- /dev/null +++ b/paper/node/param/toy/node/concentric/network_da.yaml @@ -0,0 +1,3 @@ +name: "node_l2_h64_tanh_da" +dataset: "ToyConcentric" +outputSize: 2 diff --git a/paper/node/param/toy/node/concentric/sweep_activation_da.yaml b/paper/node/param/toy/node/concentric/sweep_activation_da.yaml new file mode 100644 index 0000000..b23ae9c --- /dev/null +++ b/paper/node/param/toy/node/concentric/sweep_activation_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/concentric/network_da.yaml" + +training: + file: "paper/node/param/toy/node/concentric/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_activation_da.yaml" diff --git a/paper/node/param/toy/node/concentric/sweep_model_da.yaml b/paper/node/param/toy/node/concentric/sweep_model_da.yaml new file mode 100644 index 0000000..f3ce6bc --- /dev/null +++ b/paper/node/param/toy/node/concentric/sweep_model_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/concentric/network_da.yaml" + +training: + file: "paper/node/param/toy/node/concentric/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_model_da.yaml" diff --git a/paper/node/param/toy/node/concentric/sweep_opt_da.yaml b/paper/node/param/toy/node/concentric/sweep_opt_da.yaml new file mode 100644 index 0000000..727d46b --- /dev/null +++ b/paper/node/param/toy/node/concentric/sweep_opt_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/concentric/network_da.yaml" + +training: + file: "paper/node/param/toy/node/concentric/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_opt.yaml" diff --git a/paper/node/param/toy/node/concentric/sweep_solver.yaml b/paper/node/param/toy/node/concentric/sweep_solver.yaml new file mode 100644 index 0000000..0d9a67b --- /dev/null +++ b/paper/node/param/toy/node/concentric/sweep_solver.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/concentric/network.yaml" + +training: + file: "paper/node/param/toy/node/concentric/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_solver.yaml" diff --git a/paper/node/param/toy/node/concentric/training.yaml b/paper/node/param/toy/node/concentric/training.yaml new file mode 100644 index 0000000..6c7e65d --- /dev/null +++ b/paper/node/param/toy/node/concentric/training.yaml @@ -0,0 +1,25 @@ +transformsTrain: [] +transformsTest: [] +transformsFinal: [] + +loss: "CrossEntropyLoss" +lossKwargs: { reduction: mean } + +metricsTest: + - type: TopK + kwargs: { topk: 1 } + - type: MCorr + kwargs: {} + +batchSize: 128 + +optimizer: "Adam" +optimizerKwargs: + lr: 0.01 + weight_decay: 1.0e-5 + +numEpochs: 50 + +enableAMP: False + +lrSchedulers: [] diff --git a/paper/node/param/toy/node/moons/l2_h128_tanh_da.yaml b/paper/node/param/toy/node/moons/l2_h128_tanh_da.yaml new file mode 100644 index 0000000..c6849fd --- /dev/null +++ b/paper/node/param/toy/node/moons/l2_h128_tanh_da.yaml @@ -0,0 +1,8 @@ +network: + name: "node_l2_h128_tanh_da" + file: "paper/node/param/toy/node/moons/network_da.yaml" + +training: + file: "paper/node/param/toy/node/moons/training.yaml" + +file: "paper/node/param/toy/node/common/experiment.yaml" diff --git a/paper/node/param/toy/node/moons/l2_h32_tanh_da.yaml b/paper/node/param/toy/node/moons/l2_h32_tanh_da.yaml new file mode 100644 index 0000000..3c6ab7d --- /dev/null +++ b/paper/node/param/toy/node/moons/l2_h32_tanh_da.yaml @@ -0,0 +1,8 @@ +network: + name: "node_l2_h32_tanh_da" + file: "paper/node/param/toy/node/moons/network_da.yaml" + +training: + file: "paper/node/param/toy/node/moons/training.yaml" + +file: "paper/node/param/toy/node/common/experiment.yaml" diff --git a/paper/node/param/toy/node/moons/l2_h3_tanh_da.yaml b/paper/node/param/toy/node/moons/l2_h3_tanh_da.yaml new file mode 100644 index 0000000..d1dbf91 --- /dev/null +++ b/paper/node/param/toy/node/moons/l2_h3_tanh_da.yaml @@ -0,0 +1,8 @@ +network: + name: "node_l2_h3_tanh_da" + file: "paper/node/param/toy/node/moons/network_da.yaml" + +training: + file: "paper/node/param/toy/node/moons/training.yaml" + +file: "paper/node/param/toy/node/common/experiment.yaml" diff --git a/paper/node/param/toy/node/moons/l2_h64_tanh_da.yaml b/paper/node/param/toy/node/moons/l2_h64_tanh_da.yaml new file mode 100644 index 0000000..3386573 --- /dev/null +++ b/paper/node/param/toy/node/moons/l2_h64_tanh_da.yaml @@ -0,0 +1,7 @@ +network: + file: "paper/node/param/toy/node/moons/network_da.yaml" + +training: + file: "paper/node/param/toy/node/moons/training.yaml" + +file: "paper/node/param/toy/node/common/experiment.yaml" diff --git a/paper/node/param/toy/node/moons/network_da.yaml b/paper/node/param/toy/node/moons/network_da.yaml new file mode 100644 index 0000000..0aa3519 --- /dev/null +++ b/paper/node/param/toy/node/moons/network_da.yaml @@ -0,0 +1,3 @@ +name: "node_l2_h64_tanh_da" +dataset: "ToyMoons" +outputSize: 2 diff --git a/paper/node/param/toy/node/moons/sweep_activation_da.yaml b/paper/node/param/toy/node/moons/sweep_activation_da.yaml new file mode 100644 index 0000000..b24561c --- /dev/null +++ b/paper/node/param/toy/node/moons/sweep_activation_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/moons/network_da.yaml" + +training: + file: "paper/node/param/toy/node/moons/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_activation_da.yaml" diff --git a/paper/node/param/toy/node/moons/sweep_model_da.yaml b/paper/node/param/toy/node/moons/sweep_model_da.yaml new file mode 100644 index 0000000..ff7a051 --- /dev/null +++ b/paper/node/param/toy/node/moons/sweep_model_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/moons/network_da.yaml" + +training: + file: "paper/node/param/toy/node/moons/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_model_da.yaml" diff --git a/paper/node/param/toy/node/moons/sweep_opt_da.yaml b/paper/node/param/toy/node/moons/sweep_opt_da.yaml new file mode 100644 index 0000000..d56369c --- /dev/null +++ b/paper/node/param/toy/node/moons/sweep_opt_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/moons/network_da.yaml" + +training: + file: "paper/node/param/toy/node/moons/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_opt.yaml" diff --git a/paper/node/param/toy/node/moons/sweep_solver.yaml b/paper/node/param/toy/node/moons/sweep_solver.yaml new file mode 100644 index 0000000..a66cc4a --- /dev/null +++ b/paper/node/param/toy/node/moons/sweep_solver.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/moons/network.yaml" + +training: + file: "paper/node/param/toy/node/moons/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_solver.yaml" diff --git a/paper/node/param/toy/node/moons/training.yaml b/paper/node/param/toy/node/moons/training.yaml new file mode 100644 index 0000000..e091f28 --- /dev/null +++ b/paper/node/param/toy/node/moons/training.yaml @@ -0,0 +1,25 @@ +transformsTrain: [] +transformsTest: [] +transformsFinal: [] + +loss: "CrossEntropyLoss" +lossKwargs: { reduction: mean } + +metricsTest: + - type: TopK + kwargs: { topk: 1 } + - type: MCorr + kwargs: {} + +batchSize: 128 + +optimizer: "Adam" +optimizerKwargs: + lr: 0.01 + weight_decay: 1.0e-4 + +numEpochs: 50 + +enableAMP: False + +lrSchedulers: [] diff --git a/paper/node/param/toy/node/spirals/l2_h64_tanh_da.yaml b/paper/node/param/toy/node/spirals/l2_h64_tanh_da.yaml new file mode 100644 index 0000000..300f3f0 --- /dev/null +++ b/paper/node/param/toy/node/spirals/l2_h64_tanh_da.yaml @@ -0,0 +1,7 @@ +network: + file: "paper/node/param/toy/node/spirals/network_da.yaml" + +training: + file: "paper/node/param/toy/node/spirals/training.yaml" + +file: "paper/node/param/toy/node/common/experiment.yaml" diff --git a/paper/node/param/toy/node/spirals/network_da.yaml b/paper/node/param/toy/node/spirals/network_da.yaml new file mode 100644 index 0000000..d8538c1 --- /dev/null +++ b/paper/node/param/toy/node/spirals/network_da.yaml @@ -0,0 +1,3 @@ +name: "node_l2_h64_tanh_da" +dataset: "ToySpirals" +outputSize: 2 diff --git a/paper/node/param/toy/node/spirals/sweep_activation_da.yaml b/paper/node/param/toy/node/spirals/sweep_activation_da.yaml new file mode 100644 index 0000000..9f7cc31 --- /dev/null +++ b/paper/node/param/toy/node/spirals/sweep_activation_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/spirals/network_da.yaml" + +training: + file: "paper/node/param/toy/node/spirals/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_activation_da.yaml" diff --git a/paper/node/param/toy/node/spirals/sweep_model_da.yaml b/paper/node/param/toy/node/spirals/sweep_model_da.yaml new file mode 100644 index 0000000..73be2cc --- /dev/null +++ b/paper/node/param/toy/node/spirals/sweep_model_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/spirals/network_da.yaml" + +training: + file: "paper/node/param/toy/node/spirals/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_model_da.yaml" diff --git a/paper/node/param/toy/node/spirals/sweep_opt_da.yaml b/paper/node/param/toy/node/spirals/sweep_opt_da.yaml new file mode 100644 index 0000000..546f1b0 --- /dev/null +++ b/paper/node/param/toy/node/spirals/sweep_opt_da.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/spirals/network_da.yaml" + +training: + file: "paper/node/param/toy/node/spirals/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_opt.yaml" diff --git a/paper/node/param/toy/node/spirals/sweep_solver.yaml b/paper/node/param/toy/node/spirals/sweep_solver.yaml new file mode 100644 index 0000000..b5eac12 --- /dev/null +++ b/paper/node/param/toy/node/spirals/sweep_solver.yaml @@ -0,0 +1,9 @@ +# Base Experiment is the classic retraining experiment +network: + file: "paper/node/param/toy/node/spirals/network.yaml" + +training: + file: "paper/node/param/toy/node/spirals/training.yaml" + +# now we vary the activation function +file: "paper/node/param/toy/node/common/sweep_solver.yaml" diff --git a/paper/node/param/toy/node/spirals/training.yaml b/paper/node/param/toy/node/spirals/training.yaml new file mode 100644 index 0000000..ae28b7e --- /dev/null +++ b/paper/node/param/toy/node/spirals/training.yaml @@ -0,0 +1,25 @@ +transformsTrain: [] +transformsTest: [] +transformsFinal: [] + +loss: "CrossEntropyLoss" +lossKwargs: { reduction: mean } + +metricsTest: + - type: TopK + kwargs: { topk: 1 } + - type: MCorr + kwargs: {} + +batchSize: 128 + +optimizer: "Adam" +optimizerKwargs: + lr: 0.01 + weight_decay: 1.0e-5 + +numEpochs: 100 + +enableAMP: False + +lrSchedulers: [] diff --git a/paper/node/script/plot_datasets.py b/paper/node/script/plot_datasets.py new file mode 100644 index 0000000..0622b39 --- /dev/null +++ b/paper/node/script/plot_datasets.py @@ -0,0 +1,67 @@ +# %% Setup script +import random +import os +import sys + +import numpy as np +from IPython import get_ipython +import matplotlib.colors as mcolors +import matplotlib.pyplot as plt +import torch + +from torchprune.util import datasets + +IN_JUPYTER = True +try: + get_ipython().run_line_magic("matplotlib", "inline") # show plots +except AttributeError: + IN_JUPYTER = False + +# switch to root folder for data +folder = os.path.abspath("") +if "paper/node/script" in folder: + src_folder = os.path.join(folder, "../../..") + os.chdir(src_folder) + +# %% define plotting function +def plot_dataset(dset): + # put them in a loader and retrieve batch + loader = torch.utils.data.DataLoader( + dataset=dset, + batch_size=min(len(dset), 1000), + num_workers=0, + shuffle=False, + ) + x_data, y_data = next(loader.__iter__()) + + fig = plt.figure(figsize=(3, 3)) + ax = fig.add_subplot(111) + ax.scatter(x_data[:, 0], x_data[:, 1], s=1, c=y_data) + + +# %% go through datasets and plot each of them +dset_list = [ + # "ToyConcentric", + # "ToyMoons", + # "ToySpirals", + # "ToySpirals2", + # "ToyGaussians", + # "ToyGaussiansSpiral", + # "ToyDiffeqml", + "Bsds300", + "Hepmass", + "Miniboone", + "Power", + "Gas", +] +dsets = [] +for dset_name in dset_list: + dsets.append( + getattr(datasets, dset_name)( + root="./local", + file_dir="./data/training", + download=True, + train=False, + ) + ) + plot_dataset(dsets[-1]) diff --git a/paper/node/script/plots2d.py b/paper/node/script/plots2d.py new file mode 100644 index 0000000..56cdc21 --- /dev/null +++ b/paper/node/script/plots2d.py @@ -0,0 +1,209 @@ +import matplotlib.pyplot as plt +import numpy as np +import torch +import torch.nn as nn +import os + +from torchdyn import utils as plot + + +def get_mesh(X_data, N=1000): + X_data = X_data.detach() + spacing = [torch.linspace(x_i.min(), x_i.max(), N) for x_i in X_data.T] + return torch.stack(torch.meshgrid(*spacing), dim=-1) + + +def plot_for_sweep(**kwargs): + """Plot the desired sweep plot.""" + plot_2d_boundary(**kwargs) + + +def plot_dataset(x_data, y_data, **kwargs): + x_data = x_data.detach().cpu() + y_data = y_data.detach().cpu() + colors = ["orange", "blue"] + fig = plt.figure(figsize=(3, 3)) + ax = fig.add_subplot(111) + for i in range(len(x_data)): + ax.scatter( + x_data[i, 0], x_data[i, 1], s=1, color=colors[y_data[i].int()] + ) + + +def plot_2d_boundary( + model, + x_data, + y_data, + mesh, + num_classes=2, + axis=None, + **kwargs, +): + x_data = x_data.detach().cpu() + y_data = y_data.detach().cpu() + preds = torch.argmax(nn.Softmax(-1)(model(mesh)), dim=-1) + preds = preds.detach().cpu().reshape(mesh.size(0), mesh.size(1)) + if axis is None: + plt.figure(figsize=(8, 4)) + axis = plt.gca() + + contour_colors = ["navy", "tab:orange"] + scatter_colors = ["midnightblue", "darkorange"] + axis.contourf( + mesh[:, :, 0].detach().cpu(), + mesh[:, :, 1].detach().cpu(), + preds, + colors=contour_colors, + alpha=0.4, + levels=1, + ) + for i in range(num_classes): + axis.scatter( + x_data[y_data == i, 0], + x_data[y_data == i, 1], + alpha=1.0, + s=6.0, + linewidths=0, + c=scatter_colors[i], + edgecolors=None, + ) + + +def plot_static_vector_field(model, x_data, t=0.0, N=100, axis=None, **kwargs): + device = next(model.parameters()).device + x = torch.linspace(x_data[:, 0].min(), x_data[:, 0].max(), N) + y = torch.linspace(x_data[:, 1].min(), x_data[:, 1].max(), N) + X, Y = torch.meshgrid(x, y) + + U, V = torch.zeros_like(X), torch.zeros_like(Y) + + for i in range(N): + for j in range(N): + p = torch.cat( + [X[i, j].reshape(1, 1), Y[i, j].reshape(1, 1)], 1 + ).to(device) + O = model.defunc(t, p).detach().cpu() + U[i, j], V[i, j] = O[0, 0], O[0, 1] + + # convert to cpu numpy + X, Y, U, V = [tnsr.cpu().numpy() for tnsr in (X, Y, U, V)] + + if axis is None: + fig = plt.figure(figsize=(3, 3)) + axis = fig.add_subplot(111) + axis.contourf( + X, + Y, + np.sqrt(U ** 2 + V ** 2), + cmap="RdYlBu", + levels=1000, + alpha=0.6, + ) + axis.streamplot( + X.T, + Y.T, + U.T, + V.T, + color="k", + density=1.5, + linewidth=0.7, + arrowsize=0.7, + arrowstyle="-|>", + ) + + axis.set_xlim([x.min(), x.max()]) + axis.set_ylim([y.min(), y.max()]) + axis.set_xlabel(r"$h_0$") + axis.set_ylabel(r"$h_1$") + axis.set_title("Learned Vector Field") + + +def plot_2D_state_space(trajectory, y_data, n_lines, **kwargs): + plot.plot_2D_state_space(trajectory, y_data, n_lines) + + +def plot_2D_depth_trajectory( + s_span, trajectory, y_data, axis1=None, axis2=None, **kwargs +): + if axis1 is None or axis2 is None: + fig = plt.figure(figsize=(8, 2)) + axis1 = fig.add_subplot(121) + axis2 = fig.add_subplot(122) + + colors = ["midnightblue", "darkorange"] + + for i, label in enumerate(y_data): + color = colors[int(label)] + axis1.plot(s_span, trajectory[:, i, 0], color=color, alpha=0.1) + axis2.plot(s_span, trajectory[:, i, 1], color=color, alpha=0.1) + + axis1.set_xlabel(r"Depth") + axis1.set_ylabel(r"Dim. 0") + axis2.set_xlabel(r"Depth") + axis2.set_ylabel(r"Dim. 1") + + +def prepare_data(model, loader, compute_yhat=False, **kwargs): + """Prepare and return the required data.""" + # setup + model = model.model + device = next(model.parameters()).device + plt.style.use("default") + + # collect data from loader + x_data, y_data = None, None + for x_b, y_b in loader: + if x_data is None: + x_data = x_b + y_data = y_b + else: + x_data = torch.cat((x_data, x_b)) + y_data = torch.cat((y_data, y_b)) + x_data, y_data = x_data.to(device), y_data.to(device) + s_span = torch.linspace(0, 1, 100) + trajectory = model.trajectory(x_data, s_span.to(device)).detach().cpu() + mesh = get_mesh(x_data).to(device) + + data = { + "x_data": x_data, + "y_data": y_data, + "n_lines": len(x_data), + "model": model, + "device": device, + "s_span": s_span, + "trajectory": trajectory, + "mesh": mesh, + } + if compute_yhat: + data["y_hat"] = model(x_data).argmax(dim=1) + + return data + + +def plot_all(model, loader, plot_folder=None, all_p=False): + # default plotting style + plt.style.use("default") + + # retrieve plotting kwargs + kwargs_plot = prepare_data(model, loader, all_p) + + def _plot_and_save(plt_handle, plt_name): + plt_handle(**kwargs_plot) + if plot_folder is not None: + os.makedirs(plot_folder, exist_ok=True) + fig = plt.gcf() + fig.savefig( + os.path.join(plot_folder, f"{plt_name}.pdf"), + bbox_inches="tight", + ) + plt.close(fig) + + _plot_and_save(plot_2d_boundary, "2d_boundary") + _plot_and_save(plot_static_vector_field, "static_vector_field") + + if not all_p: + return + + _plot_and_save(plot_2D_state_space, "2D_state_space") + _plot_and_save(plot_2D_depth_trajectory, "2D_depth_trajectory") + _plot_and_save(plot_dataset, "dataset") diff --git a/paper/node/script/plots_cnf.py b/paper/node/script/plots_cnf.py new file mode 100644 index 0000000..f44642e --- /dev/null +++ b/paper/node/script/plots_cnf.py @@ -0,0 +1,215 @@ +import copy +import os +import numpy as np +import matplotlib.pyplot as plt +import torch +from torchdyn.nn import Augmenter + + +def plot_dataset(x_data, **kwargs): + x_data = x_data.detach().cpu() + plt.figure(figsize=(3, 3)) + plot_samples(x_data, axis=plt.gca()) + + +def plot_for_sweep(**kwargs): + """Plot the desired sweep plot.""" + plot_samples(**kwargs) + + +def plot_samples(x_sampled, axis, **kwargs): + x_sampled = x_sampled.detach().cpu() + if x_sampled.shape[1] > 2: + x_sampled = x_sampled[:, 1:3] + axis.scatter( + x_sampled[:, 0], + x_sampled[:, 1], + s=0.2, + alpha=0.8, + linewidths=0, + c="midnightblue", + edgecolors=None, + ) + axis.set_xlim([-2, 2]) + axis.set_ylim([-2, 2]) + + +def plot_samples_density(x_data, x_sampled, **kwargs): + x_data = x_data.detach().cpu() + x_sampled = x_sampled.detach().cpu() + plt.figure(figsize=(12, 4)) + plt.subplot(121) + plot_samples(x_sampled, axis=plt.gca()) + + plt.subplot(122) + plot_samples(x_data, axis=plt.gca(), color="red") + plt.xlim(-2, 2) + plt.ylim(-2, 2) + + +def plot_flow(sample, trajectory, **kwargs): + traj = trajectory.detach().cpu() + sample = sample.detach().cpu() + n = 2000 + plt.figure(figsize=(6, 6)) + plt.scatter(sample[:n, 0], sample[:n, 1], s=10, alpha=0.8, c="black") + plt.scatter(traj[:, :n, 0], traj[:, :n, 1], s=0.2, alpha=0.2, c="olive") + plt.scatter(traj[-1, :n, 0], traj[-1, :n, 1], s=4, alpha=1, c="blue") + plt.legend(["Prior sample z(S)", "Flow", "z(0)"]) + + +def plot_2D_depth_trajectory( + s_span, trajectory, axis1=None, axis2=None, num_lines=200, **kwargs +): + if axis1 is None or axis2 is None: + fig = plt.figure(figsize=(8, 2)) + axis1 = fig.add_subplot(121) + axis2 = fig.add_subplot(122) + + # trajectory has shape [len(s_span), num_data_points, dim] originally + trajectory = trajectory.detach().permute(1, 2, 0).cpu() + + # subsample trajectories + num_lines = min(num_lines, len(trajectory)) + trajectory = trajectory[torch.randperm(num_lines)][:num_lines] + for traj_one in trajectory: + axis1.plot(s_span, traj_one[0], alpha=0.2) + axis2.plot(s_span, traj_one[1], alpha=0.2) + + axis1.set_xlabel(r"Depth") + axis1.set_ylabel(r"Dim. 0") + axis2.set_xlabel(r"Depth") + axis2.set_ylabel(r"Dim. 1") + + +def plot_static_vector_field(model, N=100, axis=None, **kwargs): + device = next(model.parameters()).device + model = model[1].defunc.m.net + x = torch.linspace(-2, 2, N) + y = torch.linspace(-2, 2, N) + + X, Y = torch.meshgrid(x, y) + U, V = torch.zeros(N, N), torch.zeros(N, N) + + for i in range(N): + for j in range(N): + p = torch.cat( + [X[i, j].reshape(1, 1), Y[i, j].reshape(1, 1)], 1 + ).to(device) + O = model(p).detach().cpu() + U[i, j], V[i, j] = O[0, 0], O[0, 1] + + # convert to cpu numpy + X, Y, U, V = [tnsr.cpu().numpy() for tnsr in (X, Y, U, V)] + + if axis is None: + fig = plt.figure(figsize=(3, 3)) + axis = fig.add_subplot(111) + + axis.contourf( + X, + Y, + np.sqrt(U ** 2 + V ** 2), + cmap="RdYlBu", + levels=1000, + alpha=0.6, + ) + + axis.streamplot( + X.T, + Y.T, + U.T, + V.T, + color="k", + density=1.5, + linewidth=0.7, + arrowsize=0.7, + arrowstyle="<|-", + ) + + axis.set_xlim([x.min(), x.max()]) + axis.set_ylim([y.min(), y.max()]) + axis.set_xlabel(r"$h_0$") + axis.set_ylabel(r"$h_1$") + axis.set_title("Learned Vector Field") + + +def prepare_data(model, loader, collect_from_loader=False, n_samp=2 ** 14): + """Prepare model and data and return as dict.""" + device = next(model.parameters()).device + + # collect prior from model + prior = None + for x_b, _ in loader: + prior = model(x_b.to(device))["prior"] + break + + # extract ffjord model + model = model.model + + # set s-span but keep old one around! + s_span_backup = copy.deepcopy(model[1].s_span) + model[1].s_span = torch.linspace(1, 0, 2).to(device) + + # s_span for trajectory + s_span_traj = torch.linspace(1, 0, 100) + + # preparing some data and samples for plotting + sample = prior.sample(torch.Size([n_samp])).to(device) + x_sampled = model(sample) + trajectory = model[1].trajectory( + Augmenter(1, 1)(sample), + s_span=s_span_traj.to(device), + ) + # scrapping first dimension := jacobian trace + trajectory = trajectory[:, :, 1:] + + # restore s-span + model[1].s_span = s_span_backup + + data = { + "sample": sample, + "x_sampled": x_sampled, + "s_span": s_span_traj, + "trajectory": trajectory, + "model": model, + "device": device, + } + + # collect data from loader + if collect_from_loader: + x_data = None + for x_b, _ in loader: + if x_data is None: + x_data = x_b + else: + x_data = torch.cat((x_data, x_b)) + x_data = x_data.to(device) + data["x_data"] = x_data + + return data + + +def plot_all(model, loader, plot_folder=None, all_p=False): + plt.style.use("default") + + # retrieve plotting kwargs + kwargs_plot = prepare_data(model, loader, True) + + def _plot_and_save(plt_handle, plt_name): + plt_handle(**kwargs_plot) + if plot_folder is not None: + os.makedirs(plot_folder, exist_ok=True) + fig = plt.gcf() + fig.savefig( + os.path.join(plot_folder, f"{plt_name}.pdf"), + bbox_inches="tight", + ) + plt.close(fig) + + _plot_and_save(plot_samples_density, "samples_density") + _plot_and_save(plot_static_vector_field, "static_vector_field") + + if all_p: + _plot_and_save(plot_dataset, "dataset") + _plot_and_save(plot_flow, "flow") diff --git a/paper/node/script/sizes/nn_.py b/paper/node/script/sizes/nn_.py new file mode 100644 index 0000000..b90c45e --- /dev/null +++ b/paper/node/script/sizes/nn_.py @@ -0,0 +1,567 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +""" +Created on Mon Dec 11 13:58:12 2017 + +@author: CW +""" + + +import math +import numpy as np + +import torch +import torch.nn as nn +from torch.nn import Module +from torch.nn import functional as F +from torch.nn.parameter import Parameter +from torch.nn.modules.utils import _pair +from torch.autograd import Variable + +# aliasing +N_ = None + + +delta = 1e-6 +softplus_ = nn.Softplus() +softplus = lambda x: softplus_(x) + delta +sigmoid_ = nn.Sigmoid() +sigmoid = lambda x: sigmoid_(x) * (1 - delta) + 0.5 * delta +sigmoid2 = lambda x: sigmoid(x) * 2.0 +logsigmoid = lambda x: -softplus(-x) +logit = lambda x: torch.log +log = lambda x: torch.log(x * 1e2) - np.log(1e2) +logit = lambda x: log(x) - log(1 - x) + + +def softmax(x, dim=-1): + e_x = torch.exp(x - x.max(dim=dim, keepdim=True)[0]) + out = e_x / e_x.sum(dim=dim, keepdim=True) + return out + + +sum1 = lambda x: x.sum(1) +sum_from_one = ( + lambda x: sum_from_one(sum1(x)) if len(x.size()) > 2 else sum1(x) +) + + +class Sigmoid(Module): + def forward(self, x): + return sigmoid(x) + + +class WNlinear(Module): + def __init__( + self, in_features, out_features, bias=True, mask=N_, norm=True + ): + super(WNlinear, self).__init__() + self.in_features = in_features + self.out_features = out_features + self.register_buffer("mask", mask) + self.norm = norm + self.direction = Parameter(torch.Tensor(out_features, in_features)) + self.scale = Parameter(torch.Tensor(out_features)) + if bias: + self.bias = Parameter(torch.Tensor(out_features)) + else: + self.register_parameter("bias", N_) + self.reset_parameters() + + def reset_parameters(self): + stdv = 1.0 / math.sqrt(self.direction.size(1)) + self.direction.data.uniform_(-stdv, stdv) + self.scale.data.uniform_(1, 1) + if self.bias is not N_: + self.bias.data.uniform_(-stdv, stdv) + + def forward(self, input): + if self.norm: + dir_ = self.direction + direction = dir_.div(dir_.pow(2).sum(1).sqrt()[:, N_]) + weight = self.scale[:, N_].mul(direction) + else: + weight = self.scale[:, N_].mul(self.direction) + if self.mask is not N_: + # weight = weight * getattr(self.mask, + # ('cpu', 'cuda')[weight.is_cuda])() + weight = weight * Variable(self.mask) + return F.linear(input, weight, self.bias) + + def __repr__(self): + return ( + self.__class__.__name__ + + "(" + + "in_features=" + + str(self.in_features) + + ", out_features=" + + str(self.out_features) + + ")" + ) + + +class CWNlinear(Module): + def __init__( + self, in_features, out_features, context_features, mask=N_, norm=True + ): + super(CWNlinear, self).__init__() + self.in_features = in_features + self.out_features = out_features + self.context_features = context_features + self.register_buffer("mask", mask) + self.norm = norm + self.direction = Parameter(torch.Tensor(out_features, in_features)) + self.cscale = nn.Linear(context_features, out_features) + self.cbias = nn.Linear(context_features, out_features) + self.reset_parameters() + self.cscale.weight.data.normal_(0, 0.001) + self.cbias.weight.data.normal_(0, 0.001) + + def reset_parameters(self): + self.direction.data.normal_(0, 0.001) + + def forward(self, inputs): + input, context = inputs + scale = self.cscale(context) + bias = self.cbias(context) + if self.norm: + dir_ = self.direction + direction = dir_.div(dir_.pow(2).sum(1).sqrt()[:, N_]) + weight = direction + else: + weight = self.direction + if self.mask is not N_: + # weight = weight * getattr(self.mask, + # ('cpu', 'cuda')[weight.is_cuda])() + weight = weight * Variable(self.mask) + return scale * F.linear(input, weight, None) + bias, context + + def __repr__(self): + return ( + self.__class__.__name__ + + "(" + + "in_features=" + + str(self.in_features) + + ", out_features=" + + str(self.out_features) + + ")" + ) + + +class WNBilinear(Module): + def __init__(self, in1_features, in2_features, out_features, bias=True): + super(WNBilinear, self).__init__() + self.in1_features = in1_features + self.in2_features = in2_features + self.out_features = out_features + self.direction = Parameter( + torch.Tensor(out_features, in1_features, in2_features) + ) + self.scale = Parameter(torch.Tensor(out_features)) + if bias: + self.bias = Parameter(torch.Tensor(out_features)) + else: + self.register_parameter("bias", N_) + self.reset_parameters() + + def reset_parameters(self): + stdv = 1.0 / math.sqrt(self.direction.size(1)) + self.direction.data.uniform_(-stdv, stdv) + self.scale.data.uniform_(1, 1) + if self.bias is not N_: + self.bias.data.uniform_(-stdv, stdv) + + def forward(self, input1, input2): + dir_ = self.direction + direction = dir_.div(dir_.pow(2).sum(1).sum(1).sqrt()[:, N_, N_]) + weight = self.scale[:, N_, N_].mul(direction) + return F.bilinear(input1, input2, weight, self.bias) + + def __repr__(self): + return ( + self.__class__.__name__ + + "(" + + "in1_features=" + + str(self.in1_features) + + ", in2_features=" + + str(self.in2_features) + + ", out_features=" + + str(self.out_features) + + ")" + ) + + +class _WNconvNd(Module): + def __init__( + self, + in_channels, + out_channels, + kernel_size, + stride, + padding, + dilation, + transposed, + output_padding, + groups, + bias, + ): + super(_WNconvNd, self).__init__() + if in_channels % groups != 0: + raise ValueError("in_channels must be divisible by groups") + if out_channels % groups != 0: + raise ValueError("out_channels must be divisible by groups") + self.in_channels = in_channels + self.out_channels = out_channels + self.kernel_size = kernel_size + self.stride = stride + self.padding = padding + self.dilation = dilation + self.transposed = transposed + self.output_padding = output_padding + self.groups = groups + + # weight – filters tensor (out_channels x in_channels/groups x kH x kW) + if transposed: + self.direction = Parameter( + torch.Tensor(in_channels, out_channels // groups, *kernel_size) + ) + self.scale = Parameter(torch.Tensor(in_channels)) + else: + self.direction = Parameter( + torch.Tensor(out_channels, in_channels // groups, *kernel_size) + ) + self.scale = Parameter(torch.Tensor(out_channels)) + if bias: + self.bias = Parameter(torch.Tensor(out_channels)) + else: + self.register_parameter("bias", N_) + self.reset_parameters() + + def reset_parameters(self): + n = self.in_channels + for k in self.kernel_size: + n *= k + stdv = 1.0 / math.sqrt(n) + self.direction.data.uniform_(-stdv, stdv) + self.scale.data.uniform_(1, 1) + if self.bias is not N_: + self.bias.data.uniform_(-stdv, stdv) + + def __repr__(self): + s = ( + "{name} ({in_channels}, {out_channels}, kernel_size={kernel_size}" + ", stride={stride}" + ) + if self.padding != (0,) * len(self.padding): + s += ", padding={padding}" + if self.dilation != (1,) * len(self.dilation): + s += ", dilation={dilation}" + if self.output_padding != (0,) * len(self.output_padding): + s += ", output_padding={output_padding}" + if self.groups != 1: + s += ", groups={groups}" + if self.bias is N_: + s += ", bias=False" + s += ")" + return s.format(name=self.__class__.__name__, **self.__dict__) + + +class WNconv2d(_WNconvNd): + def __init__( + self, + in_channels, + out_channels, + kernel_size, + stride=1, + padding=0, + dilation=1, + groups=1, + bias=True, + mask=N_, + norm=True, + ): + kernel_size = _pair(kernel_size) + stride = _pair(stride) + padding = _pair(padding) + dilation = _pair(dilation) + super(WNconv2d, self).__init__( + in_channels, + out_channels, + kernel_size, + stride, + padding, + dilation, + False, + _pair(0), + groups, + bias, + ) + + self.register_buffer("mask", mask) + self.norm = norm + + def forward(self, input): + if self.norm: + dir_ = self.direction + direction = dir_.div( + dir_.pow(2).sum(1).sum(1).sum(1).sqrt()[:, N_, N_, N_] + ) + weight = self.scale[:, N_, N_, N_].mul(direction) + else: + weight = self.scale[:, N_, N_, N_].mul(self.direction) + if self.mask is not None: + weight = weight * Variable(self.mask) + return F.conv2d( + input, + weight, + self.bias, + self.stride, + self.padding, + self.dilation, + self.groups, + ) + + +class CWNconv2d(_WNconvNd): + def __init__( + self, + context_features, + in_channels, + out_channels, + kernel_size, + stride=1, + padding=0, + dilation=1, + groups=1, + mask=N_, + norm=True, + ): + kernel_size = _pair(kernel_size) + stride = _pair(stride) + padding = _pair(padding) + dilation = _pair(dilation) + super(CWNconv2d, self).__init__( + in_channels, + out_channels, + kernel_size, + stride, + padding, + dilation, + False, + _pair(0), + groups, + False, + ) + + self.register_buffer("mask", mask) + self.norm = norm + self.cscale = nn.Linear(context_features, out_channels) + self.cbias = nn.Linear(context_features, out_channels) + + def forward(self, inputs): + input, context = inputs + scale = self.cscale(context)[:, :, N_, N_] + bias = self.cbias(context)[:, :, N_, N_] + if self.norm: + dir_ = self.direction + direction = dir_.div( + dir_.pow(2).sum(1).sum(1).sum(1).sqrt()[:, N_, N_, N_] + ) + weight = direction + else: + weight = self.direction + if self.mask is not None: + weight = weight * Variable(self.mask) + pre = F.conv2d( + input, + weight, + None, + self.stride, + self.padding, + self.dilation, + self.groups, + ) + return pre * scale + bias, context + + +class ResConv2d(nn.Module): + def __init__( + self, + in_channels, + out_channels, + kernel_size, + stride=1, + padding=0, + dilation=1, + groups=1, + bias=True, + activation=nn.ReLU(), + oper=WNconv2d, + ): + super(ResConv2d, self).__init__() + + self.conv_0h = oper( + in_channels, + out_channels, + kernel_size, + stride, + padding, + dilation, + groups, + bias, + ) + self.conv_h1 = oper(out_channels, out_channels, 3, 1, 1, 1, 1, True) + self.conv_01 = oper( + in_channels, + out_channels, + kernel_size, + stride, + padding, + dilation, + groups, + bias, + ) + + self.activation = activation + + def forward(self, input): + h = self.activation(self.conv_0h(input)) + out_nonlinear = self.conv_h1(h) + out_skip = self.conv_01(input) + return out_nonlinear + out_skip + + +class ResLinear(nn.Module): + def __init__( + self, + in_features, + out_features, + bias=True, + same_dim=False, + activation=nn.ReLU(), + oper=WNlinear, + ): + super(ResLinear, self).__init__() + + self.same_dim = same_dim + + self.dot_0h = oper(in_features, out_features, bias) + self.dot_h1 = oper(out_features, out_features, bias) + if not same_dim: + self.dot_01 = oper(in_features, out_features, bias) + + self.activation = activation + + def forward(self, input): + h = self.activation(self.dot_0h(input)) + out_nonlinear = self.dot_h1(h) + out_skip = input if self.same_dim else self.dot_01(input) + return out_nonlinear + out_skip + + +class GatingLinear(nn.Module): + def __init__(self, in_features, out_features, oper=WNlinear, **kwargs): + super(GatingLinear, self).__init__() + + self.dot = oper(in_features, out_features, **kwargs) + self.gate = oper(in_features, out_features, **kwargs) + + def forward(self, input): + h = self.dot(input) + s = sigmoid_(self.gate(input)) + return s * h + + +class Reshape(nn.Module): + def __init__(self, shape): + super(Reshape, self).__init__() + self.shape = shape + + def forward(self, input): + return input.view(self.shape) + + +class Slice(nn.Module): + def __init__(self, slc): + super(Slice, self).__init__() + self.slc = slc + + def forward(self, input): + return input.__getitem__(self.slc) + + +class SliceFactory(object): + def __init__(self): + pass + + def __getitem__(self, slc): + return Slice(slc) + + +slicer = SliceFactory() + + +class Lambda(nn.Module): + def __init__(self, function): + super(Lambda, self).__init__() + self.function = function + + def forward(self, input): + return self.function(input) + + +class SequentialFlow(nn.Sequential): + def sample(self, n=1, context=None, **kwargs): + dim = self[0].dim + if isinstance(dim, int): + dim = [ + dim, + ] + + spl = torch.autograd.Variable(torch.FloatTensor(n, *dim).normal_()) + lgd = torch.autograd.Variable( + torch.from_numpy(np.random.rand(n).astype("float32")) + ) + if context is None: + context = torch.autograd.Variable( + torch.from_numpy( + np.zeros((n, self[0].context_dim)).astype("float32") + ) + ) + + if hasattr(self, "gpu"): + if self.gpu: + spl = spl.cuda() + lgd = lgd.cuda() + context = context.cuda() + + return self.forward((spl, lgd, context)) + + def cuda(self): + self.gpu = True + return super(SequentialFlow, self).cuda() + + +class ContextWrapper(nn.Module): + def __init__(self, module): + super(ContextWrapper, self).__init__() + self.module = module + + def forward(self, inputs): + input, context = inputs + output = self.module.forward(input) + return output, context + + +if __name__ == "__main__": + + mdl = CWNlinear(2, 5, 3) + + inp = torch.autograd.Variable( + torch.from_numpy(np.random.rand(2, 2).astype("float32")) + ) + con = torch.autograd.Variable( + torch.from_numpy(np.random.rand(2, 3).astype("float32")) + ) + + print(mdl((inp, con))[0].size()) diff --git a/paper/node/script/sizes/sizes_maf.py b/paper/node/script/sizes/sizes_maf.py new file mode 100644 index 0000000..39de27a --- /dev/null +++ b/paper/node/script/sizes/sizes_maf.py @@ -0,0 +1,61 @@ +# %% just compute a couple of sizes + + +def made_size(l, h, d, k=None): + return int(1.5 * d * h + 0.5 * (l - 1) * h * h) + + +def nvp_size(l, h, d, k=10): + return int(2 * k * d * h + 2 * k * (l - 1) * h * h) + + +def maf_size(l, h, d, k=10): + return int(1.5 * k * d * h + 0.5 * k * (l - 1) * h * h) + + +def format_as_str(num): + if num / 1e9 > 1: + factor, suffix = 1e9, "B" + elif num / 1e6 > 1: + factor, suffix = 1e6, "M" + elif num / 1e3 > 1: + factor, suffix = 1e3, "K" + else: + factor, suffix = 1e0, "" + + num_factored = num / factor + + if num_factored / 1e2 > 1 or True: + num_rounded = str(int(round(num_factored))) + elif num_factored / 1e1 > 1: + num_rounded = f"{num_factored:.1f}" + else: + num_rounded = f"{num_factored:.2f}" + + return f"{num_rounded}{suffix} % {num}" + + +datasets = { + "power": {"l": 2, "h": 100, "d": 6}, + "gas": {"l": 2, "h": 100, "d": 8}, + "hepmass": {"l": 2, "h": 512, "d": 21}, + "miniboone": {"l": 2, "h": 512, "d": 43}, + "bsds300": {"l": 2, "h": 1024, "d": 63}, + "mnist": {"l": 1, "h": 1024, "d": 784, "k": 10}, + "cifar": {"l": 2, "h": 2048, "d": 3072, "k": 10}, +} + +networks = { + "MADE": made_size, + "RealNVP": nvp_size, + "MAF": maf_size, +} + +for net, handle in networks.items(): + print(net) + for dset, s_kwargs in datasets.items(): + print(f"{dset}: #params: {format_as_str(handle(**s_kwargs))}") + print("\n") + + +# miniboone ffjord: 820613 \ No newline at end of file diff --git a/paper/node/script/sizes/sizes_naf.py b/paper/node/script/sizes/sizes_naf.py new file mode 100644 index 0000000..27b03f2 --- /dev/null +++ b/paper/node/script/sizes/sizes_naf.py @@ -0,0 +1,1082 @@ +# %% + +import numpy as np +import torch +import torch.utils.data as data +import torch.nn as nn + +# import torch.optim as optim +from torch.autograd import Variable +from torchvision.transforms import transforms + + +import time +import json +import argparse, os + + +import torch +import torch.nn as nn +from torch.nn import Module +from torch.nn.parameter import Parameter +from torch.nn import functional as F +import nn_ as nn_ +from nn_ import log +from torch.autograd import Variable +import numpy as np + + +sum_from_one = nn_.sum_from_one + + +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +""" +Created on Mon Dec 11 13:58:12 2017 + +@author: CW +""" + + +import numpy as np + +import torch +import torch.nn as nn +from torch.nn import Module + + +from functools import reduce + +# aliasing +N_ = None + + +delta = 1e-6 +softplus_ = nn.Softplus() +softplus = lambda x: softplus_(x) + delta + + +tile = lambda x, r: np.tile(x, r).reshape(x.shape[0], x.shape[1] * r) + + +# %------------ MADE ------------% + + +def get_rank(max_rank, num_out): + rank_out = np.array([]) + while len(rank_out) < num_out: + rank_out = np.concatenate([rank_out, np.arange(max_rank)]) + excess = len(rank_out) - num_out + remove_ind = np.random.choice(max_rank, excess, False) + rank_out = np.delete(rank_out, remove_ind) + np.random.shuffle(rank_out) + return rank_out.astype("float32") + + +def get_mask_from_ranks(r1, r2): + return (r2[:, None] >= r1[None, :]).astype("float32") + + +def get_masks_all(ds, fixed_order=False, derank=1): + # ds: list of dimensions dx, d1, d2, ... dh, dx, + # (2 in/output + h hidden layers) + # derank only used for self connection, dim > 1 + dx = ds[0] + ms = list() + rx = get_rank(dx, dx) + if fixed_order: + rx = np.sort(rx) + r1 = rx + if dx != 1: + for d in ds[1:-1]: + r2 = get_rank(dx - derank, d) + ms.append(get_mask_from_ranks(r1, r2)) + r1 = r2 + r2 = rx - derank + ms.append(get_mask_from_ranks(r1, r2)) + else: + ms = [ + np.zeros([ds[i + 1], ds[i]]).astype("float32") + for i in range(len(ds) - 1) + ] + if derank == 1: + assert np.all(np.diag(reduce(np.dot, ms[::-1])) == 0), "wrong masks" + + return ms, rx + + +def get_masks(dim, dh, num_layers, num_outlayers, fixed_order=False, derank=1): + ms, rx = get_masks_all( + [ + dim, + ] + + [dh for i in range(num_layers - 1)] + + [ + dim, + ], + fixed_order, + derank, + ) + ml = ms[-1] + ml_ = ( + ( + ml.transpose(1, 0)[:, :, None] + * ( + [ + np.cast["float32"](1), + ] + * num_outlayers + ) + ) + .reshape(dh, dim * num_outlayers) + .transpose(1, 0) + ) + ms[-1] = ml_ + return ms, rx + + +class MADE(Module): + def __init__( + self, + dim, + hid_dim, + num_layers, + num_outlayers=1, + activation=nn.ELU(), + fixed_order=False, + derank=1, + ): + super(MADE, self).__init__() + + oper = nn_.WNlinear + + self.dim = dim + self.hid_dim = hid_dim + self.num_layers = num_layers + self.num_outlayers = num_outlayers + self.activation = activation + + ms, rx = get_masks( + dim, hid_dim, num_layers, num_outlayers, fixed_order, derank + ) + ms = [m for m in map(torch.from_numpy, ms)] + self.rx = rx + + sequels = list() + for i in range(num_layers - 1): + if i == 0: + sequels.append(oper(dim, hid_dim, True, ms[i], False)) + sequels.append(activation) + else: + sequels.append(oper(hid_dim, hid_dim, True, ms[i], False)) + sequels.append(activation) + + self.input_to_hidden = nn.Sequential(*sequels) + self.hidden_to_output = oper( + hid_dim, dim * num_outlayers, True, ms[-1] + ) + + def forward(self, input): + hid = self.input_to_hidden(input) + return self.hidden_to_output(hid).view( + -1, self.dim, self.num_outlayers + ) + + def randomize(self): + ms, rx = get_masks( + self.dim, self.hid_dim, self.num_layers, self.num_outlayers + ) + for i in range(self.num_layers - 1): + mask = torch.from_numpy(ms[i]) + if self.input_to_hidden[i * 2].mask.is_cuda: + mask = mask.cuda() + self.input_to_hidden[i * 2].mask.data.zero_().add_(mask) + self.rx = rx + + +class cMADE(Module): + def __init__( + self, + dim, + hid_dim, + context_dim, + num_layers, + num_outlayers=1, + activation=nn.ELU(), + fixed_order=False, + derank=1, + ): + super(cMADE, self).__init__() + + oper = nn_.CWNlinear + + self.dim = dim + self.hid_dim = hid_dim + self.num_layers = num_layers + self.context_dim = context_dim + self.num_outlayers = num_outlayers + self.activation = nn_.Lambda(lambda x: (activation(x[0]), x[1])) + + ms, rx = get_masks( + dim, hid_dim, num_layers, num_outlayers, fixed_order, derank + ) + ms = [m for m in map(torch.from_numpy, ms)] + self.rx = rx + + sequels = list() + for i in range(num_layers - 1): + if i == 0: + sequels.append(oper(dim, hid_dim, context_dim, ms[i], False)) + sequels.append(self.activation) + else: + sequels.append( + oper(hid_dim, hid_dim, context_dim, ms[i], False) + ) + sequels.append(self.activation) + + self.input_to_hidden = nn.Sequential(*sequels) + self.hidden_to_output = oper( + hid_dim, dim * num_outlayers, context_dim, ms[-1] + ) + + def forward(self, inputs): + input, context = inputs + hid, _ = self.input_to_hidden((input, context)) + out, _ = self.hidden_to_output((hid, context)) + return out.view(-1, self.dim, self.num_outlayers), context + + def randomize(self): + ms, rx = get_masks( + self.dim, self.hid_dim, self.num_layers, self.num_outlayers + ) + for i in range(self.num_layers - 1): + mask = torch.from_numpy(ms[i]) + if self.input_to_hidden[i * 2].mask.is_cuda: + mask = mask.cuda() + self.input_to_hidden[i * 2].mask.zero_().add_(mask) + self.rx = rx + + +class BaseFlow(Module): + def sample(self, n=1, context=None, **kwargs): + dim = self.dim + if isinstance(self.dim, int): + dim = [ + dim, + ] + + spl = Variable(torch.FloatTensor(n, *dim).normal_()) + lgd = Variable(torch.from_numpy(np.zeros(n).astype("float32"))) + if context is None: + context = Variable( + torch.from_numpy( + np.ones((n, self.context_dim)).astype("float32") + ) + ) + + if hasattr(self, "gpu"): + if self.gpu: + spl = spl.cuda() + lgd = lgd.cuda() + context = context.gpu() + + return self.forward((spl, lgd, context)) + + def cuda(self): + self.gpu = True + return super(BaseFlow, self).cuda() + + +class LinearFlow(BaseFlow): + def __init__( + self, dim, context_dim, oper=nn_.ResLinear, realify=nn_.softplus + ): + super(LinearFlow, self).__init__() + self.realify = realify + + self.dim = dim + self.context_dim = context_dim + + if type(dim) is int: + dim_ = dim + else: + dim_ = np.prod(dim) + + self.mean = oper(context_dim, dim_) + self.lstd = oper(context_dim, dim_) + + self.reset_parameters() + + def reset_parameters(self): + if isinstance(self.mean, nn_.ResLinear): + self.mean.dot_01.scale.data.uniform_(-0.001, 0.001) + self.mean.dot_h1.scale.data.uniform_(-0.001, 0.001) + self.mean.dot_01.bias.data.uniform_(-0.001, 0.001) + self.mean.dot_h1.bias.data.uniform_(-0.001, 0.001) + self.lstd.dot_01.scale.data.uniform_(-0.001, 0.001) + self.lstd.dot_h1.scale.data.uniform_(-0.001, 0.001) + if self.realify == nn_.softplus: + inv = np.log(np.exp(1 - nn_.delta) - 1) * 0.5 + self.lstd.dot_01.bias.data.uniform_(inv - 0.001, inv + 0.001) + self.lstd.dot_h1.bias.data.uniform_(inv - 0.001, inv + 0.001) + else: + self.lstd.dot_01.bias.data.uniform_(-0.001, 0.001) + self.lstd.dot_h1.bias.data.uniform_(-0.001, 0.001) + elif isinstance(self.mean, nn.Linear): + self.mean.weight.data.uniform_(-0.001, 0.001) + self.mean.bias.data.uniform_(-0.001, 0.001) + self.lstd.weight.data.uniform_(-0.001, 0.001) + if self.realify == nn_.softplus: + inv = np.log(np.exp(1 - nn_.delta) - 1) * 0.5 + self.lstd.bias.data.uniform_(inv - 0.001, inv + 0.001) + else: + self.lstd.bias.data.uniform_(-0.001, 0.001) + + def forward(self, inputs): + x, logdet, context = inputs + mean = self.mean(context) + lstd = self.lstd(context) + std = self.realify(lstd) + + if type(self.dim) is int: + x_ = mean + std * x + else: + size = x.size() + x_ = mean.view(size) + std.view(size) * x + logdet_ = sum_from_one(torch.log(std)) + logdet + return x_, logdet_, context + + +class BlockAffineFlow(Module): + # NICE, volume preserving + # x2' = x2 + nonLinfunc(x1) + + def __init__(self, dim1, dim2, context_dim, hid_dim, activation=nn.ELU()): + super(BlockAffineFlow, self).__init__() + self.dim1 = dim1 + self.dim2 = dim2 + self.actv = activation + + self.hid = nn_.WNBilinear(dim1, context_dim, hid_dim) + self.shift = nn_.WNBilinear(hid_dim, context_dim, dim2) + + def forward(self, inputs): + x, logdet, context = inputs + x1, x2 = x + + hid = self.actv(self.hid(x1, context)) + shift = self.shift(hid, context) + + x2_ = x2 + shift + + return (x1, x2_), 0, context + + +class IAF(BaseFlow): + def __init__( + self, + dim, + hid_dim, + context_dim, + num_layers, + activation=nn.ELU(), + realify=nn_.sigmoid, + fixed_order=False, + ): + super(IAF, self).__init__() + self.realify = realify + + self.dim = dim + self.context_dim = context_dim + + if type(dim) is int: + self.mdl = cMADE( + dim, + hid_dim, + context_dim, + num_layers, + 2, + activation, + fixed_order, + ) + self.reset_parameters() + + def reset_parameters(self): + self.mdl.hidden_to_output.cscale.weight.data.uniform_(-0.001, 0.001) + self.mdl.hidden_to_output.cscale.bias.data.uniform_(0.0, 0.0) + self.mdl.hidden_to_output.cbias.weight.data.uniform_(-0.001, 0.001) + self.mdl.hidden_to_output.cbias.bias.data.uniform_(0.0, 0.0) + if self.realify == nn_.softplus: + inv = np.log(np.exp(1 - nn_.delta) - 1) + self.mdl.hidden_to_output.cbias.bias.data[1::2].uniform_(inv, inv) + elif self.realify == nn_.sigmoid: + self.mdl.hidden_to_output.cbias.bias.data[1::2].uniform_(2.0, 2.0) + + def forward(self, inputs): + x, logdet, context = inputs + out, _ = self.mdl((x, context)) + if isinstance(self.mdl, cMADE): + mean = out[:, :, 0] + lstd = out[:, :, 1] + + std = self.realify(lstd) + + if self.realify == nn_.softplus: + x_ = mean + std * x + elif self.realify == nn_.sigmoid: + x_ = (-std + 1.0) * mean + std * x + elif self.realify == nn_.sigmoid2: + x_ = (-std + 2.0) * mean + std * x + logdet_ = sum_from_one(torch.log(std)) + logdet + return x_, logdet_, context + + +class IAF_VP(BaseFlow): + def __init__( + self, + dim, + hid_dim, + context_dim, + num_layers, + activation=nn.ELU(), + fixed_order=True, + ): + super(IAF_VP, self).__init__() + + self.dim = dim + self.context_dim = context_dim + + if type(dim) is int: + self.mdl = cMADE( + dim, + hid_dim, + context_dim, + num_layers, + 1, + activation, + fixed_order, + ) + self.reset_parameters() + + def reset_parameters(self): + self.mdl.hidden_to_output.cscale.weight.data.uniform_(-0.001, 0.001) + self.mdl.hidden_to_output.cscale.bias.data.uniform_(0.0, 0.0) + self.mdl.hidden_to_output.cbias.weight.data.uniform_(-0.001, 0.001) + self.mdl.hidden_to_output.cbias.bias.data.uniform_(0.0, 0.0) + + def forward(self, inputs): + x, logdet, context = inputs + out, _ = self.mdl((x, context)) + mean = out[:, :, 0] + x_ = mean + x + return x_, logdet, context + + +class IAF_DSF(BaseFlow): + + mollify = 0.0 + + def __init__( + self, + dim, + hid_dim, + context_dim, + num_layers, + activation=nn.ELU(), + fixed_order=False, + num_ds_dim=4, + num_ds_layers=1, + num_ds_multiplier=3, + ): + super(IAF_DSF, self).__init__() + + self.dim = dim + self.context_dim = context_dim + self.num_ds_dim = num_ds_dim + self.num_ds_layers = num_ds_layers + + if type(dim) is int: + self.mdl = cMADE( + dim, + hid_dim, + context_dim, + num_layers, + num_ds_multiplier * (hid_dim // dim) * num_ds_layers, + activation, + fixed_order, + ) + self.out_to_dsparams = nn.Conv1d( + num_ds_multiplier * (hid_dim // dim) * num_ds_layers, + 3 * num_ds_layers * num_ds_dim, + 1, + ) + self.reset_parameters() + + self.sf = SigmoidFlow(num_ds_dim) + + def reset_parameters(self): + self.out_to_dsparams.weight.data.uniform_(-0.001, 0.001) + self.out_to_dsparams.bias.data.uniform_(0.0, 0.0) + + inv = np.log(np.exp(1 - nn_.delta) - 1) + for l in range(self.num_ds_layers): + nc = self.num_ds_dim + nparams = nc * 3 + s = l * nparams + self.out_to_dsparams.bias.data[s : s + nc].uniform_(inv, inv) + + def forward(self, inputs): + x, logdet, context = inputs + out, _ = self.mdl((x, context)) + if isinstance(self.mdl, cMADE): + out = out.permute(0, 2, 1) + dsparams = self.out_to_dsparams(out).permute(0, 2, 1) + nparams = self.num_ds_dim * 3 + + mollify = self.mollify + h = x.view(x.size(0), -1) + for i in range(self.num_ds_layers): + params = dsparams[:, :, i * nparams : (i + 1) * nparams] + h, logdet = self.sf(h, logdet, params, mollify) + + return h, logdet, context + + +class SigmoidFlow(BaseFlow): + def __init__(self, num_ds_dim=4): + super(SigmoidFlow, self).__init__() + self.num_ds_dim = num_ds_dim + + self.act_a = lambda x: nn_.softplus(x) + self.act_b = lambda x: x + self.act_w = lambda x: nn_.softmax(x, dim=2) + + def forward(self, x, logdet, dsparams, mollify=0.0, delta=nn_.delta): + + ndim = self.num_ds_dim + a_ = self.act_a(dsparams[:, :, 0 * ndim : 1 * ndim]) + b_ = self.act_b(dsparams[:, :, 1 * ndim : 2 * ndim]) + w = self.act_w(dsparams[:, :, 2 * ndim : 3 * ndim]) + + a = a_ * (1 - mollify) + 1.0 * mollify + b = b_ * (1 - mollify) + 0.0 * mollify + + pre_sigm = a * x[:, :, None] + b + sigm = torch.sigmoid(pre_sigm) + x_pre = torch.sum(w * sigm, dim=2) + x_pre_clipped = x_pre * (1 - delta) + delta * 0.5 + x_ = log(x_pre_clipped) - log(1 - x_pre_clipped) + xnew = x_ + + logj = ( + F.log_softmax(dsparams[:, :, 2 * ndim : 3 * ndim], dim=2) + + nn_.logsigmoid(pre_sigm) + + nn_.logsigmoid(-pre_sigm) + + log(a) + ) + + logj = torch.exp(logj, 2).sum(2) + logdet_ = ( + logj + + np.log(1 - delta) + - (log(x_pre_clipped) + log(-x_pre_clipped + 1)) + ) + logdet = logdet_.sum(1) + logdet + + return xnew, logdet + + +class IAF_DDSF(BaseFlow): + def __init__( + self, + dim, + hid_dim, + context_dim, + num_layers, + activation=nn.ELU(), + fixed_order=False, + num_ds_dim=4, + num_ds_layers=1, + num_ds_multiplier=3, + ): + super(IAF_DDSF, self).__init__() + + self.dim = dim + self.context_dim = context_dim + self.num_ds_dim = num_ds_dim + self.num_ds_layers = num_ds_layers + + if type(dim) is int: + self.mdl = cMADE( + dim, + hid_dim, + context_dim, + num_layers, + int(num_ds_multiplier * (hid_dim / dim) * num_ds_layers), + activation, + fixed_order, + ) + + num_dsparams = 0 + for i in range(num_ds_layers): + if i == 0: + in_dim = 1 + else: + in_dim = num_ds_dim + if i == num_ds_layers - 1: + out_dim = 1 + else: + out_dim = num_ds_dim + + u_dim = in_dim + w_dim = num_ds_dim + a_dim = b_dim = num_ds_dim + num_dsparams += u_dim + w_dim + a_dim + b_dim + + self.add_module( + "sf{}".format(i), DenseSigmoidFlow(in_dim, num_ds_dim, out_dim) + ) + if type(dim) is int: + self.out_to_dsparams = nn.Conv1d( + int(num_ds_multiplier * (hid_dim / dim) * num_ds_layers), + int(num_dsparams), + 1, + ) + else: + self.out_to_dsparams = nn.Conv1d( + num_ds_multiplier * (hid_dim / dim[0]) * num_ds_layers, + num_dsparams, + 1, + ) + + self.reset_parameters() + + def reset_parameters(self): + self.out_to_dsparams.weight.data.uniform_(-0.001, 0.001) + self.out_to_dsparams.bias.data.uniform_(0.0, 0.0) + + def forward(self, inputs): + x, logdet, context = inputs + out, _ = self.mdl((x, context)) + out = out.permute(0, 2, 1) + dsparams = self.out_to_dsparams(out).permute(0, 2, 1) + + start = 0 + + h = x.view(x.size(0), -1)[:, :, None] + n = x.size(0) + dim = self.dim if type(self.dim) is int else self.dim[0] + lgd = Variable( + torch.from_numpy(np.zeros((n, dim, 1, 1)).astype("float32")) + ) + if self.out_to_dsparams.weight.is_cuda: + lgd = lgd.cuda() + for i in range(self.num_ds_layers): + if i == 0: + in_dim = 1 + else: + in_dim = self.num_ds_dim + if i == self.num_ds_layers - 1: + out_dim = 1 + else: + out_dim = self.num_ds_dim + + u_dim = in_dim + w_dim = self.num_ds_dim + a_dim = b_dim = self.num_ds_dim + end = start + u_dim + w_dim + a_dim + b_dim + + params = dsparams[:, :, start:end] + h, lgd = getattr(self, "sf{}".format(i))(h, lgd, params) + start = end + + assert out_dim == 1, "last dsf out dim should be 1" + return h[:, :, 0], lgd[:, :, 0, 0].sum(1) + logdet, context + + +class DenseSigmoidFlow(BaseFlow): + def __init__(self, in_dim, hidden_dim, out_dim): + super(DenseSigmoidFlow, self).__init__() + self.in_dim = in_dim + self.hidden_dim = hidden_dim + self.out_dim = out_dim + + self.act_a = lambda x: nn_.softplus(x) + self.act_b = lambda x: x + self.act_w = lambda x: nn_.softmax(x, dim=3) + self.act_u = lambda x: nn_.softmax(x, dim=3) + + self.u_ = Parameter(torch.Tensor(hidden_dim, in_dim)) + self.w_ = Parameter(torch.Tensor(out_dim, hidden_dim)) + + self.reset_parameters() + + def reset_parameters(self): + self.u_.data.uniform_(-0.001, 0.001) + self.w_.data.uniform_(-0.001, 0.001) + + def forward(self, x, logdet, dsparams): + inv = np.log(np.exp(1 - nn_.delta) - 1) + ndim = self.hidden_dim + pre_u = ( + self.u_[None, None, :, :] + + dsparams[:, :, -self.in_dim :][:, :, None, :] + ) + pre_w = ( + self.w_[None, None, :, :] + + dsparams[:, :, 2 * ndim : 3 * ndim][:, :, None, :] + ) + a = self.act_a(dsparams[:, :, 0 * ndim : 1 * ndim] + inv) + b = self.act_b(dsparams[:, :, 1 * ndim : 2 * ndim]) + w = self.act_w(pre_w) + u = self.act_u(pre_u) + + pre_sigm = torch.sum(u * a[:, :, :, None] * x[:, :, None, :], 3) + b + sigm = torch.sigmoid(pre_sigm) + x_pre = torch.sum(w * sigm[:, :, None, :], dim=3) + x_pre_clipped = x_pre * (1 - nn_.delta) + nn_.delta * 0.5 + x_ = log(x_pre_clipped) - log(1 - x_pre_clipped) + xnew = x_ + + logj = ( + F.log_softmax(pre_w, dim=3) + + nn_.logsigmoid(pre_sigm[:, :, None, :]) + + nn_.logsigmoid(-pre_sigm[:, :, None, :]) + + log(a[:, :, None, :]) + ) + # n, d, d2, dh + + logj = ( + logj[:, :, :, :, None] + + F.log_softmax(pre_u, dim=3)[:, :, None, :, :] + ) + # n, d, d2, dh, d1 + + logj = torch.exp(logj, 3).sum(3) + # n, d, d2, d1 + + logdet_ = ( + logj + + np.log(1 - nn_.delta) + - (log(x_pre_clipped) + log(-x_pre_clipped + 1))[:, :, :, None] + ) + + logdet = torch.exp( + logdet_[:, :, :, :, None] + logdet[:, :, None, :, :], 3 + ).sum(3) + # n, d, d2, d1, d0 -> n, d, d2, d0 + + return xnew, logdet + + +class FlipFlow(BaseFlow): + def __init__(self, dim): + self.dim = dim + super(FlipFlow, self).__init__() + + def forward(self, inputs): + input, logdet, context = inputs + + dim = self.dim + index = Variable( + getattr( + torch.arange(input.size(dim) - 1, -1, -1), + ("cpu", "cuda")[input.is_cuda], + )().long() + ) + + output = torch.index_select(input, dim, index) + + return output, logdet, context + + +class Sigmoid(BaseFlow): + def __init__(self): + super(Sigmoid, self).__init__() + + def forward(self, inputs): + if len(inputs) == 2: + input, logdet = inputs + elif len(inputs) == 3: + input, logdet, context = inputs + else: + raise (Exception("inputs length not correct")) + + output = F.sigmoid(input) + logdet += sum_from_one(-F.softplus(input) - F.softplus(-input)) + + if len(inputs) == 2: + return output, logdet + elif len(inputs) == 3: + return output, logdet, context + else: + raise (Exception("inputs length not correct")) + + +class Logit(BaseFlow): + def __init__(self): + super(Logit, self).__init__() + + def forward(self, inputs): + if len(inputs) == 2: + input, logdet = inputs + elif len(inputs) == 3: + input, logdet, context = inputs + else: + raise (Exception("inputs length not correct")) + + output = log(input) - log(1 - input) + logdet -= sum_from_one(log(input) + log(-input + 1)) + + if len(inputs) == 2: + return output, logdet + elif len(inputs) == 3: + return output, logdet, context + else: + raise (Exception("inputs length not correct")) + + +class Shift(BaseFlow): + def __init__(self, b): + self.b = b + super(Shift, self).__init__() + + def forward(self, inputs): + if len(inputs) == 2: + input, logdet = inputs + elif len(inputs) == 3: + input, logdet, context = inputs + else: + raise (Exception("inputs length not correct")) + + output = input + self.b + + if len(inputs) == 2: + return output, logdet + elif len(inputs) == 3: + return output, logdet, context + else: + raise (Exception("inputs length not correct")) + + +class Scale(BaseFlow): + def __init__(self, g): + self.g = g + super(Scale, self).__init__() + + def forward(self, inputs): + if len(inputs) == 2: + input, logdet = inputs + elif len(inputs) == 3: + input, logdet, context = inputs + else: + raise (Exception("inputs length not correct")) + + output = input * self.g + logdet += np.log(np.abs(self.g)) * np.prod(input.size()[1:]) + + if len(inputs) == 2: + return output, logdet + elif len(inputs) == 3: + return output, logdet, context + else: + raise (Exception("inputs length not correct")) + + +class MAF(object): + def __init__(self, args, p): + + self.args = args + self.__dict__.update(args.__dict__) + self.p = p + + dim = p + dimc = 1 + dimh = args.dimh + flowtype = args.flowtype + num_flow_layers = args.num_flow_layers + num_ds_dim = args.num_ds_dim + num_ds_layers = args.num_ds_layers + fixed_order = args.fixed_order + + act = nn.ELU() + if flowtype == "affine": + flow = IAF + elif flowtype == "dsf": + flow = lambda **kwargs: IAF_DSF( + num_ds_dim=num_ds_dim, num_ds_layers=num_ds_layers, **kwargs + ) + elif flowtype == "ddsf": + flow = lambda **kwargs: IAF_DDSF( + num_ds_dim=num_ds_dim, num_ds_layers=num_ds_layers, **kwargs + ) + + sequels = [ + nn_.SequentialFlow( + flow( + dim=dim, + hid_dim=dimh, + context_dim=dimc, + num_layers=args.num_hid_layers + 1, + activation=act, + fixed_order=fixed_order, + ), + FlipFlow(1), + ) + for i in range(num_flow_layers) + ] + [ + LinearFlow(dim, dimc), + ] + + self.flow = nn.Sequential(*sequels) + + +# ============================================================================= +# main +# ============================================================================= + + +"""parsing and configuration""" + + +def parse_args(): + desc = "MAF" + parser = argparse.ArgumentParser(description=desc) + + parser.add_argument( + "--dataset", + type=str, + default="miniboone", + choices=["power", "gas", "hepmass", "miniboone", "bsds300"], + ) + parser.add_argument( + "--epoch", type=int, default=400, help="The number of epochs to run" + ) + parser.add_argument( + "--batch_size", type=int, default=100, help="The size of batch" + ) + parser.add_argument( + "--save_dir", + type=str, + default="models", + help="Directory name to save the model", + ) + parser.add_argument( + "--result_dir", + type=str, + default="results", + help="Directory name to save the generated images", + ) + parser.add_argument( + "--log_dir", + type=str, + default="logs", + help="Directory name to save training logs", + ) + parser.add_argument("--seed", type=int, default=1993, help="Random seed") + parser.add_argument( + "--fn", type=str, default="0", help="Filename of model to be loaded" + ) + parser.add_argument( + "--to_train", type=int, default=1, help="1 if to train 0 if not" + ) + parser.add_argument("--lr", type=float, default=0.0001) + parser.add_argument("--clip", type=float, default=5.0) + parser.add_argument("--beta1", type=float, default=0.9) + parser.add_argument("--beta2", type=float, default=0.999) + parser.add_argument("--amsgrad", type=int, default=0) + parser.add_argument("--polyak", type=float, default=0.0) + parser.add_argument("--cuda", type=bool, default=False) + + parser.add_argument("--dimh", type=int, default=100) + parser.add_argument("--flowtype", type=str, default="ddsf") + parser.add_argument("--num_flow_layers", type=int, default=10) + parser.add_argument("--num_hid_layers", type=int, default=1) + parser.add_argument("--num_ds_dim", type=int, default=16) + parser.add_argument("--num_ds_layers", type=int, default=1) + parser.add_argument( + "--fixed_order", + type=bool, + default=True, + help="Fix the made ordering to be the given order", + ) + + return check_args(parser.parse_args()) + + +"""checking arguments""" + + +def check_args(args): + # --save_dir + if not os.path.exists(args.save_dir): + os.makedirs(args.save_dir) + + # --result_dir + if not os.path.exists(args.result_dir + "_" + args.dataset): + os.makedirs(args.result_dir + "_" + args.dataset) + + # --result_dir + if not os.path.exists(args.log_dir): + os.makedirs(args.log_dir) + + # --epoch + try: + assert args.epoch >= 1 + except: + print("number of epochs must be larger than or equal to one") + + # --batch_size + try: + assert args.batch_size >= 1 + except: + print("batch size must be larger than or equal to one") + + return args + + +datasets = { + "power": {"d": 6, "dimh": 100, "num_hid_layers": 2}, + "gas": {"d": 8, "dimh": 100, "num_hid_layers": 2}, + "hepmass": {"d": 21, "dimh": 512, "num_hid_layers": 2}, + "miniboone": {"d": 43, "dimh": 512, "num_hid_layers": 1}, + "bsds300": {"d": 63, "dimh": 1024, "num_hid_layers": 2}, +} + + +def format_as_str(num): + if num / 1e9 > 1: + factor, suffix = 1e9, "B" + elif num / 1e6 > 1: + factor, suffix = 1e6, "M" + elif num / 1e3 > 1: + factor, suffix = 1e3, "K" + else: + factor, suffix = 1e0, "" + + num_factored = num / factor + + if num_factored / 1e2 > 1 or True: + num_rounded = str(int(round(num_factored))) + elif num_factored / 1e1 > 1: + num_rounded = f"{num_factored:.1f}" + else: + num_rounded = f"{num_factored:.2f}" + + return f"{num_rounded}{suffix} % {num}" + + +def naf_size(d, **kwargs): + from torchprune.util.net import NetHandle + + args = parse_args() + for key, val in kwargs.items(): + setattr(args, key, val) + model = MAF(args, d) + model = NetHandle(model.flow) + return model.size() + + +for dset, s_kwargs in datasets.items(): + print(f"{dset}: #params: {format_as_str(naf_size(**s_kwargs))}") + print("\n") diff --git a/paper/node/script/sizes/sizes_sos.py b/paper/node/script/sizes/sizes_sos.py new file mode 100644 index 0000000..af5dc28 --- /dev/null +++ b/paper/node/script/sizes/sizes_sos.py @@ -0,0 +1,459 @@ +# %% +import torch +import torch.nn as nn +import torch.nn.functional as F +import numpy as np +import math + +from torchprune.util.net import NetHandle + + +def get_mask(in_features, out_features, in_flow_features, mask_type=None): + """ + mask_type: input | None | output + + See Figure 1 for a better illustration: + https://arxiv.org/pdf/1502.03509.pdf + """ + if mask_type == "input": + in_degrees = torch.arange(in_features) % in_flow_features + else: + in_degrees = torch.arange(in_features) % (in_flow_features - 1) + + if mask_type == "output": + out_degrees = torch.arange(out_features) % in_flow_features - 1 + else: + out_degrees = torch.arange(out_features) % (in_flow_features - 1) + + return (out_degrees.unsqueeze(-1) >= in_degrees.unsqueeze(0)).float() + + +class MaskedLinear(nn.Linear): + def __init__(self, in_features, out_features, mask, bias=True): + super(MaskedLinear, self).__init__(in_features, out_features, bias) + self.register_buffer("mask", mask) + + def forward(self, inputs): + return F.linear(inputs, self.weight * self.mask, self.bias) + + +class ConditionerNet(nn.Module): + def __init__(self, input_size, hidden_size, k, m, n_layers=1): + super().__init__() + self.k = k + self.m = m + self.input_size = input_size + self.output_size = k * self.m * input_size + input_size + self.network = self._make_net( + input_size, hidden_size, self.output_size, n_layers + ) + + def _make_net(self, input_size, hidden_size, output_size, n_layers): + if self.input_size > 1: + input_mask = get_mask( + input_size, hidden_size, input_size, mask_type="input" + ) + hidden_mask = get_mask(hidden_size, hidden_size, input_size) + output_mask = get_mask( + hidden_size, output_size, input_size, mask_type="output" + ) + + network = nn.Sequential( + MaskedLinear(input_size, hidden_size, input_mask), + nn.ReLU(), + MaskedLinear(hidden_size, hidden_size, hidden_mask), + nn.ReLU(), + MaskedLinear(hidden_size, output_size, output_mask), + ) + else: + network = nn.Sequential( + nn.Linear(input_size, hidden_size), + nn.ReLU(), + nn.Linear(hidden_size, hidden_size), + nn.ReLU(), + nn.Linear(hidden_size, output_size), + ) + + """ + for module in network.modules(): + if isinstance(module, nn.Linear): + nn.init.orthogonal_(module.weight) + module.bias.data.fill_(0) + """ + + return network + + def forward(self, inputs): + batch_size = inputs.size(0) + params = self.network(inputs) + i = self.k * self.m * self.input_size + c = ( + params[:, :i] + .view(batch_size, -1, self.input_size) + .transpose(1, 2) + .view(batch_size, self.input_size, self.k, self.m, 1) + ) + const = params[:, i:].view(batch_size, self.input_size) + C = torch.matmul(c, c.transpose(3, 4)) + return C, const + + +# +# SOS Block: +# + + +class SOSFlow(nn.Module): + @staticmethod + def power(z, k): + return z ** (torch.arange(k).float().to(z.device)) + + def __init__(self, input_size, hidden_size, k, r, n_layers=1): + super().__init__() + self.k = k + self.m = r + 1 + + self.conditioner = ConditionerNet( + input_size, hidden_size, k, self.m, n_layers + ) + self.register_buffer("filter", self._make_filter()) + + def _make_filter(self): + n = torch.arange(self.m).unsqueeze(1) + e = torch.ones(self.m).unsqueeze(1).long() + filter = (n.mm(e.transpose(0, 1))) + (e.mm(n.transpose(0, 1))) + 1 + return filter.float() + + def forward(self, inputs, mode="direct"): + batch_size, input_size = inputs.size(0), inputs.size(1) + C, const = self.conditioner(inputs) + X = SOSFlow.power(inputs.unsqueeze(-1), self.m).view( + batch_size, input_size, 1, self.m, 1 + ) # bs x d x 1 x m x 1 + Z = self._transform(X, C / self.filter) * inputs + const + logdet = torch.log(torch.abs(self._transform(X, C))).sum( + dim=1, keepdim=True + ) + return Z, logdet + + def _transform(self, X, C): + CX = torch.matmul(C, X) # bs x d x k x m x 1 + XCX = torch.matmul(X.transpose(3, 4), CX) # bs x d x k x 1 x 1 + summed = XCX.squeeze(-1).squeeze(-1).sum(-1) # bs x d + return summed + + def _jacob(self, inputs, mode="direct"): + X = inputs.clone() + X.requires_grad_() + X.retain_grad() + d = X.size(0) + + X_in = X.unsqueeze(0) + C, const = self.conditioner(X_in) + Xpow = SOSFlow.power(X_in.unsqueeze(-1), self.m).view( + 1, d, 1, self.m, 1 + ) # bs x d x 1 x m x 1 + Z = (self._transform(Xpow, C / self.filter) * X_in + const).view(-1) + + J = torch.zeros(d, d) + for i in range(d): + self.zero_grad() + Z[i].backward(retain_graph=True) + J[i, :] = X.grad + + del X, X_in, C, const, Xpow, Z + return J + + +class MADE(nn.Module): + """An implementation of MADE + (https://arxiv.org/abs/1502.03509s). + """ + + def __init__(self, num_inputs, num_hidden, act="relu", pre_exp_tanh=False): + super(MADE, self).__init__() + + activations = {"relu": nn.ReLU, "sigmoid": nn.Sigmoid, "tanh": nn.Tanh} + act_func = activations[act] + + input_mask = get_mask( + num_inputs, num_hidden, num_inputs, mask_type="input" + ) + hidden_mask = get_mask(num_hidden, num_hidden, num_inputs) + output_mask = get_mask( + num_hidden, num_inputs * 2, num_inputs, mask_type="output" + ) + + self.joiner = MaskedLinear(num_inputs, num_hidden, input_mask) + + self.trunk = nn.Sequential( + act_func(), + MaskedLinear(num_hidden, num_hidden, hidden_mask), + act_func(), + MaskedLinear(num_hidden, num_inputs * 2, output_mask), + ) + + def forward(self, inputs, mode="direct"): + if mode == "direct": + h = self.joiner(inputs) + m, a = self.trunk(h).chunk(2, 1) + u = (inputs - m) * torch.exp(-a) + return u, -a.sum(-1, keepdim=True) + + else: + x = torch.zeros_like(inputs) + for i_col in range(inputs.shape[1]): + h = self.joiner(x) + m, a = self.trunk(h).chunk(2, 1) + x[:, i_col] = ( + inputs[:, i_col] * torch.exp(a[:, i_col]) + m[:, i_col] + ) + return x, -a.sum(-1, keepdim=True) + + def _jacob(self, inputs): + X = inputs.clone() + X.requires_grad_() + X.retain_grad() + d = X.size(0) + + X_in = X.unsqueeze(0) + + h = self.joiner(X_in) + m, a = self.trunk(h).chunk(2, 1) + u = ((X_in - m) * torch.exp(-a)).view(-1) + + J = torch.zeros(d, d) + for i in range(d): + self.zero_grad() + u[i].backward(retain_graph=True) + J[i, :] = X.grad + + del X, X_in, h, m, a, u + return J + + +class BatchNormFlow(nn.Module): + """An implementation of a batch normalization layer from + Density estimation using Real NVP + (https://arxiv.org/abs/1605.08803). + """ + + def __init__(self, num_inputs, momentum=0.0, eps=1e-5): + super(BatchNormFlow, self).__init__() + + self.log_gamma = nn.Parameter(torch.zeros(num_inputs)) + self.beta = nn.Parameter(torch.zeros(num_inputs)) + self.momentum = momentum + self.eps = eps + + self.register_buffer("running_mean", torch.zeros(num_inputs)) + self.register_buffer("running_var", torch.ones(num_inputs)) + + def forward(self, inputs, mode="direct"): + if mode == "direct": + if True: # self.training: + self.batch_mean = inputs.mean(0) + self.batch_var = (inputs - self.batch_mean).pow(2).mean( + 0 + ) + self.eps + + self.running_mean.mul_(self.momentum) + self.running_var.mul_(self.momentum) + + self.running_mean.add_( + self.batch_mean.data * (1 - self.momentum) + ) + self.running_var.add_( + self.batch_var.data * (1 - self.momentum) + ) + + mean = self.batch_mean + var = self.batch_var + else: + mean = self.running_mean + var = self.running_var + + x_hat = (inputs - mean) / var.sqrt() + y = torch.exp(self.log_gamma) * x_hat + self.beta + return y, (self.log_gamma - 0.5 * torch.log(var)).sum( + -1, keepdim=True + ) + else: + if True: # self.training: + mean = self.batch_mean + var = self.batch_var + else: + mean = self.running_mean + var = self.running_var + + x_hat = (inputs - self.beta) / torch.exp(self.log_gamma) + + y = x_hat * var.sqrt() + mean + + return y, (-self.log_gamma + 0.5 * torch.log(var)).sum( + -1, keepdim=True + ) + + def _jacob(self, X): + return None + + +class Reverse(nn.Module): + """An implementation of a reversing layer from + Density estimation using Real NVP + (https://arxiv.org/abs/1605.08803). + """ + + def __init__(self, num_inputs): + super(Reverse, self).__init__() + self.perm = np.array(np.arange(0, num_inputs)[::-1]) + self.inv_perm = np.argsort(self.perm) + + def forward(self, inputs, mode="direct"): + if mode == "direct": + return inputs[:, self.perm], torch.zeros( + inputs.size(0), 1, device=inputs.device + ) + else: + return inputs[:, self.inv_perm], torch.zeros( + inputs.size(0), 1, device=inputs.device + ) + + def _jacob(self, X): + return None + + +class FlowSequential(nn.Sequential): + """A sequential container for flows. + In addition to a forward pass it implements a backward pass and + computes log jacobians. + """ + + def forward(self, inputs, mode="direct", logdets=None): + """Performs a forward or backward pass for flow modules. + Args: + inputs: a tuple of inputs and logdets + mode: to run direct computation or inverse + """ + self.num_inputs = inputs.size(-1) + + if logdets is None: + logdets = torch.zeros(inputs.size(0), 1, device=inputs.device) + + assert mode in ["direct", "inverse"] + if mode == "direct": + for module in self._modules.values(): + inputs, logdet = module(inputs, mode) + logdets += logdet + else: + for module in reversed(self._modules.values()): + inputs, logdet = module(inputs, mode) + logdets += logdet + + return inputs, logdets + + def evaluate(self, inputs): + N = len(self._modules) + outputs = torch.zeros( + N + 1, inputs.size(0), inputs.size(1), device=inputs.device + ) + outputs[0, :, :] = inputs + logdets = torch.zeros(N, inputs.size(0), 1, device=inputs.device) + for i in range(N): + outputs[i + 1, :, :], logdets[i, :, :] = self._modules[str(i)]( + outputs[i, :, :], mode="direct" + ) + return outputs, logdets + + def log_probs(self, inputs): + u, log_jacob = self(inputs) + log_probs = (-0.5 * u.pow(2) - 0.5 * math.log(2 * math.pi)).sum( + -1, keepdim=True + ) + return (log_probs + log_jacob).sum(-1, keepdim=True) + + def sample(self, num_samples=None, noise=None, cond_inputs=None): + if noise is None: + noise = torch.Tensor(num_samples, self.num_inputs).normal_() + device = next(self.parameters()).device + noise = noise.to(device) + if cond_inputs is not None: + cond_inputs = cond_inputs.to(device) + samples = self.forward(noise, cond_inputs, mode="inverse")[0] + return samples + + def jacobians(self, X): + assert len(X.size()) == 1 + N = len(self._modules) + num_inputs = X.size(-1) + jacobians = torch.zeros(N, num_inputs, num_inputs) + + n_jacob = 0 + for i in range(N): + J_i = self._modules[str(i)]._jacob(X) + if J_i is not None: + jacobians[n_jacob, :, :] = J_i + n_jacob += 1 + del J_i + + return jacobians[:n_jacob, :, :] + + +def build_model(input_size, hidden_size, k, r, n_blocks): + modules = [] + for i in range(n_blocks): + modules += [ + SOSFlow(input_size, hidden_size, k, r), + BatchNormFlow(input_size), + Reverse(input_size), + ] + model = FlowSequential(*modules) + + for module in model.modules(): + if isinstance(module, nn.Linear): + nn.init.orthogonal_(module.weight) + + return model + + +datasets = { + "power": {"hidden_size": 100, "k": 5, "r": 4, "d": 6, "n_blocks": 8}, + "gas": {"hidden_size": 100, "k": 5, "r": 4, "d": 8, "n_blocks": 8}, + "hepmass": {"hidden_size": 512, "k": 5, "r": 4, "d": 21, "n_blocks": 8}, + "miniboone": {"hidden_size": 512, "k": 5, "r": 4, "d": 43, "n_blocks": 8}, + "bsds300": {"hidden_size": 512, "k": 5, "r": 4, "d": 63, "n_blocks": 8}, + "mnist": {"hidden_size": 100, "k": 5, "r": 4, "d": 784, "n_blocks": 8}, + "cifar": {"hidden_size": 100, "k": 5, "r": 4, "d": 3072, "n_blocks": 8}, +} + + +def format_as_str(num): + if num / 1e9 > 1: + factor, suffix = 1e9, "B" + elif num / 1e6 > 1: + factor, suffix = 1e6, "M" + elif num / 1e3 > 1: + factor, suffix = 1e3, "K" + else: + factor, suffix = 1e0, "" + + num_factored = num / factor + + if num_factored / 1e2 > 1 or True: + num_rounded = str(int(round(num_factored))) + elif num_factored / 1e1 > 1: + num_rounded = f"{num_factored:.1f}" + else: + num_rounded = f"{num_factored:.2f}" + + return f"{num_rounded}{suffix} % {num}" + + +def sos_size(d, hidden_size, k, r, n_blocks): + model = build_model(d, hidden_size, k, r, n_blocks) + model = NetHandle(model) + return model.size() + + +for dset, s_kwargs in datasets.items(): + print(f"{dset}: #params: {format_as_str(sos_size(**s_kwargs))}") diff --git a/paper/node/script/sparsehessian.py b/paper/node/script/sparsehessian.py new file mode 100644 index 0000000..408fe49 --- /dev/null +++ b/paper/node/script/sparsehessian.py @@ -0,0 +1,321 @@ +# * +# @file Different utility functions +# Copyright (c) Zhewei Yao, Amir Gholami +# All rights reserved. +# This file is part of PyHessian library. +# +# PyHessian is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# PyHessian is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with PyHessian. If not, see . +# * + +import torch +import math +from torch.autograd import Variable +import numpy as np + +from pyhessian.utils import ( + group_product, + group_add, + normalization, + get_params_grad, + hessian_vector_product, + orthnormal, +) + + +class hessian: + """ + The class used to compute : + i) the top 1 (n) eigenvalue(s) of the neural network + ii) the trace of the entire neural network + iii) the estimated eigenvalue density + """ + + def __init__( + self, model, criterion, data=None, dataloader=None, cuda=True + ): + """ + model: the model that needs Hessain information + criterion: the loss function + data: a single batch of data, including inputs and its corresponding labels + dataloader: the data loader including bunch of batches of data + """ + + # make sure we either pass a single batch or a dataloader + assert (data != None and dataloader == None) or ( + data == None and dataloader != None + ) + + self.model = model.eval() # make model is in evaluation model + self.criterion = criterion + + if data != None: + self.data = data + self.full_dataset = False + else: + self.data = dataloader + self.full_dataset = True + + if cuda: + self.device = "cuda" + else: + self.device = "cpu" + + # pre-processing for single batch case to simplify the computation. + if not self.full_dataset: + self.inputs, self.targets = self.data + if self.device == "cuda": + self.inputs, self.targets = ( + self.inputs.cuda(), + self.targets.cuda(), + ) + + # if we only compute the Hessian information for a single batch data, we can re-use the gradients. + outputs = self.model(self.inputs) + loss = self.criterion(outputs, self.targets) + loss.backward(create_graph=True) + + # this step is used to extract the parameters from the model + params, gradsH = get_params_grad(self.model) + self.params = params + self.gradsH = gradsH # gradient used for Hessian computation + + # store sparsity masks + self.masks = [param == 0.0 for param in self.params] + self.masks2 = [param != 0.0 for param in self.params] + + def reduce(self, v): + """Reduct group of vector.""" + return [vi[m2] for vi, m2 in zip(v, self.masks2)] + + def sparsify_(self, v): + """Sparsify a group of vectors according to the masks.""" + for vi, mask in zip(v, self.masks): + vi[mask] = 0 + return v + + def dataloader_hv_product(self, v): + + device = self.device + num_data = 0 # count the number of datum points in the dataloader + + THv = [ + torch.zeros(p.size()).to(device) for p in self.params + ] # accumulate result + for inputs, targets in self.data: + self.model.zero_grad() + tmp_num_data = inputs.size(0) + outputs = self.model(inputs.to(device)) + loss = self.criterion(outputs, targets.to(device)) + loss.backward(create_graph=True) + params, gradsH = get_params_grad(self.model) + self.model.zero_grad() + Hv = torch.autograd.grad( + gradsH, + params, + grad_outputs=v, + only_inputs=True, + retain_graph=False, + ) + THv = [ + THv1 + Hv1 * float(tmp_num_data) + 0.0 + for THv1, Hv1 in zip(THv, Hv) + ] + num_data += float(tmp_num_data) + + THv = [THv1 / float(num_data) for THv1 in THv] + eigenvalue = group_product(THv, v).cpu().item() + return eigenvalue, THv + + def eigenvalues(self, maxIter=100, tol=1e-3, top_n=1): + """ + compute the top_n eigenvalues using power iteration method + maxIter: maximum iterations used to compute each single eigenvalue + tol: the relative tolerance between two consecutive eigenvalue computations from power iteration + top_n: top top_n eigenvalues will be computed + """ + + assert top_n >= 1 + + device = self.device + + eigenvalues = [] + eigenvectors = [] + + computed_dim = 0 + + while computed_dim < top_n: + eigenvalue = None + v = [ + torch.randn(p.size()).to(device) for p in self.params + ] # generate random vector + v = normalization(v) # normalize the vector + v = self.sparsify_(v) # sparsify vector + + for i in range(maxIter): + v = orthnormal(v, eigenvectors) + v = self.sparsify_(v) + self.model.zero_grad() + + if self.full_dataset: + tmp_eigenvalue, Hv = self.dataloader_hv_product(v) + else: + Hv = hessian_vector_product(self.gradsH, self.params, v) + tmp_eigenvalue = group_product(Hv, v).cpu().item() + + v = normalization(Hv) + v = self.sparsify_(v) + + if eigenvalue == None: + eigenvalue = tmp_eigenvalue + else: + if ( + abs(eigenvalue - tmp_eigenvalue) + / (abs(eigenvalue) + 1e-6) + < tol + ): + break + else: + eigenvalue = tmp_eigenvalue + eigenvalues.append(eigenvalue) + eigenvectors.append(v) + computed_dim += 1 + + return eigenvalues, eigenvectors + + def trace(self, maxIter=100, tol=1e-3): + """ + compute the trace of hessian using Hutchinson's method + maxIter: maximum iterations used to compute trace + tol: the relative tolerance + """ + device = self.device + trace_vhv = [] + trace = 0.0 + + for i in range(maxIter): + self.model.zero_grad() + v = [ + torch.randint_like(p, high=2, device=device) + for p in self.params + ] + # generate Rademacher random variables + for v_i in v: + v_i[v_i == 0] = -1 + + # sparsify random variables according to params + v = self.sparsify_(v) + + if self.full_dataset: + _, Hv = self.dataloader_hv_product(v) + else: + Hv = hessian_vector_product(self.gradsH, self.params, v) + Hv = self.reduce(Hv) + v = self.reduce(v) + trace_vhv.append(group_product(Hv, v).cpu().item()) + if abs(np.mean(trace_vhv) - trace) / (trace + 1e-6) < tol: + return trace_vhv + else: + trace = np.mean(trace_vhv) + print("No convergence") + return trace_vhv + + def density(self, iter=100, n_v=1): + """ + compute estimated eigenvalue density using stochastic lanczos algorithm (SLQ) + iter: number of iterations used to compute trace + n_v: number of SLQ runs + """ + device = self.device + eigen_list_full = [] + weight_list_full = [] + + for k in range(n_v): + v = [ + torch.randint_like(p, high=2, device=device) + for p in self.params + ] + # generate Rademacher random variables + for v_i in v: + v_i[v_i == 0] = -1 + v = normalization(v) + v = self.sparsify_(v) + + # standard lanczos algorithm initlization + v_list = [v] + w_list = [] + alpha_list = [] + beta_list = [] + ############### Lanczos + for i in range(iter): + self.model.zero_grad() + w_prime = [ + torch.zeros(p.size()).to(device) for p in self.params + ] + if i == 0: + if self.full_dataset: + _, w_prime = self.dataloader_hv_product(v) + else: + w_prime = hessian_vector_product( + self.gradsH, self.params, v + ) + w_prime = self.sparsify_(w_prime) + alpha = group_product(w_prime, v) + alpha_list.append(alpha.cpu().item()) + w = group_add(w_prime, v, alpha=-alpha) + w_list.append(w) + else: + beta = torch.sqrt(group_product(w, w)) + beta_list.append(beta.cpu().item()) + if beta_list[-1] != 0.0: + # We should re-orth it + v = orthnormal(w, v_list) + v = self.sparsify_(v) + v_list.append(v) + else: + # generate a new vector + w = [ + torch.randn(p.size()).to(device) + for p in self.params + ] + w = self.sparsify_(w) + v = orthnormal(w, v_list) + v = self.sparsify_(v) + v_list.append(v) + if self.full_dataset: + _, w_prime = self.dataloader_hv_product(v) + else: + w_prime = hessian_vector_product( + self.gradsH, self.params, v + ) + w_prime = self.sparsify_(w_prime) + alpha = group_product(w_prime, v) + alpha_list.append(alpha.cpu().item()) + w_tmp = group_add(w_prime, v, alpha=-alpha) + w_tmp = self.sparsify_(w_tmp) + w = group_add(w_tmp, v_list[-2], alpha=-beta) + + T = torch.zeros(iter, iter).to(device) + for i in range(len(alpha_list)): + T[i, i] = alpha_list[i] + if i < len(alpha_list) - 1: + T[i + 1, i] = beta_list[i] + T[i, i + 1] = beta_list[i] + a_, b_ = torch.eig(T, eigenvectors=True) + + eigen_list = a_[:, 0] + weight_list = b_[0, :] ** 2 + eigen_list_full.append(list(eigen_list.cpu().numpy())) + weight_list_full.append(list(weight_list.cpu().numpy())) + + return eigen_list_full, weight_list_full diff --git a/paper/node/script/view_hessian.py b/paper/node/script/view_hessian.py new file mode 100644 index 0000000..142edac --- /dev/null +++ b/paper/node/script/view_hessian.py @@ -0,0 +1,276 @@ +"""Analyze trained networks via Hessian.""" +# %% +import argparse +import os +import warnings +import sys +import copy +import numpy as np +import torch +from torchprune.util.train import _get_loss_handle +from torchprune.util import models as tp_models +import experiment +from experiment.util.file import get_parameters + +PARSER = argparse.ArgumentParser( + description="Sparse Flow - Hessian Analysis", +) + +PARSER.add_argument( + "-p", + "--param", + type=str, + default="paper/node/param/toy/ffjord/gaussians/l2_h128_sigmoid_da.yaml", + dest="param_file", + help="provide a parameter file", +) + + +# switch to root folder for data +FOLDER = os.path.abspath("") +if "paper/node/script" in FOLDER: + SRC_FOLDER = os.path.join(FOLDER, "../../..") + os.chdir(SRC_FOLDER) + +# add script path to sys path +sys.path.append("./paper/node/script") + +# import our custom pyhessian library +from sparsehessian import hessian + + +# %% Some stuff +class HiddenPrints: + def __enter__(self): + self._original_stdout = sys.stdout + sys.stdout = open(os.devnull, "w") + warnings.simplefilter("ignore") + + def __exit__(self, exc_type, exc_val, exc_tb): + sys.stdout.close() + sys.stdout = self._original_stdout + warnings.simplefilter("default") + + +# retrieve file +ARGS = PARSER.parse_args() +FILE = ARGS.param_file + + +# %% Run the Hessian Stats +def _hessian_spectrum(dataset, criterion, net): + """Return the Hutchison-based trace estimator of the Hessian.""" + param0 = next(net.parameters()) + if param0.numel() == 1: + param0.requires_grad = False + + with torch.enable_grad(): + # get Hessian compute model + hessian_comp = hessian(net, criterion, data=dataset, cuda=True) + + if False: + # get trace + return np.mean(hessian_comp.trace(maxIter=200, tol=1e-4)) + if False: + # get top eigenvalue + eigs, _ = hessian_comp.eigenvalues(maxIter=100, tol=1e-4) + return eigs[-1] + + # get spectrum data + eigs, _ = hessian_comp.density(iter=100, n_v=3) + return np.asarray(eigs).mean(axis=0) + + +def get_spectrum_stats(spec_collection, loss_collection): + """Return useful stats from spectrum.""" + spec_collect_filt = [spec[spec > 0] for spec in spec_collection] + + # compute spectral norm, largest eigenvalue + spec_norm = np.max(spec_collection, axis=-1).mean() + + # compute trace, sum over all eigenvalues + trace = np.mean([np.sum(spec) for spec in spec_collect_filt]) + + # compute condition number, max/min eigenvalue + cond_number = np.mean( + [np.max(spec) / np.min(spec) for spec in spec_collect_filt] + ) + + # get average loss + loss = np.mean(loss_collection) + + # print stats + print( + ", ".join( + [ + f"NLL={loss:.5f}", + f"lambda_max={spec_norm:.5f}", + f"trace={trace:.5f}", + f"kappa={cond_number:.5f}", + ] + ) + ) + + +def get_bptt_net(net, param): + """Return the same net with BPTT (autograd) instead of adjoint backprop.""" + net_name = param["network"]["name"] + num_classes = param["network"]["outputSize"] + + net_bptt = getattr(tp_models, f"{net_name}_autograd")(num_classes) + net_bptt.load_state_dict(net.state_dict()) + + return net_bptt + + +def generate_hessian_stats(logger, param, data_size=0.1, num_reps=3): + """Plot the distribution beautifully.""" + save_and_load = True + + with HiddenPrints(): + logger.initialize_from_param(param, setup_print=False) + evaluator = experiment.Evaluator(logger) + loader_train = evaluator.get_dataloader("train")[0] + criterion = _get_loss_handle(evaluator._net_trainer.train_params) + device = "cuda" + print(logger._results_dir) + + # create huge tensor of the data + dataset = loader_train.dataset + inputs = torch.stack([data[0] for data in dataset]).to(device) + targets = torch.tensor([data[1] for data in dataset]).to(device) + + # create a subset of the data as well + indices = torch.randperm(len(inputs))[: int(data_size * len(inputs))] + subset = ( + inputs[indices].detach().clone(), + targets[indices].detach().clone(), + ) + + # store prune ratios and add zero prune ratio + prune_ratios = 1 - np.array(evaluator._keep_ratios) + prune_ratios = np.concatenate(([0.0], prune_ratios)) + + # dictionary to store spectrum results + hessian_tag = "hessian_spectrum" + spectrum_results = {} + + # check and load if anything is already stored + if save_and_load: + spectrum_results.update(logger.load_custom_state(tag=hessian_tag)) + + # check required number of reps + num_nets = evaluator._num_nets + num_reps_experiment = evaluator._num_repetitions + num_reps_per_net = int(np.ceil(num_reps / num_nets)) + + for method_name in evaluator._method_names: + if "ReferenceNet" in method_name: + continue + print("") + for s_idx, pr in enumerate(prune_ratios): + # setup collection of hessian stats for this + spectrum_collection = [] + loss_collection = [] + + print_key = ", ".join( + [method_name, f"pr_idx={s_idx}", f"PR={pr*100:5.1f}%"] + ) + print(f"{print_key}: Estimating Hessian Spectrum") + + # check if we need to compute of these to know whether we save + saving_required = False + + for n_idx in range(num_nets): + for r_idx in range(num_reps_per_net): + key = "_".join( + map( + str, + [ + n_idx, + r_idx, + s_idx, + int(pr * 10000), + method_name, + ], + ) + ) + hessian_key = f"{key}_hessian" + loss_key = f"{key}_loss" + + # only re-compute hessian results if necessary + if hessian_key not in spectrum_results: + with HiddenPrints(): + try: + if pr == 0.0: + lookup_name = "ReferenceNet" + else: + lookup_name = method_name + net = evaluator.get_by_pr( + prune_ratio=pr, + method=lookup_name, + n_idx=n_idx, + r_idx=r_idx % num_reps_experiment, + ).compressed_net.torchnet + except FileNotFoundError: + continue + + # wrap net into net with autograd instead of adjoint + # torchdyn adjoint breaks create_graph=True in + # backwards pass, which you need for any kind of + # Hessian computation ... + net_bptt = get_bptt_net(net, param) + + # generate spectrum + net_bptt = net_bptt.to(device) + spectrum = _hessian_spectrum( + subset, criterion, net_bptt + ) + + # get train loss + net = net.to(device) + loss = criterion(net(inputs), targets).item() + + # update results and store again + spectrum_results[hessian_key] = copy.deepcopy(spectrum) + spectrum_results[loss_key] = copy.deepcopy(loss) + + # finalize + del net, net_bptt, loss, spectrum + torch.cuda.empty_cache() + + # recall to save later on + saving_required = True + + # get stats and collect them together + spectrum = copy.deepcopy(spectrum_results[hessian_key]) + loss = copy.deepcopy(spectrum_results[loss_key]) + + spectrum_collection.append(spectrum) + loss_collection.append(loss) + + # store latest results + if save_and_load and saving_required: + logger.save_custom_state(spectrum_results, hessian_tag) + print("Hessian update saved") + + # process collected spectrums and losses + if len(spectrum_collection) > 0: + spectrum_collection_np = np.asarray(spectrum_collection) + loss_collection_np = np.asarray(loss_collection) + get_spectrum_stats(spectrum_collection_np, loss_collection_np) + else: + print("No networks available") + print("") + + +def main(file): + # get a logger and the parameters + print(file) + logger = experiment.Logger() + param = next(get_parameters(file, 1, 0)) + generate_hessian_stats(logger, param) + + +if __name__ == "__main__": + main(FILE) diff --git a/paper/node/script/view_hessian_wrapper.py b/paper/node/script/view_hessian_wrapper.py new file mode 100644 index 0000000..ee46ea0 --- /dev/null +++ b/paper/node/script/view_hessian_wrapper.py @@ -0,0 +1,36 @@ +"""Wrapper for Hessian since we keep running into """ + +import subprocess +import argparse + + +PARSER = argparse.ArgumentParser( + description="Sparse Flow - Hessian Analysis", +) + +PARSER.add_argument( + "param_file", + type=str, + metavar="param_file", + help="provide a parameter file", +) + +# retrieve file +ARGS = PARSER.parse_args() +FILE = ARGS.param_file + + +def main(file): + for _ in range(5000): + ret_code = subprocess.run( + ["python", "paper/node/script/view_hessian.py", "-p", file] + ).returncode + if ret_code: + print("Catching CUDA-OOM and retrying.") + else: + print("Finished successfully without CUDA-OOM failure.") + break + + +if __name__ == "__main__": + main(FILE) diff --git a/paper/node/script/view_modes.py b/paper/node/script/view_modes.py new file mode 100644 index 0000000..7fe0cf5 --- /dev/null +++ b/paper/node/script/view_modes.py @@ -0,0 +1,344 @@ +"""Analyze CNFs via Mode Analysis.""" +# %% +import argparse +import os +import warnings +import sys +import copy +import numpy as np +import torch +import experiment +from experiment.util.file import get_parameters +from torchprune.util.models import Ffjord, FfjordCNF + +PARSER = argparse.ArgumentParser( + description="Sparse Flow - Mode Analysis", +) + +PARSER.add_argument( + "-p", + "--param", + type=str, + default="paper/node/param/toy/ffjord/gaussians/l4_h64_sigmoid_da.yaml", + dest="param_file", + help="provide a parameter file", +) + + +# switch to root folder for data +FOLDER = os.path.abspath("") +if "paper/node/script" in FOLDER: + SRC_FOLDER = os.path.join(FOLDER, "../../..") + os.chdir(SRC_FOLDER) + +# add script path to sys path +sys.path.append("./paper/node/script") + + +# %% Some stuff +class HiddenPrints: + def __enter__(self): + self._original_stdout = sys.stdout + sys.stdout = open(os.devnull, "w") + warnings.simplefilter("ignore") + + def __exit__(self, exc_type, exc_val, exc_tb): + sys.stdout.close() + sys.stdout = self._original_stdout + warnings.simplefilter("default") + + +# retrieve file +ARGS = PARSER.parse_args() +FILE = ARGS.param_file + + +# %% Main functions + + +def get_modes(dataset): + """Retrieve the modes of the dataset.""" + inputs = torch.stack([data[0] for data in dataset]) + targets = torch.tensor([data[1] for data in dataset]) + + # flatten inputs + inputs = inputs.reshape(inputs.shape[0], -1) + + # unique labels + labels = torch.unique(targets) + + # computes and corresponding covariance matrices + modes = np.zeros((len(labels), inputs.shape[1])) + covs = np.zeros((len(labels), inputs.shape[1], inputs.shape[1])) + for i_lab, label in enumerate(labels): + inputs_lab = inputs[targets == label] + modes[i_lab] = torch.mean(inputs_lab, dim=0).cpu().numpy() + covs[i_lab] = np.cov(inputs_lab.cpu().numpy().T) + + return modes, covs + + +def sample_torchdyn_ffjord(net, num_samples=20000): + """Sample from a torchdyn network.""" + device = next(net.parameters()).device + + # extract ffjord model + model = net.model + + # set s-span but keep old one around! + s_span_backup = copy.deepcopy(model[1].s_span) + model[1].s_span = torch.linspace(1, 0, 2).to(device) + + sample = net.prior.sample(torch.Size([num_samples])).to(device) + with torch.no_grad(): + x_sampled = model(sample) + + # restore s-span + model[1].s_span = s_span_backup + + return x_sampled[:, 1:] + + +def sample_ffjord_cnf(net, dataset, num_samples=2500): + """Sample from ffjord ffjord cnf.""" + device = next(net.parameters()).device + + # extract ffjord model + model = net.model + + # start prior + data_shape = dataset[0][0].shape + data_numel = dataset[0][0].numel() + prior = torch.distributions.MultivariateNormal( + torch.zeros(data_numel), torch.eye(data_numel) + ) + + # sample now from model + batch_size = 1250 + samples_post_all = [] + for _ in range((num_samples - 1) // batch_size + 1): + samples_prior = prior.sample((batch_size,)) + samples_prior = samples_prior.view(batch_size, *data_shape) + with torch.no_grad(): + samples_post = model(samples_prior.to(device), reverse=True) + samples_post = samples_post.view(batch_size, -1).detach().cpu() + samples_post_all.append(samples_post) + + return torch.cat(samples_post_all) + + +def sample(net, dataset): + """Sample from the network.""" + if isinstance(net, Ffjord): + samples = sample_torchdyn_ffjord(net) + elif isinstance(net, FfjordCNF): + samples = sample_ffjord_cnf(net, dataset) + else: + raise NotImplementedError("Only works for torchdyn ffjord currently.") + + return samples.cpu().numpy() + + +def sample_and_compute_mode_distance(net, dataset, modes, covs): + """Sample from the network and compute distance to each mode.""" + # let's sample first + samples = sample(net, dataset) + + # now figure out squared distances of samples to modes as a multiplicative + # factor of variance projected onto this direction from the cov-matrix + # A little more explanation: + # d^2 = "multiplies of variance" == "multiple of std.dev. squared" + # x = sample + # var_unnormed = (x - mode)' * Cov * (x-mode) + # var = var_unnormed / ||x - mode||^2 + # d^2 = ||x - mode||^2 / var + # = ||x - mode||^4 / var_unnormed + # + # d = ||x - mode||^2 / sqrt((x - mode)' * Cov * (x - mode)) + + # now do the computations + # modes.shape == num_modes x dim_state + # shape = batch_size x num_modes x dim_state + samples_centered = samples[:, None] - modes[None] + + # compute "unnormalized variance" using np.matmul broadcasting rules + # covs.shape == num_modes x dim_state x dim_state + # var_unnormed.shape == num_samples x num_modes + var_unnormed = covs[None] @ samples_centered[..., None] + var_unnormed = (samples_centered[:, :, None] @ var_unnormed)[:, :, 0, 0] + + # compute distance now + # shape == num_samples x num_modes + dist_unnormed = np.linalg.norm(samples_centered, ord=2, axis=-1) + dist_normalized = dist_unnormed * dist_unnormed / np.sqrt(var_unnormed) + + return dist_normalized + + +def get_mode_stats(mode_distances): + """Return stats about distance to nearest mode.""" + dist_checkers = [0.25, 0.5, 1.0, 2.0, 3.0, 5.0, 7.0, 10.0, 15.0, 20.0] + min_distances = np.min(mode_distances, axis=-1) + num_modes = mode_distances.shape[-1] + + high_quality_ratio = [ + (min_distances <= dist).sum(axis=-1).mean() / mode_distances.shape[1] + for dist in dist_checkers + ] + + modes_captured = [ + np.any(mode_distances < dist, axis=1).sum(axis=1).mean() + for dist in dist_checkers + ] + + print( + "Normalized std. dev. : " + + " | ".join(map(lambda x: f" {x:6.2f}", dist_checkers)) + ) + print( + "High-quality samples : " + + " | ".join(map(lambda x: f"{x*100:6.2f}%", high_quality_ratio)) + ) + print( + f"Modes captured (Total: {num_modes:3.0f}): " + + " | ".join(map(lambda x: f" {x:6.2f}", modes_captured)) + ) + + +def generate_mode_stats(logger, param, num_reps=15): + """Plot the distribution beautifully.""" + # turn saving/loading on and off + save_and_load = True + + # initialize experiment with logger and evaluator + with HiddenPrints(): + logger.initialize_from_param(param, setup_print=False) + evaluator = experiment.Evaluator(logger) + loader_train = evaluator.get_dataloader("train")[0] + dataset = loader_train.dataset + print(logger._results_dir) + + # do cuda computations + device = "cuda" + + # store prune ratios and add zero prune ratio + prune_ratios = 1 - np.array(evaluator._keep_ratios) + prune_ratios = np.concatenate(([0.0], prune_ratios)) + + # dictionary to store mode results + mode_tag = "mode_analysis" + mode_results = {} + + # check and load if anything is already stored + if save_and_load: + mode_results.update(logger.load_custom_state(tag=mode_tag)) + + # get mean and variance of each mode if not already pre-computed and save + if "modes" in mode_results: + modes, covs = mode_results["modes"], mode_results["covs"] + else: + modes, covs = get_modes(dataset) + mode_results["modes"] = modes + mode_results["covs"] = covs + if save_and_load: + logger.save_custom_state(mode_results, mode_tag) + + # check required number of reps + num_nets = evaluator._num_nets + num_reps_experiment = evaluator._num_repetitions + num_reps_per_net = int(np.ceil(num_reps / num_nets)) + + for method_name in evaluator._method_names: + if "ReferenceNet" in method_name: + continue + print("") + for s_idx, pr in enumerate(prune_ratios): + # setup collection of mode distances for this run + mode_dist_collected = [] + print_key = ", ".join( + [method_name, f"pr_idx={s_idx}", f"PR={pr*100:5.1f}%"] + ) + print(f"{print_key}: Estimating Mode distances") + + # check if we need to compute of these to know whether we save + saving_required = False + + # compute mode_distances + for n_idx in range(num_nets): + for r_idx in range(num_reps_per_net): + key = "_".join( + map( + str, + [ + n_idx, + r_idx, + s_idx, + int(pr * 10000), + method_name, + ], + ) + ) + mode_key = f"{key}_modes" + + # only re-compute mode results if necessary + if mode_key not in mode_results: + with HiddenPrints(): + try: + if pr == 0.0: + lookup_name = "ReferenceNet" + else: + lookup_name = method_name + net = evaluator.get_by_pr( + prune_ratio=pr, + method=lookup_name, + n_idx=n_idx, + r_idx=r_idx % num_reps_experiment, + ).compressed_net.torchnet + except FileNotFoundError: + continue + + # set and generate mode assignments for samples + net = net.to(device) + mode_distances = sample_and_compute_mode_distance( + net, dataset, modes, covs + ) + + # update results + mode_results[mode_key] = copy.deepcopy(mode_distances) + + # finalize + del net, mode_distances + + # recall to save later on + saving_required = True + + # get stats and collect them together + mode_distances = copy.deepcopy(mode_results[mode_key]) + mode_dist_collected.append(mode_distances) + + # store latest results + if save_and_load and saving_required: + logger.save_custom_state(mode_results, mode_tag) + + # process collected mode distances + # shape = num_reps x num_samples x num_modes + if len(mode_dist_collected) > 0: + mode_dist_collected_np = np.asarray(mode_dist_collected) + get_mode_stats(mode_dist_collected_np) + else: + print("No networks available") + print("") + + +## %% Execute main +def main(file): + # get a logger and the parameters + print("\n") + print(file) + logger = experiment.Logger() + param = next(get_parameters(file, 1, 0)) + generate_mode_stats(logger, param) + + +if __name__ == "__main__": + main(FILE) diff --git a/paper/node/script/view_results.py b/paper/node/script/view_results.py new file mode 100644 index 0000000..506a775 --- /dev/null +++ b/paper/node/script/view_results.py @@ -0,0 +1,762 @@ +"""View and plot Neural ODE results.""" +# %% +import os +import warnings +import sys +import copy +import numpy as np +import matplotlib.pyplot as plt +import seaborn as sns +from PIL import Image +from scipy import signal +import experiment +from experiment.util.file import get_parameters + +# change working directory to src +from IPython import get_ipython + +# make sure it's using only GPU here... +os.environ["CUDA_VISIBLE_DEVICES"] = "1" # noqa + + +# switch to root folder for data +folder = os.path.abspath("") +if "paper/node/script" in folder: + src_folder = os.path.join(folder, "../../..") + os.chdir(src_folder) + +# add script path to sys path +sys.path.append("./paper/node/script") + +# %% Define some parameters +FILES = [ + # # TOY, VANILLA CNF GENERATIVE MODEL EXPERIMENTS + # "paper/node/param/toy/ffjord/gaussians/vanilla_l2_h128.yaml", + # "paper/node/param/toy/ffjord/gaussiansspiral/vanilla_l4_h64.yaml", + # "paper/node/param/toy/ffjord/spirals/vanilla_l4_h64.yaml", + # # TOY, GENERATIVE MODEL EXPERIMENTS + # "paper/node/param/toy/ffjord/gaussians/l4_h64_sigmoid_da.yaml", + # "paper/node/param/toy/ffjord/gaussians/l2_h128_sigmoid_da.yaml", + # "paper/node/param/toy/ffjord/gaussiansspiral/l4_h64_sigmoid_da.yaml", + # "paper/node/param/toy/ffjord/spirals/l4_h64_sigmoid_da.yaml", + # # + # # TOY, CLASSIFICATION EXPERIMENTS + # "paper/node/param/toy/node/concentric/l2_h128_tanh_da.yaml", + # "paper/node/param/toy/node/moons/l2_h3_tanh_da.yaml", + # "paper/node/param/toy/node/moons/l2_h32_tanh_da.yaml", + # "paper/node/param/toy/node/moons/l2_h64_tanh_da.yaml", + # "paper/node/param/toy/node/moons/l2_h128_tanh_da.yaml", + # "paper/node/param/toy/node/spirals/l2_h64_relu_da.yaml", + # # + # # TABULAR EXPERIMENTS + # "paper/node/param/tabular/power/l3_hm10_f5_tanh.yaml", + # "paper/node/param/tabular/gas/l3_hm20_f5_tanh.yaml", + # "paper/node/param/tabular/hepmass/l2_hm10_f10_softplus.yaml", + # "paper/node/param/tabular/miniboone/l2_hm20_f1_softplus.yaml", + # "paper/node/param/tabular/bsds300/l3_hm20_f2_softplus.yaml", + # # + # # IMAGE EXPERIMENTS + # "paper/node/param/cnf/mnist_multiscale.yaml", + # "paper/node/param/cnf/cifar_multiscale.yaml", +] + +PLOT_FILTERS = [ + ["WT", "FT"], + ["WT"], + # ["FT"], +] + +STYLE_KWARGS = { + "savgol_on": True, + "savgol_mean": {"window_length": 3, "polyorder": 1}, + "savgol_std": {"window_length": 9, "polyorder": 1}, + "label": {"fontsize": 20}, + "tick": {"labelsize": 16}, + "xlim": [0, 85], + "ylim": [1.5, 1.85], + "legend": { + "loc": "upper left", + "bbox_to_anchor": (0.1, 1.3), + "fontsize": 20, + }, + "WT": { + "plot": {"color": "darkblue", "ls": "-"}, + "fill": {"color": "lightskyblue", "alpha": 0.4}, + }, + "FT": { + "plot": {"color": "darkgreen", "ls": "--"}, + "fill": {"color": "green", "alpha": 0.2}, + }, +} + +NUM_REP_LOSS = 12 # we want a total of 12 reps for the loss for better std dev + +PLOT_FOLDER_SPECIAL = os.path.abspath("data/node/plots") +INLINE_PLOT = False + +GEN_NODE_FIGS = False +REGEN_NODE_FIGS = False +GEN_ALL_NODE_FIGS = False +REGEN_FIGS = False + +GEN_PAPER_FIGS_LOSS = True +GEN_PAPER_FIGS_DISTRIBUTION = True + + +# %% Some helpful functions +class HiddenPrints: + def __enter__(self): + self._original_stdout = sys.stdout + sys.stdout = open(os.devnull, "w") + warnings.simplefilter("ignore") + + def __exit__(self, exc_type, exc_val, exc_tb): + sys.stdout.close() + sys.stdout = self._original_stdout + warnings.simplefilter("default") + + +def generate_node_figs(logger, cnf_plots=False): + """Generate and store the Neural ODE figures for each model.""" + with HiddenPrints(): + evaluator = experiment.Evaluator(logger) + loader_test = evaluator.get_dataloader("test")[0] + + if cnf_plots: + from plots_cnf import plot_all + else: + from plots2d import plot_all + + # for n_idx in range(evaluator._num_nets): + for n_idx in range(1): + for r_idx in range(evaluator._num_repetitions): + for s_idx, keep_ratio in enumerate(evaluator._keep_ratios): + for method_name in evaluator._method_names: + if "ReferenceNet" in method_name and s_idx > 0: + continue + tag = "_".join( + [ + method_name, + f"n{n_idx}", + f"r{r_idx}", + f"i{s_idx}", + f"p{keep_ratio:.4f}", + ] + ) + plt_folder = os.path.join(logger._plot_dir, "flow", tag) + + if os.path.exists(plt_folder) and not REGEN_NODE_FIGS: + continue + with HiddenPrints(): + try: + net = evaluator.get_by_pr( + prune_ratio=1.0 - keep_ratio, + method=method_name, + n_idx=n_idx, + r_idx=r_idx, + ).compressed_net.torchnet + except FileNotFoundError: + continue + print(plt_folder) + plot_all( + net, + loader_test, + plot_folder=plt_folder, + all_p=GEN_ALL_NODE_FIGS + or "ReferenceNet" in method_name, + ) + + +def get_results(file, logger, gen_node, regen_figs): + """Grab all the results according to the file.""" + results = [] + params = [] + labels = [] + graphers_all = [] + # Loop through all experiments + for param in get_parameters(file, 1, 0): + # initialize logger and setup parameters + with HiddenPrints(): + logger.initialize_from_param(param, setup_print=False) + + # don't + try: + state = logger.get_global_state() + except ValueError: + print("Global state not computed, handle with care!") + state = copy.deepcopy(logger._stats) + + # extract the results + results.append(copy.deepcopy(state)) + params.append(copy.deepcopy(param)) + + # extract the legend (based on heuristic) + label = param["generated"]["datasetTest"].split("_") + if len(label) > 2: + label = label[2:] + labels.append("_".join(label)) + + # store custom plots for neural ode as well. + # only do that for Toy Examples though ... + if gen_node and "toy" in file: + generate_node_figs(logger, cnf_plots="ffjord" in file) + + if not regen_figs or not logger.state_loaded: + continue + + # extract the plots and store them. + try: + with HiddenPrints(): + graphers = logger.generate_plots(store_figs=False) + for grapher in graphers: + grapher.store_plot() + graphers_all.append(graphers) + except: + print("Could not generate main graphs.") + graphers_all.append([]) + + return results, params, labels, graphers_all + + +def get_and_store_results(file, logger, gen_node=False, regen_figs=False): + print(f"PARAM FILE: {file}") + # get the results specified in the file (and hopefully pre-computed) + results, params, _, _ = get_results(file, logger, gen_node, regen_figs) + + for param in params: + print(f"PLOT FOLDER: {param['generated']['plotDir']}\n") + + return results, params + + +# %% Retrieve results +# make sure matplotlib works correctly +IN_JUPYTER = True +try: + if INLINE_PLOT: + get_ipython().run_line_magic("matplotlib", "inline") + else: + get_ipython().run_line_magic("matplotlib", "agg") +except AttributeError: + IN_JUPYTER = False + +# get a logger +LOGGER = experiment.Logger() +STATS_ALL = [] +PARAM_ALL = [] +for file in FILES: + STATS, PARAM = get_and_store_results( + file, LOGGER, gen_node=GEN_NODE_FIGS, regen_figs=REGEN_FIGS + ) + STATS_ALL.append(STATS) + PARAM_ALL.append(PARAM) + + +# %% now re-plot the loss so it looks better with smoothing +def resample_loss(logger, i_gen=None): + """Resample the loss from the networks and return results.""" + if i_gen is None: + tag_gen = logger.dataset_test + else: + tag_gen = f"{logger.dataset_test}_regen_{i_gen}" + + # try loading the re-generated loss if it exists and is compatible + # we should also check that we get the same valid sizes since they + # additional data might have generated when less networks were available + stats_new = logger.load_custom_state(tag_gen) + if logger._check_compatibility(stats_new): + mask_new = np.all(stats_new["sizes"] != 0.0, axis=(0, 2)) + mask_old = np.all(logger.sizes != 0.0, axis=(0, 2)) + if np.all(mask_new == mask_old): + print("Loaded re-sampled stats") + return stats_new + + print("Generating re-sampled stats.") + + with HiddenPrints(): + evaluator = experiment.Evaluator(logger) + + # store prune ratios and add zero prune ratio + prune_ratios = 1 - np.array(evaluator._keep_ratios) + prune_ratios = np.concatenate(([0.0], prune_ratios)) + + for n_idx in range(evaluator._num_nets): + for r_idx in range(evaluator._num_repetitions): + for s_idx, keep_ratio in enumerate(evaluator._keep_ratios): + for a_idx, method_name in enumerate(evaluator._method_names): + if "ReferenceNet" in method_name and s_idx > 0: + continue + with HiddenPrints(): + try: + ffjord_net = evaluator.get_by_pr( + prune_ratio=1.0 - keep_ratio, + method=method_name, + n_idx=n_idx, + r_idx=r_idx, + ) + except FileNotFoundError as f_e: + if "ReferenceNet" in method_name: + raise f_e + else: + continue + # now re-do the stats + logger.update_global_state( + n_idx=n_idx, s_idx=s_idx, r_idx=r_idx, a_idx=a_idx + ) + evaluator._do_stats(ffjord_net.cuda()) + + # store re-generated stats + if tag_gen is not None: + logger.save_custom_state(logger._stats, tag_gen) + print("Saving re-generated data") + + return copy.deepcopy(logger._stats) + + +def format_as_str(num): + if num / 1e9 > 1: + factor, suffix = 1e9, "B" + elif num / 1e6 > 1: + factor, suffix = 1e6, "M" + elif num / 1e3 > 1: + factor, suffix = 1e3, "K" + else: + factor, suffix = 1e0, "" + + num_factored = num / factor + if num_factored / 1e2 > 1: + num_rounded = str(int(round(num_factored))) + elif num_factored / 1e1 > 1: + num_rounded = f"{num_factored:.1f}" + else: + num_rounded = f"{num_factored:.2f}" + return f"{num_rounded}{suffix} % {num}" + + +def plot_loss( + logger, + param, + stats, + plot_filters, + style_kwargs, + plt_folder, + num_rep, + compression_rate=False, + use_loss=True, +): + """Plot everything starting from stats and param.""" + # get reference index and names + idx_ref = stats["methods"].index("ReferenceNet") + names = np.delete(stats["names"], idx_ref) + + # initialize logger to current parameters + with HiddenPrints(): + logger.initialize_from_param(param, setup_print=False) + + def _extract_pr_loss(stats): + # [num_nets, num_intervals, num_repetitions, num_algorithms] + prune_ratios = 100.0 * (1.0 - stats["sizes"]) + # prune_ratios = 1.0 / stats["sizes"] + if use_loss: + loss = copy.deepcopy(stats["loss"]) + else: + loss = copy.deepcopy(stats["error"]) * 100.0 + + # add 0 prune ratio to data + prune_ratios = np.pad(prune_ratios, [(0, 0), (1, 0), (0, 0), (0, 0)]) + prune_ratios[:, 0] = 0.0 + loss = np.pad(loss, [(0, 0), (1, 0), (0, 0), (0, 0)]) + loss[:, 0] = loss[:, 1, :, idx_ref : idx_ref + 1] + + # remove ref idx, shape=[num_nets, num_intervals, num_rep, num_alg - 1] + prune_ratios = np.delete(prune_ratios, idx_ref, axis=3) + loss = np.delete(loss, idx_ref, axis=3) + + return prune_ratios, loss + + # get pr and loss with re-sampling always + prune_ratios, loss = None, None + + # re-generate loss until we have enough repetitions + i_gen = 0 + while loss is None or loss[:, 0, :, 0].size < num_rep: + print(f"\nResampling Loss, i_gen={i_gen}") + if num_rep > 1: + stats_new = resample_loss(logger, i_gen) + else: + stats_new = resample_loss(logger) + pr_new, loss_new = _extract_pr_loss(stats_new) + if prune_ratios is None: + prune_ratios = pr_new + loss = loss_new + else: + prune_ratios = np.concatenate((prune_ratios, pr_new), axis=2) + loss = np.concatenate((loss, loss_new), axis=2) + i_gen += 1 + + def _extract_valid_pr_loss(idx_alg): + """Extract valid PRs and losses for desired algorithm index.""" + # shape=[num_nets, num_intervals, num_rep, num_alg - 1] + num_intervals = prune_ratios.shape[1] + pr_m, l_m, l_std = [], [], [] + for i_pr in range(num_intervals): + # extract raw PR, loss for desired algorithm and interval + pr_one_i = prune_ratios[:, i_pr, :, idx_alg].flatten() + loss_one_i = loss[:, i_pr, :, idx_alg].flatten() + + # determine valid entries/repetitions + valid = pr_one_i != 100.0 + + # don't add if nothing valid + if sum(valid) < 1: + continue + + # filter for valid entries + pr_one_i = pr_one_i[valid] + loss_one_i = loss_one_i[valid] + + # store stats + pr_m.append(np.mean(pr_one_i)) + l_m.append(np.mean(loss_one_i)) + l_std.append(np.std(loss_one_i)) + + pr_m, l_m, l_std = np.asarray([pr_m, l_m, l_std]) + return pr_m, l_m, l_std + + def _plot(filter, legend_on=True): + fig = plt.figure() + sns.set_theme() + legends = [] + legends_lookup = { + "WT": "Unstructured Pruning", + "FT": "Structured Pruning", + } + + for name in filter: + # get right data + idx = np.argwhere(names == name) + if len(idx) != 1: + continue + idx = idx[0].item() + + # get valid PRs and loss + pr, l_m, l_std = _extract_valid_pr_loss(idx) + + # collect names for legend + legends.append(legends_lookup[name]) + + # try some smoothing + if style_kwargs["savgol_on"]: + l_m_filt = signal.savgol_filter( + l_m, **style_kwargs["savgol_mean"] + ) + l_std_filt = signal.savgol_filter( + l_std, **style_kwargs["savgol_std"] + ) + else: + l_m_filt = l_m + l_std_filt = l_std + + # plot + # fig.gca().plot(pr, l_m, color="red") + fig.gca().plot(pr, l_m_filt, **style_kwargs[name]["plot"]) + fig.gca().fill_between( + pr, + l_m_filt - l_std_filt, + l_m_filt + l_std_filt, + **style_kwargs[name]["fill"], + ) + + # axis labels + if compression_rate: + fig.gca().set_xlabel("Compression Rate", **style_kwargs["label"]) + else: + fig.gca().set_xlabel("Prune Ratio (%)", **style_kwargs["label"]) + if use_loss: + fig.gca().set_ylabel("Loss (NLL)", **style_kwargs["label"]) + else: + fig.gca().set_ylabel("Top-1 Error (%)", **style_kwargs["label"]) + # ticks + fig.gca().tick_params(axis="both", **style_kwargs["tick"]) + + # x limits and y limits + fig.gca().set_xlim(style_kwargs["xlim"]) + fig.gca().set_ylim(style_kwargs["ylim"]) + + # legend now + if legend_on: + fig.gca().legend( + legends, ncol=len(legends), **style_kwargs["legend"] + ) + + # a few stylistic changes + fig.gca().spines["top"].set_visible(False) + fig.gca().spines["right"].set_visible(False) + fig.set_tight_layout(True) + + return fig + + for filters in plot_filters: + # check if all methods that filters wants exist + if not all([filt in names for filt in filters]): + print(filters) + continue + # generate and store figure + fig = _plot(filters, legend_on=False) + file_name = "_".join(filters) + ".pdf" + file_name = os.path.join(plt_folder, file_name) + os.makedirs(plt_folder, exist_ok=True) + fig.savefig(file_name, bbox_inches="tight") + + # now also print data + size_abs = np.mean(stats["sizes_total"]) + for idx_alg, name in enumerate(names): + prs_one, losses_one, _ = _extract_valid_pr_loss(idx_alg) + for pr, loss_one in zip(prs_one, losses_one): + size_pruned = (1 - pr / 100.0) * size_abs + print( + f"Sparse Flows ({name}, PR={int(round(pr))}\\%) & " + f"{loss_one:.2f} & {format_as_str(size_pruned)}" + ) + + +def plot_flow(logger, param, plt_folder, cnf_plots=True): + """Plot the distribution beautifully.""" + if cnf_plots: + import plots_cnf as plots + else: + import plots2d as plots + + print(f"PLOT FOLDER: {plt_folder}") + + def _plot_distribution(plots_kwargs, tag): + # plots once with the default scatter plot + fig = plt.figure(figsize=(5, 5)) + sns.set_style("ticks") + axis = fig.gca() + + plots.plot_for_sweep(axis=axis, **plots_kwargs) + + if cnf_plots: + axis.set_xlim([-2, 2]) + axis.set_ylim([-2, 2]) + axis.set_aspect("equal") + else: + axis.set_aspect(1.5) + plt.axis("off") + axis.get_xaxis().set_ticks([]) + axis.get_yaxis().set_ticks([]) + plt.tight_layout() + + # store first plot + plt_folder_original = os.path.join(plt_folder, "distribution_original") + file_name = os.path.join(plt_folder_original, tag + ".jpg") + os.makedirs(plt_folder_original, exist_ok=True) + fig.savefig(file_name, bbox_inches="tight", pad_inches=0) + + # now re-load plot and filter out light colors + if cnf_plots: + img = np.copy(np.asarray(Image.open(file_name))) + if not (IN_JUPYTER and INLINE_PLOT): + threshold = 150 + else: + threshold = 200 + img[img > threshold] = 255 + + # show filtered plot + fig2 = plt.figure(figsize=(5, 5)) + plt.imshow(img) + fig2.gca().set_aspect("equal") + plt.axis("off") + plt.tight_layout() + + # store filtered plot + plt_folder_filtered = os.path.join( + plt_folder, "distribution_filtered" + ) + file_name2 = os.path.join(plt_folder_filtered, tag + ".jpg") + os.makedirs(plt_folder_filtered, exist_ok=True) + # Image.fromarray(img).save(file_name2) + fig2.savefig(file_name2, bbox_inches="tight", pad_inches=0) + + if not (IN_JUPYTER and INLINE_PLOT): + plt.close(fig) + if cnf_plots: + plt.close(fig2) + + def _plot_field(plots_kwargs, tag): + fig = plt.figure(figsize=(5, 5)) + sns.set_style("ticks") + axis = fig.gca() + + # PLOTTING CODE + plots.plot_static_vector_field(axis=axis, **plots_kwargs) + + if cnf_plots: + axis.set_xlim([-2, 2]) + axis.set_ylim([-2, 2]) + axis.set_aspect("equal") + else: + axis.set_aspect(1.5) + plt.axis("off") + axis.set_title(None) + axis.get_xaxis().set_ticks([]) + axis.get_yaxis().set_ticks([]) + plt.tight_layout() + + # store plot + plt_folder_field = os.path.join(plt_folder, "field") + file_name = os.path.join(plt_folder_field, tag + ".jpg") + os.makedirs(plt_folder_field, exist_ok=True) + fig.savefig(file_name, bbox_inches="tight", pad_inches=0) + + if not (IN_JUPYTER and INLINE_PLOT): + plt.close(fig) + + def _plot_trajectory(plots_kwargs, tag, labels=False): + sns.set_context("paper", font_scale=1.5) + fig = plt.figure(figsize=(5, 3.5)) + axis1 = fig.add_subplot(211) + axis2 = fig.add_subplot(212) + + # PLOTTING CODE + plots.plot_2D_depth_trajectory( + axis1=axis1, axis2=axis2, **plots_kwargs + ) + + # axis limits + xlim = [0, 1] + if cnf_plots: + xlim = xlim[::-1] + axis1.set_xlim(xlim) + axis2.set_xlim(xlim) + + ylim1 = axis1.get_ylim() + ylim2 = axis2.get_ylim() + ylim = np.maximum(ylim1, ylim2) + axis1.set_ylim(ylim) + axis2.set_ylim(ylim) + + # axis layout + sns.despine(offset=10, trim=True) + axis1.get_xaxis().set_ticks([]) + axis1.get_xaxis().set_visible(False) + axis1.spines["bottom"].set_visible(False) + fig.tight_layout() + + # store plot + plt_folder_traj = os.path.join(plt_folder, "trajectory") + file_name = os.path.join(plt_folder_traj, tag + ".jpg") + os.makedirs(plt_folder_traj, exist_ok=True) + fig.savefig(file_name, bbox_inches="tight", pad_inches=0) + + # setup labels as separate plot + labels = labels and not cnf_plots + if labels: + from matplotlib.lines import Line2D + + legend_handles = {} + for color, label in zip(["midnightblue", "darkorange"], [0, 1]): + legend_handles[f"Class {label}"] = Line2D( + [0], [0], color=color, lw=1.5 + ) + fig_labels = plt.figure(figsize=(1, 1)) + fig_labels.gca().legend( + list(legend_handles.values()), list(legend_handles.keys()) + ) + fig_labels.gca().set_axis_off() + fig_labels.tight_layout() + file_name_labels = "labels.pdf" + file_name_labels = os.path.join(plt_folder_traj, file_name_labels) + fig_labels.savefig( + file_name_labels, bbox_inches="tight", pad_inches=0 + ) + + # close figure + if not (IN_JUPYTER and INLINE_PLOT): + plt.close(fig) + if labels: + plt.close(fig_labels) + + with HiddenPrints(): + logger.initialize_from_param(param, setup_print=False) + evaluator = experiment.Evaluator(logger) + loader_test = evaluator.get_dataloader("test")[0] + + # store prune ratios and add zero prune ratio + prune_ratios = 1 - np.array(evaluator._keep_ratios) + prune_ratios = np.concatenate(([0.0], prune_ratios)) + + for n_idx in range(evaluator._num_nets): + for r_idx in range(evaluator._num_repetitions): + for s_idx, pr in enumerate(prune_ratios): + for method_name in evaluator._method_names: + if "ReferenceNet" in method_name: + continue + with HiddenPrints(): + try: + if pr == 0.0: + lookup_name = "ReferenceNet" + else: + lookup_name = method_name + ffjord_net = evaluator.get_by_pr( + prune_ratio=pr, + method=lookup_name, + n_idx=n_idx, + r_idx=r_idx, + ).compressed_net.torchnet + except FileNotFoundError: + continue + + tag = "_".join( + [ + logger.names[logger.methods.index(method_name)], + f"n{n_idx}", + f"r{r_idx}", + f"i{s_idx:02d}", + f"p{int(pr*100):03d}", + ] + ) + + # setup and generate data, and plot + plots_kwargs = plots.prepare_data( + ffjord_net.cuda(), loader_test, n_samp=50000 + ) + _plot_distribution(plots_kwargs, tag) + try: + _plot_field(plots_kwargs, tag) + except ValueError: + pass + _plot_trajectory( + plots_kwargs, + tag, + labels=n_idx == 0 and r_idx == 0 and s_idx == 0, + ) + + print(f"Done with pr={pr:.2f}, r_idx={r_idx}, n_idx={n_idx}") + + +for STATS, PARAMS in zip(STATS_ALL, PARAM_ALL): + for STAT, PARAM in zip(STATS, PARAMS): + NET_NAME = PARAM["generated"]["netName"] + DSET = PARAM["generated"]["datasetTest"] + NETWORK = PARAM["network"]["name"] + PLT_FOLDER = os.path.join(PLOT_FOLDER_SPECIAL, DSET, NET_NAME) + IS_CNF = "ffjord_" in NET_NAME or "cnf_" in NET_NAME + if GEN_PAPER_FIGS_LOSS: + FOLDER_LOSS = os.path.join(PLT_FOLDER, "loss") + plot_loss( + LOGGER, + PARAM, + STAT, + PLOT_FILTERS, + STYLE_KWARGS, + FOLDER_LOSS, + NUM_REP_LOSS, + use_loss=IS_CNF, + ) + if ( + GEN_PAPER_FIGS_DISTRIBUTION + and "toy" in PARAM["network"]["dataset"].lower() + ): + plot_flow(LOGGER, PARAM, PLT_FOLDER, IS_CNF) diff --git a/paper/node/script/view_toysweep.py b/paper/node/script/view_toysweep.py new file mode 100644 index 0000000..79af8fd --- /dev/null +++ b/paper/node/script/view_toysweep.py @@ -0,0 +1,535 @@ +"""View and plot Neural ODE sweep results.""" +# %% +import os +import sys +import re +import warnings +import copy +import math +import yaml +import experiment +import matplotlib.colors as mcolors +import matplotlib.pyplot as plt +import numpy as np +from experiment.util.grapher import Grapher +from experiment.util.file import get_parameters, load_param_from_file + +# change working directory to src +from IPython import get_ipython + +# make sure it's using only GPU here... +os.environ["CUDA_VISIBLE_DEVICES"] = "0" # noqa + + +# switch to root folder for data +folder = os.path.abspath("") +if "paper/node/script" in folder: + src_folder = os.path.join(folder, "../../..") + os.chdir(src_folder) + +# add script path to sys path +sys.path.append("./paper/node/script") + +# %% Define some parameters +FILE = "paper/node/param/toy/ffjord/gaussians/sweep_model_da.yaml" + +INLINE_PLOT = False +USE_JPG = True + +GEN_FIGS = False +GEN_ABS_FIGS = True +GEN_POT_FIGS = True +GEN_NODE_FIGS = True +REGEN_NODE_FIGS = True + +COMM_LEVEL = 0.005 +# fmt: off +FILTER_METHODS = [ + ["WT"], + ["WT", "FT"], + # ["SiPP", "PFP"], + # ["WT", "SiPP"], + # ["FT", "PFP"], +] +# fmt: on +IS_FFJORD = "ffjord" in FILE +if IS_FFJORD: + import plots_cnf as plots +else: + import plots2d as plots + +# %% Some helpful functions +class HiddenPrints: + def __enter__(self): + self._original_stdout = sys.stdout + sys.stdout = open(os.devnull, "w") + warnings.simplefilter("ignore") + + def __exit__(self, exc_type, exc_val, exc_tb): + sys.stdout.close() + sys.stdout = self._original_stdout + warnings.simplefilter("default") + + +def plot_abs_size_acc( + logger, params, customizations, plots_dir, plot_loss, inline +): + """Plot the absolute trade-off between # of parameters and accuracy.""" + + # collect data function + def _collect_size_err(param): + # initialize logger and setup parameters + with HiddenPrints(): + logger.initialize_from_param(param, setup_print=False) + + # compute absolute sizes + sizes_abs = logger.sizes * logger.sizes_total[:, None, None, None] + + # get the desired score to plot + if plot_loss: + err_abs = copy.deepcopy(logger.loss) + else: + err_abs = copy.deepcopy(logger.error) + + # add the reference error and size at the beginning + ref_idx = logger.names.index("ReferenceNet") + sizes_abs = np.concatenate( + ( + np.broadcast_to( + logger.sizes_total[:, None, None, None], sizes_abs.shape + )[:, :1], + sizes_abs, + ), + axis=1, + ) + err_abs = np.concatenate( + ( + np.repeat( + err_abs[:, 0:1, :, ref_idx : ref_idx + 1], + err_abs.shape[3], + axis=3, + ), + err_abs, + ), + axis=1, + ) + + return sizes_abs, err_abs + + # Loop through all experiments and collect data + sizes_abs, err_abs = None, None + for i, param in enumerate(params): + sizes_abs_one, err_abs_one = _collect_size_err(param) + if sizes_abs is None: + sizes_abs = np.zeros( + sizes_abs_one.shape + (len(params),), dtype=int + ) + err_abs = copy.deepcopy(sizes_abs).astype(float) + sizes_abs[:, :, :, :, i] = sizes_abs_one + err_abs[:, :, :, :, i] = err_abs_one + + # get dataset now + dataset = logger.dataset_test + + # plot per method now + mcolor_list = list(mcolors.CSS4_COLORS.keys()) + custom_colors = [ + mcolor_list[hash(custom) % len(mcolor_list)] + for custom in customizations + ] + for i_m, method in enumerate(logger.names): + + # graph the absolute trade-off + grapher = Grapher( + x_values=sizes_abs[:, :, :, i_m], + y_values=err_abs[:, :, :, i_m], + folder=os.path.join(plots_dir, "tradeoff"), + file_name=f"err_{method}.pdf", + ref_idx=0, + x_min=0, + x_max=1e20, + legend=customizations, + colors=custom_colors, + xlabel="# of parameters", + ylabel="Loss" if plot_loss else "Error", + title=f"{method}, {dataset}", + ) + grapher.graph( + show_ref=True, + show_delta=False, + remove_outlier=True, + store=False, + percentage_y=not plot_loss, + kwargs_legend={ + "loc": "upper left", + "ncol": 1, + "bbox_to_anchor": (1.05, 1.1), + }, + ) + grapher.store_plot() + if not inline: + plt.close(grapher._figure) + + # plot per customization now + for i_c, custom in enumerate(customizations): + + # graph the absolute trade-off + grapher = Grapher( + x_values=sizes_abs[:, :, :, :, i_c], + y_values=err_abs[:, :, :, :, i_c], + folder=os.path.join(plots_dir, "tradeoff"), + file_name=f"err_{custom}.pdf", + ref_idx=0, + x_min=0, + x_max=1e20, + legend=copy.deepcopy(np.array(logger.names)).tolist(), + colors=copy.deepcopy(np.array(logger._colors)).tolist(), + xlabel="# of parameters", + ylabel="Loss" if plot_loss else "Error", + title=f"{custom}, {dataset}", + ) + grapher.graph( + show_ref=True, + show_delta=False, + remove_outlier=True, + store=False, + percentage_y=not plot_loss, + ) + grapher.store_plot() + if not inline: + plt.close(grapher._figure) + + +def get_results(file, logger, regen_figs): + """Grab all the results according to the file.""" + stats = [] + params = [] + # Loop through all experiments + for param in get_parameters(file, 1, 0): + # initialize logger and setup parameters + with HiddenPrints(): + logger.initialize_from_param(param, setup_print=False) + + # print message if incomplete but don't stop + if not logger.state_loaded: + print("Grabbing incomplete results!") + + # compute the stats + try: + stats_one = logger.compute_stats(store_report=False) + except ValueError as err: + print( + "Computing stats failed. Make sure that all partial results " + "are stored as numpy, e.g., by running it in parallel." + ) + raise err + + # extract the results + stats.append(copy.deepcopy(stats_one)) + params.append(copy.deepcopy(param)) + + # extract the plots and store them. + if not regen_figs or not logger.state_loaded: + continue + try: + with HiddenPrints(): + graphers = logger.generate_plots(store_figs=False) + for grapher in graphers: + grapher.store_plot() + except: + print("Could not generate main graphs.") + + return stats, params + + +def extract_commensurate_size(stats, comm_level): + """Compute prune potential for all experiments and return it.""" + # get the index closest to our desired comm_level + c_idx = np.abs(np.array(stats[0]["commensurate"]) - comm_level).argmin() + + # pre-allocate results array + # stats_all[0]['eBest'] + # has shape (len(commensurate), num_nets, num_rep, num_alg) + _, num_nets, num_rep, num_alg = stats[0]["e_best"].shape + num_exp = len(stats) + size_comm = np.zeros((num_nets, num_exp, num_rep, num_alg)) + + for i, stats_one in enumerate(stats): + if stats_one is not None: + size_comm[:, i, :, :] = stats_one["siz_best"][c_idx] + + return size_comm + + +def get_fig_name(title, tag, legends=[]): + """Get the name of the figure with the title and tag.""" + fig_name = "_".join(re.split("/|-|_|,", title) + legends).replace(" ", "") + return f"{fig_name}_prunepot_{tag}.pdf" + + +def plot_commensurate_size( + size_comm, + legends, + colors, + customizations, + title, + plots_dir, + plots_tag, + comm_level, +): + """Plot the prune potential for all methods.""" + # get the x values + x_val = np.arange(size_comm.shape[1], dtype=float) + + grapher_comm = Grapher( + x_values=np.broadcast_to(x_val[None, :, None, None], size_comm.shape), + y_values=1.0 - size_comm, + folder=plots_dir, + file_name=get_fig_name(title, plots_tag, legends), + ref_idx=None, + x_min=-1e10, + x_max=1e10, + legend=legends, + colors=colors, + xlabel=f"Prune Potential, $\delta={comm_level * 100:.1f}\%$", + ylabel="Method", + title=title, + ) + + with HiddenPrints(): + img_comm = grapher_comm.graph_histo(normalize=False, store=False) + + # set custom x ticks with labels + img_comm.gca().set_xticks(x_val) + img_comm.gca().set_xticklabels(customizations, rotation=75, fontsize=20) + + # then store it + grapher_comm.store_plot() + + return img_comm + + +def generate_one_sweep( + logger, + params, + plt_folder, + n_idx, + r_idx, + method_name, + customizations, + inline, + use_jpg, + regen_figs, +): + # get keep ratios and add zero pruning as well + m_name_ref = "ReferenceNet" + keep_ratios = params[0]["generated"]["keepRatios"] + keep_ratios = np.concatenate(([1.0], keep_ratios)) + + figsize = [6.4, 4.8] + ncols = math.ceil(math.sqrt(len(params))) + nrows = math.ceil(len(params) / ncols) + figsize[0] *= ncols + figsize[1] *= nrows + + for s_idx, keep_ratio in enumerate(keep_ratios): + # only plot for one keep ratio for reference net. + if m_name_ref in method_name and s_idx > 0: + break + + # create folder + os.makedirs(plt_folder, exist_ok=True) + # generate figure name + tag = f"i_{s_idx - 1}_p{keep_ratio:.3f}" + if use_jpg: + file_ending = ".jpg" + else: + file_ending = ".pdf" + fig_file = os.path.join(plt_folder, tag + file_ending) + + # continue if exists and we shouldn't regen figures + if not regen_figs and os.path.exists(fig_file): + continue + + # initialize figure and layout + fig, axes = plt.subplots( + nrows=nrows, + ncols=ncols, + sharex=True, + sharey=True, + figsize=figsize, + squeeze=False, + ) + plt.style.use("default") + plt.rcParams.update( + { + "xtick.labelsize": 16, + "ytick.labelsize": 16, + } + ) + + # go through each parameter config of sweep + for axis, param, custom in zip(axes.flatten(), params, customizations): + logger.initialize_from_param(param, setup_print=False) + with HiddenPrints(): + # initialize evaluator and logger + evaluator = experiment.Evaluator(logger) + + # get data loader + loader_test = evaluator.get_dataloader("test")[0] + + # retrieve model and plot if it exists + try: + net = evaluator.get_by_pr( + prune_ratio=1.0 - keep_ratio, + n_idx=n_idx, + r_idx=r_idx, + method=method_name if keep_ratio < 1.0 else m_name_ref, + ).compressed_net.cuda() + except FileNotFoundError: + continue + + # set plot title + axis.set_title(f"{custom}\n#p={int(net.size())}", fontsize=20) + + # setup and generate plots + plots_kwargs = plots.prepare_data(net.torchnet, loader_test) + plots.plot_for_sweep(axis=axis, **plots_kwargs) + + # store plot at the end now. + fig.suptitle(f"{method_name}, {tag}", fontsize=24) + fig.savefig(fig_file, bbox_inches="tight") + if not inline: + plt.close(fig) + + +def generate_sweepy_figures( + logger, params, customizations, plot_dir, regen_figs, inline, use_jpg +): + """Generate figures with view over sweep.""" + # extract all repetitions from here + num_nets = params[0]["experiments"]["numNets"] + num_repetitions = params[0]["experiments"]["numRepetitions"] + method_names = params[0]["experiments"]["methods"] + + # loop through all repetitions and method names. + for n_idx in range(num_nets): + for r_idx in range(num_repetitions): + for method_name in method_names: + tag = "_".join([method_name, f"n{n_idx}", f"r{r_idx}"]) + plt_folder = os.path.join(plot_dir, tag) + + # print folder + print(plt_folder) + + # now plot sequence of keep ratios + generate_one_sweep( + logger, + params, + plt_folder, + n_idx, + r_idx, + method_name, + customizations, + inline, + use_jpg, + regen_figs, + ) + + # print finish message + print("Done\n") + + +# %% Retrieve results +# make sure matplotlib works correctly +IN_JUPYTER = True +try: + if INLINE_PLOT: + get_ipython().run_line_magic("matplotlib", "inline") + else: + get_ipython().run_line_magic("matplotlib", "agg") +except AttributeError: + IN_JUPYTER = False + +# get a logger +LOGGER = experiment.Logger() +print(f"PARAM FILE: {FILE}") + +# get the results specified in the file (and hopefully pre-computed) +STATS, PARAMS = get_results(FILE, LOGGER, GEN_FIGS) + +# extract some other info from params +LABELS_METHOD = PARAMS[0]["generated"]["network_names"] +COLORS_METHOD = PARAMS[0]["generated"]["network_colors"] +NETWORK_NAME = PARAMS[0]["network"]["name"] +TRAIN_DSET = PARAMS[0]["network"]["dataset"] +TITLE_PR = f"{NETWORK_NAME}, {TRAIN_DSET}" +PLOTS_DIR = os.path.join( + PARAMS[0]["generated"]["plotDir"], + os.path.splitext(os.path.basename(FILE))[0], +) +CUSTOMIZATIONS = [ + ", ".join([f"{k}={v}" for k, v in custom["value"].items()]) + if isinstance(custom["value"], dict) + else str(custom["value"]) + for custom in load_param_from_file(FILE)["customizations"] +] + +# print plot folders for reference +for param, custom in zip(PARAMS, CUSTOMIZATIONS): + print(f"Customizations: {custom}") + print(f"Plot Folder: {param['generated']['plotDir']}\n") + +# special folder as folder +print(f"Sweep plot folder: {PLOTS_DIR}") + + +# %% generate prune potential plot +if GEN_POT_FIGS: + # compute commensurate size for desired comm level for all results + SIZE_COMM = extract_commensurate_size(STATS, COMM_LEVEL) + + PLOTS_DIR_POT = os.path.join(PLOTS_DIR, "prune_pot") + print(PLOTS_DIR_POT) + + # plot a subset of the methods + for methods in FILTER_METHODS: + try: + idx_filt = [LABELS_METHOD.index(method) for method in methods] + except ValueError: + continue + fig = plot_commensurate_size( + size_comm=SIZE_COMM[:, :, :, idx_filt], + legends=methods, + colors=[COLORS_METHOD[i] for i in idx_filt], + customizations=CUSTOMIZATIONS, + title=TITLE_PR, + plots_dir=PLOTS_DIR_POT, + plots_tag="prune_pot", + comm_level=COMM_LEVEL, + ) + print("Done\n") + +# %% Generate abs parameter-error trade-off figures +if GEN_ABS_FIGS: + plot_abs_size_acc( + LOGGER, + PARAMS, + CUSTOMIZATIONS, + PLOTS_DIR, + IS_FFJORD, + INLINE_PLOT, + ) + + +# %% now generate the sweep plots +if GEN_NODE_FIGS: + generate_sweepy_figures( + LOGGER, + PARAMS, + CUSTOMIZATIONS, + PLOTS_DIR, + REGEN_NODE_FIGS, + INLINE_PLOT, + USE_JPG, + ) diff --git a/paper/sipp/README.md b/paper/sipp/README.md index 05311c7..78679f7 100644 --- a/paper/sipp/README.md +++ b/paper/sipp/README.md @@ -6,7 +6,7 @@ [Daniela Rus](http://danielarus.csail.mit.edu/) Implementation of provable pruning using sensitivity as introduced in [SiPPing -Neural Networks: Sensitivity-informed Provable Pruning of Neural Networks](https://arxiv.org/abs/1910.05422) +Neural Networks: Sensitivity-informed Provable Pruning of Neural Networks](https://doi.org/10.1137/20M1383239) (weight pruning). ***Equal contribution** @@ -55,10 +55,14 @@ Please cite our paper when using this codebase. ### Bibtex ``` -@article{baykal2019sipping, - title={SiPPing Neural Networks: Sensitivity-informed Provable Pruning of Neural Networks}, +@article{baykal2022sensitivity, + title={Sensitivity-informed provable pruning of neural networks}, author={Baykal, Cenk and Liebenwein, Lucas and Gilitschenski, Igor and Feldman, Dan and Rus, Daniela}, - journal={arXiv preprint arXiv:1910.05422}, - year={2019} + journal={SIAM Journal on Mathematics of Data Science}, + volume={4}, + number={1}, + pages={26--45}, + year={2022}, + publisher={SIAM} } ``` \ No newline at end of file diff --git a/paper/sipp/param/cifar/cascade/wrn28_2.yaml b/paper/sipp/param/cifar/cascade/wrn28_2.yaml new file mode 100644 index 0000000..2190269 --- /dev/null +++ b/paper/sipp/param/cifar/cascade/wrn28_2.yaml @@ -0,0 +1,31 @@ +network: + name: "wrn28_2" + dataset: "CIFAR10" + outputSize: 10 + +training: + file: "training/cifar/wrn.yaml" + +retraining: {} + +experiments: + methods: + - "SiPPNet" + - "SiPPNetRand" + - "SiPPNetHybrid" + mode: "cascade" + + numRepetitions: 1 + numNets: 3 + + plotting: + minVal: 0.02 + maxVal: 0.85 + + spacing: + - type: "geometric" + numIntervals: 20 + maxVal: 0.70 + minVal: 0.05 + + retrainIterations: -1 diff --git a/paper/sipp/param/cifar/sweep/resnet20_default.yaml b/paper/sipp/param/cifar/sweep/resnet20_default.yaml new file mode 100644 index 0000000..1a1ec69 --- /dev/null +++ b/paper/sipp/param/cifar/sweep/resnet20_default.yaml @@ -0,0 +1,36 @@ +network: + name: "resnet20" + dataset: "CIFAR10" + outputSize: 10 + +training: + file: "training/cifar/resnet.yaml" + +retraining: + numEpochs: 0 + +experiments: + methods: + - "SiPPNet" + - "SiPPNetRand" + - "SiPPNetHybrid" + mode: "retrain" + + numRepetitions: 1 + numNets: 3 + + plotting: + minVal: 0.02 + maxVal: 0.99 + + spacing: + - type: "geometric" + numIntervals: 30 + maxVal: 0.90 + minVal: 0.40 + + retrainIterations: -1 + +# coreset parameters +coresets: + deltaS: 1.0e-16 # 183 diff --git a/paper/sipp/param/cifar/sweep/resnet20_sizes.yaml b/paper/sipp/param/cifar/sweep/resnet20_sizes.yaml new file mode 100644 index 0000000..c6ad490 --- /dev/null +++ b/paper/sipp/param/cifar/sweep/resnet20_sizes.yaml @@ -0,0 +1,34 @@ +file: "paper/sipp/param/cifar/sweep/resnet20_default.yaml" +# Make sure num_customization is divisible by num_workers during deployment!!! +# Currently, we have 25 customizations here... +customizations: + - key: ["coresets", "deltaS"] + value: 1.0e+1 + - key: ["coresets", "deltaS"] + value: 1.0e+0 + - key: ["coresets", "deltaS"] + value: 1.0e-1 + - key: ["coresets", "deltaS"] + value: 1.0e-2 + - key: ["coresets", "deltaS"] + value: 1.0e-4 + - key: ["coresets", "deltaS"] + value: 1.0e-6 + - key: ["coresets", "deltaS"] + value: 1.0e-8 + - key: ["coresets", "deltaS"] + value: 1.0e-10 + - key: ["coresets", "deltaS"] + value: 1.0e-12 + - key: ["coresets", "deltaS"] + value: 1.0e-14 + - key: ["coresets", "deltaS"] + value: 1.0e-16 # standard, 183 + - key: ["coresets", "deltaS"] + value: 1.0e-20 + - key: ["coresets", "deltaS"] + value: 1.0e-24 + - key: ["coresets", "deltaS"] + value: 1.0e-28 + - key: ["coresets", "deltaS"] + value: 1.0e-32 diff --git a/paper/sipp/param/mnist/fc_nettrim.yaml b/paper/sipp/param/mnist/fc_nettrim.yaml new file mode 100644 index 0000000..2e72b64 --- /dev/null +++ b/paper/sipp/param/mnist/fc_nettrim.yaml @@ -0,0 +1,33 @@ +network: + name: "fcnet_nettrim" + dataset: "MNIST" + outputSize: 10 + +training: + file: "training/mnist/lenet.yaml" + +retraining: {} + +experiments: + methods: + - "SiPPNet" + - "SiPPNetRand" + - "SiPPNetHybrid" + - "ThresNet" + - "SnipNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 3 + + plotting: + minVal: 0.01 + maxVal: 0.3 + + spacing: + - type: "geometric" + numIntervals: 30 # number of intervals to 0.5 in cascade mode + maxVal: 0.80 + minVal: 0.01 + + retrainIterations: -1 diff --git a/paper/sipp/param/mnist/lenet300.yaml b/paper/sipp/param/mnist/lenet300.yaml new file mode 100644 index 0000000..d889727 --- /dev/null +++ b/paper/sipp/param/mnist/lenet300.yaml @@ -0,0 +1,33 @@ +network: + name: "lenet300_100" + dataset: "MNIST" + outputSize: 10 + +training: + file: "training/mnist/lenet.yaml" + +retraining: {} + +experiments: + methods: + - "SiPPNet" + - "SiPPNetRand" + - "SiPPNetHybrid" + - "ThresNet" + - "SnipNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 3 + + plotting: + minVal: 0.01 + maxVal: 0.3 + + spacing: + - type: "geometric" + numIntervals: 30 + maxVal: 0.80 + minVal: 0.01 + + retrainIterations: -1 diff --git a/paper/sipp/param/mnist/lenet300_sizes.yaml b/paper/sipp/param/mnist/lenet300_sizes.yaml new file mode 100644 index 0000000..f9775a4 --- /dev/null +++ b/paper/sipp/param/mnist/lenet300_sizes.yaml @@ -0,0 +1,60 @@ +file: "paper/sipp/param/mnist/lenet300.yaml" +# Make sure num_customization is divisible by num_workers during deployment!!! +# Currently, we have 15 customizations here... + +retraining: + numEpochs: 0 + +experiments: + methods: + - "SiPPNet" + - "SiPPNetRand" + - "SiPPNetHybrid" + mode: "retrain" + + numRepetitions: 1 + numNets: 3 + + plotting: + minVal: 0.01 + maxVal: 0.3 + + spacing: + - type: "geometric" + numIntervals: 30 + maxVal: 0.99 + minVal: 0.30 + + retrainIterations: -1 + +customizations: + - key: ["coresets", "deltaS"] + value: 1.0e+1 + - key: ["coresets", "deltaS"] + value: 1.0e+0 + - key: ["coresets", "deltaS"] + value: 1.0e-1 + - key: ["coresets", "deltaS"] + value: 1.0e-2 + - key: ["coresets", "deltaS"] + value: 1.0e-4 + - key: ["coresets", "deltaS"] + value: 1.0e-6 + - key: ["coresets", "deltaS"] + value: 1.0e-8 + - key: ["coresets", "deltaS"] + value: 1.0e-10 + - key: ["coresets", "deltaS"] + value: 1.0e-12 + - key: ["coresets", "deltaS"] + value: 1.0e-14 + - key: ["coresets", "deltaS"] + value: 1.0e-16 # standard, 183 + - key: ["coresets", "deltaS"] + value: 1.0e-20 + - key: ["coresets", "deltaS"] + value: 1.0e-24 + - key: ["coresets", "deltaS"] + value: 1.0e-28 + - key: ["coresets", "deltaS"] + value: 1.0e-32 diff --git a/paper/sipp/param/mnist/lenet300_sizes2.yaml b/paper/sipp/param/mnist/lenet300_sizes2.yaml new file mode 100644 index 0000000..86ba0b6 --- /dev/null +++ b/paper/sipp/param/mnist/lenet300_sizes2.yaml @@ -0,0 +1,60 @@ +file: "paper/sipp/param/mnist/lenet300.yaml" +# Make sure num_customization is divisible by num_workers during deployment!!! +# Currently, we have 15 customizations here... + +retraining: + startEpoch: 48 + +experiments: + methods: + - "SiPPNet" + - "SiPPNetRand" + - "SiPPNetHybrid" + mode: "retrain" + + numRepetitions: 1 + numNets: 3 + + plotting: + minVal: 0.01 + maxVal: 0.3 + + spacing: + - type: "geometric" + numIntervals: 30 + maxVal: 0.99 + minVal: 0.30 + + retrainIterations: -1 + +customizations: + - key: ["coresets", "deltaS"] + value: 1.0e+1 + - key: ["coresets", "deltaS"] + value: 1.0e+0 + - key: ["coresets", "deltaS"] + value: 1.0e-1 + - key: ["coresets", "deltaS"] + value: 1.0e-2 + - key: ["coresets", "deltaS"] + value: 1.0e-4 + - key: ["coresets", "deltaS"] + value: 1.0e-6 + - key: ["coresets", "deltaS"] + value: 1.0e-8 + - key: ["coresets", "deltaS"] + value: 1.0e-10 + - key: ["coresets", "deltaS"] + value: 1.0e-12 + - key: ["coresets", "deltaS"] + value: 1.0e-14 + - key: ["coresets", "deltaS"] + value: 1.0e-16 # standard, 183 + - key: ["coresets", "deltaS"] + value: 1.0e-20 + - key: ["coresets", "deltaS"] + value: 1.0e-24 + - key: ["coresets", "deltaS"] + value: 1.0e-28 + - key: ["coresets", "deltaS"] + value: 1.0e-32 diff --git a/paper/sipp/param/mnist/lenet5.yaml b/paper/sipp/param/mnist/lenet5.yaml new file mode 100644 index 0000000..2c143ef --- /dev/null +++ b/paper/sipp/param/mnist/lenet5.yaml @@ -0,0 +1,43 @@ +network: + name: "lenet5" + dataset: "MNIST" + outputSize: 10 + +training: + file: "training/mnist/lenet.yaml" + transformsTrain: + - type: Pad + kwargs: { padding: 4 } + - type: RandomCrop + kwargs: { size: 32 } + transformsTest: + - type: Pad + kwargs: { padding: 4 } + - type: CenterCrop + kwargs: { size: 32 } + +retraining: {} + +experiments: + methods: + - "SiPPNet" + - "SiPPNetRand" + - "SiPPNetHybrid" + - "ThresNet" + - "SnipNet" + mode: "cascade" + + numRepetitions: 1 + numNets: 3 + + plotting: + minVal: 0.01 + maxVal: 0.3 + + spacing: + - type: "geometric" + numIntervals: 30 + maxVal: 0.80 + minVal: 0.01 + + retrainIterations: -1 diff --git a/paper/sipp/script/results_comparisons.py b/paper/sipp/script/results_comparisons.py new file mode 100644 index 0000000..b25528f --- /dev/null +++ b/paper/sipp/script/results_comparisons.py @@ -0,0 +1,200 @@ +# %% +# make sure the setup is correct everywhere +import os +import copy +import numpy as np + +# change working directory to src +from IPython import get_ipython +import experiment +from experiment.util.file import get_parameters + +# make sure it's using only GPU here... +os.environ["CUDA_VISIBLE_DEVICES"] = "0" # noqa + +# switch to root folder for data +folder = os.path.abspath("") +if "paper/sipp/script" in folder: + src_folder = os.path.join(folder, "../../..") + os.chdir(src_folder) + +# %% +# parameters for running the test +FILE = "paper/sipp/param/mnist/fc_nettrim.yaml" +# FILE = "paper/sipp/param/mnist/lenet5.yaml" +FILE = "paper/sipp/param/cifar/cascade/wrn28_2.yaml" +INLINE_PLOT = True + +# %% Manually recorded numbers + +# RESULTS FROM NET-TRIM PAPER + +# NET-TRIM for FC-Nettrim and LeNet5 +# fmt: off +pr_nt = [44, 53.5, 59, 62, 66, 75, 80, 84.5, 88, 91, 93.5, 97, 99] +acc_nt = [98.7, 98.55, 98.6, 98.65, 98.62, 98.68, 98.62, 98.55, 98.45, 98.31, 98.07, 96.52, 0.0] +# fmt: on + +pr_nt5 = [0.0, 76.25, 79.25, 87.5, 94.75, 96.4, 97.75, 98.15, 98.7, 98.75] +acc_nt5 = [99.46, 99.46, 99.48, 99.48, 99.43, 99.41, 99.38, 99.33, 99.21, 0.0] + +# BAYESIAN COMPRESSION for FC-Nettrim and LeNet5 +pr_bc = [39.0, 45.0, 47.0, 59.0, 74.2, 79.0, 83.0, 99.0] +acc_bc = [98.05, 98.05, 97.95, 97.75, 97.40, 97.15, 97.05, 0.0] + +pr_bc5 = [0.0, 75.2, 78.33, 83.33, 93.2, 94.7, 99.5] +acc_bc5 = [99.3, 99.3, 99.15, 99.12, 98.66, 98.45, 0.0] + +# DYNAMIC NETWORK SURGERY for FC-Nettrim and LeNet5 +pr_dns = [51.5, 56.0, 57.5, 76.0, 88.0, 95.0, 97.7, 98.8, 99.5] +acc_dns = [98.60, 98.65, 98.62, 98.53, 98.60, 98.31, 96.68, 95.3, 0.0] + +pr_dns5 = [0.0, 78.5, 84.7, 90.00, 93.1, 97.2, 97.95, 98.5, 99.5] +acc_dns5 = [99.51, 99.51, 99.48, 99.39, 99.41, 99.35, 99.1, 98.85, 0.0] + +# RESULTS FROM DSR PAPER + +# DSR (Dynamic Sparse Reparameterization) for WRN28-2 +pr_dsr = [50.0, 60.0, 70.0, 80.0, 90.0] +acc_dsr = [94.7, 94.7, 94.52, 94.47, 93.65] + +# DeepR for WRN28-2 +pr_deepr = [50.0, 60.0, 70.0, 80.0, 90.0] +acc_deepr = [93.05, 92.83, 92.62, 92.45, 91.45] + +# SET for WRN28-2 +pr_set = [50.0, 60.0, 70.0, 80.0, 90.0] +acc_set = [94.72, 94.57, 94.38, 94.3, 93.3] + +# "Compressed Sparse" for WRN2-2 (To prune, not to prune Zhu and Ghupta, 2017) +pr_tpntp = [50.0, 60.0, 70.0, 80.0, 90.0] +acc_tpntp = [94.53, 94.53, 94.53, 94.17, 93.8] + +# %% make sure matplotlib works correctly +IN_JUPYTER = True +try: + if INLINE_PLOT: + get_ipython().run_line_magic("matplotlib", "inline") + else: + get_ipython().run_line_magic("matplotlib", "agg") +except AttributeError: + IN_JUPYTER = False + + +# %% get results +def get_results(file, logger): + """Grab all the results according to the hyperparameter file.""" + results = [] + params = [] + labels = [] + # Loop through all experiments + for param in get_parameters(file, 1, 0): + # initialize logger and setup parameters + logger.initialize_from_param(param) + # run the experiment (only if necessary) + try: + state = logger.get_global_state() + except ValueError: + experiment.Evaluator(logger).run() + state = logger.get_global_state() + # extract the results + results.append(copy.deepcopy(state)) + params.append(copy.deepcopy(param)) + # extract the legend (based on heuristic) + label = param["generated"]["datasetTest"].split("_") + if len(label) > 2: + label = label[2:] + labels.append("_".join(label)) + # extract the plots + graphers = logger.generate_plots(store_figs=False) + + return results, params, labels, graphers + + +# get a logger +logger = experiment.Logger() + +# get the results specified in the file (and hopefully pre-computed) +results, params, labels, graphers = get_results(FILE, logger) + +error_res = results[0]["error"] +sizes_res = results[0]["sizes"] +names = results[0]["names"] + +if "mnist/fc_nettrim" in FILE: + legends = ["Net-Trim", "BC", "DNS"] + colors = ["green", "black", "purple"] + pr_new = [pr_nt, pr_bc, pr_dns] + acc_new = [acc_nt, acc_bc, acc_dns] +elif "mnist/lenet5" in FILE: + legends = ["Net-Trim", "BC", "DNS"] + colors = ["green", "black", "purple"] + pr_new = [pr_nt5, pr_bc5, pr_dns5] + acc_new = [acc_nt5, acc_bc5, acc_dns5] +elif "cifar/cascade/wrn28_2" in FILE: + legends = ["DSR", "DeepR", "SET", "TPNTP"] + colors = ["green", "black", "purple", "magenta"] + pr_new = [pr_dsr, pr_deepr, pr_set, pr_tpntp] + acc_new = [acc_dsr, acc_deepr, acc_set, acc_tpntp] +else: + raise ValueError("Please provide a valid parameter file") + +prune_ratios = np.ones(sizes_res.shape[:3] + (len(legends),)) * 100.0 +acc = np.zeros_like(prune_ratios) + + +# now store all the elements +for i, (pr_one, acc_one) in enumerate(zip(pr_new, acc_new)): + # set values + prune_ratios[:, : len(pr_one), :, i] = np.asarray(pr_one)[None, :, None] + acc[:, : len(acc_one), :, i] = np.asarray(acc_one)[None, :, None] + # set last value for remaining ... + prune_ratios[:, len(pr_one) :, :, i] = pr_one[-1] + acc[:, len(acc_one) :, :, i] = acc_one[-1] +# normalize them now +errors_manual = 1.0 - acc / 100.0 +sizes_manual = 1.0 - prune_ratios / 100.0 + +# now we need to merge results + +# remove other methods first +IDX_REMOVE = 4 +errors_res = error_res[:, :, :, :IDX_REMOVE] +sizes_res = sizes_res[:, :, :, :IDX_REMOVE] +names = names[:IDX_REMOVE] + +# merge results +legends_merged = names + legends +errors_merged = np.concatenate((errors_res, errors_manual), axis=-1) +sizes_merged = np.concatenate((sizes_res, sizes_manual), axis=-1) + + +# re-use grapher and store plot +grapher = graphers[0] +grapher._linestyles = ["-"] * len(legends_merged) +grapher._x_values = 1.0 - sizes_merged +grapher._y_values = 1.0 - errors_merged +grapher._legend = legends_merged +colors_merged = grapher._colors[:IDX_REMOVE] +colors_merged.extend(colors) +grapher._colors = colors_merged + +grapher.graph( + percentage_x=True, + percentage_y=True, + store=False, + show_ref=False, + show_delta=False, + remove_outlier=False, +) +if "mnist/lenet5" in FILE: + grapher._figure.gca().set_xlim([80, 100.0]) + grapher._figure.gca().set_ylim([97, 99.9]) +elif "mnist/fc_nettrim" in FILE: + grapher._figure.gca().set_xlim([69, 100.0]) + grapher._figure.gca().set_ylim([95, 99.5]) +elif "wrn28_2" in FILE: + grapher._figure.gca().set_xlim([70, 95]) + grapher._figure.gca().set_ylim([92, 95.2]) + +grapher.store_plot() \ No newline at end of file diff --git a/paper/sipp/results_viewer.py b/paper/sipp/script/results_viewer.py similarity index 73% rename from paper/sipp/results_viewer.py rename to paper/sipp/script/results_viewer.py index 3807709..a4db8c5 100644 --- a/paper/sipp/results_viewer.py +++ b/paper/sipp/script/results_viewer.py @@ -1,8 +1,4 @@ -# To add a new markdown cell, type '# %% [markdown]' -# %% Change working directory from the workspace root to the ipynb file -# location. Turn this addition off with the DataScience.changeDirOnImportExport -# setting -# ms-python.python added +# %% from __future__ import print_function # make sure the setup is correct everywhere @@ -17,22 +13,16 @@ # make sure it's using only GPU here... os.environ["CUDA_VISIBLE_DEVICES"] = "0" # noqa -# make sure matplotlib works if we are running the script as notebook -in_jupyter = True -try: - get_ipython().run_line_magic("matplotlib", "inline") -except AttributeError: - in_jupyter = False - # switch to root folder for data folder = os.path.abspath("") -if "paper/sipp" in folder: - src_folder = os.path.join(folder, "../..") +if "paper/sipp/script" in folder: + src_folder = os.path.join(folder, "../../..") os.chdir(src_folder) # %% -# parameters for running the test -FILE = "paper/sipp/param/cifar/resnet56.yaml" +# parameter file to plot results +FILE = "paper/sipp/param/mnist/lenet5.yaml" +INLINE_PLOT = True def get_results(file, logger): @@ -69,7 +59,7 @@ def get_results(file, logger): remove_outlier=False, ) - if "_rand" in file or "retraininit" in file: + elif "_rand" in file or "retraininit" in file: for i, grapher in enumerate(graphers[:6]): percentage_y = bool((i + 1) % 3) grapher.graph( @@ -83,17 +73,38 @@ def get_results(file, logger): if percentage_y: # grapher._figure.gca().set_xlim([50, 99]) grapher._figure.gca().set_ylim([80, 95]) + elif "mnist" in file: + graphers[0].graph( + percentage_x=True, + percentage_y=True, + store=False, + show_ref=False, + show_delta=False, + remove_outlier=False, + ) + graphers[0]._figure.gca().set_xlim([97, 100]) + graphers[0]._figure.gca().set_ylim([95, 99.5]) return results, params, labels, graphers +# %% Run through plots +# make sure matplotlib works correctly +IN_JUPYTER = True +try: + if INLINE_PLOT: + get_ipython().run_line_magic("matplotlib", "inline") + else: + get_ipython().run_line_magic("matplotlib", "agg") +except AttributeError: + IN_JUPYTER = False + # get a logger logger = experiment.Logger() # get the results specified in the file (and hopefully pre-computed) results, params, labels, graphers = get_results(FILE, logger) -# %% show the results for grapher in graphers: grapher._figure.show() grapher.store_plot() diff --git a/paper/sipp/script/sweep_s.py b/paper/sipp/script/sweep_s.py new file mode 100644 index 0000000..1d75f3a --- /dev/null +++ b/paper/sipp/script/sweep_s.py @@ -0,0 +1,269 @@ +# To add a new markdown cell, type '# %% [markdown]' +# %% Set imports and working directory +from __future__ import print_function + +import os +import sys +import copy +import re +import glob +from collections import OrderedDict + +from IPython import get_ipython +import numpy as np +import experiment +import experiment.util as util +from matplotlib import ticker + +# make sure matplotlib works if we are running the script as notebook +IN_JUPYTER = True +try: + get_ipython().run_line_magic("matplotlib", "inline") +except AttributeError: + IN_JUPYTER = False + +# switch to root folder for data +if "paper/sipp/script" in os.path.abspath(""): + os.chdir(os.path.abspath("../../..")) + +# %% set parameters for testing +FILE = "paper/sipp/param/cifar/sweep/resnet20_sizes.yaml" +FILE = "paper/sipp/param/mnist/lenet300_sizes.yaml" +# FILE = "paper/sipp/param/mnist/lenet300_sizes2.yaml" + +INLINE_PLOT = True +LEGEND_ON = True + +# commensurate level for prune potential +COMM_LEVELS = [0.04] +# COMM_LEVELS = [0.01] + +# folder for param/acc plot... +PLOT_FOLDER_SPECIAL = os.path.abspath(os.path.join("data/results/sipp_plots")) + +# %% define functions +def get_results(file, logger): + """Grab all the results according to the hyperparameter file.""" + results = [] + params = [] + deltas_s = [] + # fmt: off + sizes_of_s = [35, 42, 49, 56, 70, 83, 97, 111, 125, 139, 152, 180, 208, 235, 263] + # fmt: on + # Loop through all experiments + for param in util.file.get_parameters(file, 1, 0): + # initialize logger and setup parameters + logger.initialize_from_param(param) + # run the experiment (only if necessary) + try: + state = logger.get_global_state() + delta_s = param["coresets"]["deltaS"] + # evaluator = experiment.Evaluator(logger) + # size_of_s = len(evaluator.get_dataloader("s_set")[0].dataset) + except ValueError as err: + raise ValueError("Please compute global state first") from err + # extract the results + results.append(copy.deepcopy(state)) + params.append(copy.deepcopy(param)) + deltas_s.append(delta_s) + # sizes_of_s.append(size_of_s) + print(deltas_s) + print(sizes_of_s) + return ( + OrderedDict(zip(sizes_of_s, results)), + OrderedDict(zip(sizes_of_s, params)), + ) + + +# do some plotting and analysis of the results now ... +def get_fig_name(title, tag): + """Get the name of the figure with the title and tag.""" + fig_name = "_".join(re.split("/|-|_|,", title)).replace(" ", "") + return f"{fig_name}_sweep_{tag}.pdf" + + +def extract_commensurate_size(stats, comm_level): + """Compute prune potential for each result and return it.""" + # get the index closest to our desired comm_level + c_idx = np.abs(np.array(stats[0]["commensurate"]) - comm_level).argmin() + + # pre-allocate results array + # stats_all[0]['eBest'] + # has shape (len(commensurate), num_nets, num_rep, num_alg) + _, num_nets, num_rep, num_alg = stats[0]["e_best"].shape + num_sweeps = len(stats) + size_comm = np.zeros((num_nets, num_sweeps, num_rep, num_alg)) + flops_comm = np.zeros_like(size_comm) + e_comm = np.zeros_like(size_comm) + e5_comm = np.zeros_like(size_comm) + + for i, stats_one in enumerate(stats): + size_comm[:, i] = stats_one["siz_best"][c_idx] + flops_comm[:, i] = stats_one["flo_best"][c_idx] + e_comm[:, i] = stats_one["e_best"][c_idx] + e5_comm[:, i] = stats_one["e5_best"][c_idx] + + return size_comm, flops_comm, e_comm, e5_comm + + +def plot_prune_potential( + sizes_s, + size_comm, + idx_ref, + legends, + colors, + title, + plots_dir, + plots_tag, + comm_level, + legend_on, + folder_special, +): + """Plot the prune potential for all methods.""" + + sizes_s = np.broadcast_to(sizes_s[None, :, None, None], size_comm.shape) + grapher_pp = util.grapher.Grapher( + x_values=sizes_s, + y_values=1.0 - size_comm, + folder=plots_dir, + file_name=get_fig_name(title, plots_tag), + ref_idx=idx_ref, + x_min=0, + x_max=1000, + legend=legends, + colors=colors, + xlabel="Size of S", + ylabel=f"Prune Ratio, $\Delta\leq{comm_level * 100:.1f}\%$", + title=title, + ) + + img_pp = grapher_pp.graph( + show_ref=False, + show_delta=False, + percentage_x=False, + percentage_y=True, + remove_outlier=False, + logplot=False, + store=False, + ) + + # set axis limits + img_pp.gca().set_xlim(120, 270) + img_pp.gca().set_ylim(35, 72) + + # check for legend off + if not legend_on: + img_pp.gca().get_legend().remove() + + # then store it + grapher_pp.store_plot() + + # and again in special folder + grapher_pp._folder = folder_special + grapher_pp.store_plot() + + return img_pp + + +def get_and_store_results( + file, logger, comm_levels, legend_on, folder_special +): + # get the results specified in the file (and hopefully pre-computed) + results, params = get_results(file, logger) + + # reset stdout after our logger modifies it ... + sys.stdout = sys.stdout._stdout_original + + # %% extract some additional information from the results + results_one = list(results.values())[0] + param_one = list(params.values())[0] + train_dset = param_one["network"]["dataset"] + + labels_method = param_one["generated"]["network_names"] + colors_method = param_one["generated"]["network_colors"] + + # some more stuff for plotting + network_name = param_one["network"]["name"] + title_pr = f"{network_name}, {train_dset}" + if "rewind" in param_one["experiments"]["mode"]: + title_pr += ", rewind" + + plots_dir = os.path.join( + param_one["generated"]["resultsDir"], "plots", "sweep" + ) + + # get reference indices + idx_ref_method = labels_method.index("ReferenceNet") + + # recall number of retraining as relative + sizes_s = np.array(list(results.keys())) + + s_c_all, f_c_all, e_c_all, e5_c_all = (None,) * 4 + + for i_c, comm_level in enumerate(comm_levels): + # compute commensurate size for desired comm level for all results + s_c, f_c, e_c, e5_c = extract_commensurate_size( + [res["stats_comm"] for res in results.values()], comm_level + ) + + if s_c_all is None: + s_c_all = np.zeros((len(comm_levels),) + s_c.shape) + f_c_all = np.zeros_like(s_c_all) + e_c_all = np.zeros_like(s_c_all) + e5_c_all = np.zeros_like(s_c_all) + + # store info + s_c_all[i_c] = s_c + f_c_all[i_c] = f_c + e_c_all[i_c] = e_c + e5_c_all[i_c] = e5_c + + # now plot the commensurate size (prune potential) + # plot a subset of the methods + fig = plot_prune_potential( + sizes_s=sizes_s, + size_comm=s_c, + idx_ref=idx_ref_method, + legends=labels_method, + colors=colors_method, + title=title_pr, + plots_dir=plots_dir, + plots_tag=f"prune_pot_delta_{comm_level:.3f}", + comm_level=comm_level, + legend_on=legend_on, + folder_special=folder_special, + ) + + print(f"PLOT DIR: {plots_dir}") + return ( + param_one, + { + "names": results_one["names"], + "sizes_s": sizes_s, + "sizes": s_c_all, + "flops": f_c_all, + "e": e_c_all, + "e5": e5_c_all, + }, + ) + + +# %% plot and store for all files now + +# make sure matplotlib works correctly +IN_JUPYTER = True +try: + if INLINE_PLOT: + get_ipython().run_line_magic("matplotlib", "inline") + else: + get_ipython().run_line_magic("matplotlib", "agg") +except AttributeError: + IN_JUPYTER = False + +# get a logger +LOGGER = experiment.Logger() + +# go through sweep +PARAM, STATS_COMM = get_and_store_results( + FILE, LOGGER, COMM_LEVELS, LEGEND_ON, PLOT_FOLDER_SPECIAL +) diff --git a/src/experiment/experiment/evaluator.py b/src/experiment/experiment/evaluator.py index ee58a14..8de0306 100644 --- a/src/experiment/experiment/evaluator.py +++ b/src/experiment/experiment/evaluator.py @@ -107,8 +107,6 @@ def __init__(self, logger): # Failure probability for constructing S. self._delta = param["coresets"]["deltaS"] - # Failure probability to pick a good coreset (only used for SiPPNet++). - self._delta_best = param["coresets"]["deltaBest"] # extract keep and compress ratios self._keep_ratios = param["generated"]["keepRatios"] diff --git a/src/experiment/experiment/param/default.yaml b/src/experiment/experiment/param/default.yaml index b09d137..677aca0 100644 --- a/src/experiment/experiment/param/default.yaml +++ b/src/experiment/experiment/param/default.yaml @@ -39,6 +39,7 @@ directories: network_names: ReferenceNet: ReferenceNet NetHandle: ReferenceNet + FakeNet: FakeNet EllOneAndTwoNet: $\frac{\ell_1+\ell_2}{2}$ EllOneNet: $\ell_1$ EllTwoNet: $\ell_2$ @@ -77,6 +78,7 @@ network_names: network_colors: ReferenceNet: black NetHandle: black + FakeNet: grey EllOneAndTwoNet: purple EllOneNet: blueviolet EllTwoNet: magenta diff --git a/src/experiment/experiment/param/training/mnist/lenet5.yaml b/src/experiment/experiment/param/training/cifar/lenet5.yaml similarity index 100% rename from src/experiment/experiment/param/training/mnist/lenet5.yaml rename to src/experiment/experiment/param/training/cifar/lenet5.yaml diff --git a/src/experiment/experiment/param/training/mnist/lenet.yaml b/src/experiment/experiment/param/training/mnist/lenet.yaml index 1e11b7e..96b8d0f 100644 --- a/src/experiment/experiment/param/training/mnist/lenet.yaml +++ b/src/experiment/experiment/param/training/mnist/lenet.yaml @@ -6,7 +6,11 @@ batchSize: 64 -transformsTrain: [] +transformsTrain: + - type: Pad + kwargs: { padding: 4 } + - type: RandomCrop + kwargs: { size: 28 } transformsTest: [] transformsFinal: - type: ToTensor @@ -21,7 +25,7 @@ optimizerKwargs: nesterov: False momentum: 0.9 -numEpochs: 40 +numEpochs: 50 lrSchedulers: - type: MultiStepLR diff --git a/src/experiment/experiment/util/data.py b/src/experiment/experiment/util/data.py index 953be25..9fd782a 100644 --- a/src/experiment/experiment/util/data.py +++ b/src/experiment/experiment/util/data.py @@ -88,15 +88,26 @@ def get_dset(transform, train): def get_dataloader(dataset, num_threads, shuffle=False, b_size=batch_size): """Construct data loader.""" + # ensure that we don't parallelize in data loader with glue. + # It does not play out well ... + # (also no need to do that for other small-scale datasets) + no_thread_classes = ( + dsets.MNIST, + dsets.BaseGlue, + dsets.BaseToyDataset, + ) + if isinstance(dataset, no_thread_classes): + num_threads = 0 + else: + num_threads = 4 + loader = torch.utils.data.DataLoader( dataset=dataset, batch_size=b_size, num_workers=num_threads, shuffle=shuffle, pin_memory=True, - collate_fn=_glue_data_collator - if isinstance(dataset, dsets.BaseGlue) - else None, + collate_fn=_glue_data_collator if isinstance(dataset, dsets.BaseGlue) else None, ) return loader @@ -110,6 +121,8 @@ def get_dataloader(dataset, num_threads, shuffle=False, b_size=batch_size): no_thread_classes = ( dsets.MNIST, dsets.BaseGlue, + dsets.BaseToyDataset, + dsets.BaseTabularDataset, ) many_thread_classes = ( dsets.ImageNet, @@ -119,9 +132,7 @@ def get_dataloader(dataset, num_threads, shuffle=False, b_size=batch_size): if isinstance(set_test, no_thread_classes): num_threads = 0 elif isinstance(set_test, many_thread_classes): - num_threads = 10 * np.clip( - param["generated"]["numAvailableGPUs"], 1, 4 - ) + num_threads = 10 * np.clip(param["generated"]["numAvailableGPUs"], 1, 4) else: num_threads = 4 @@ -134,12 +145,17 @@ def get_dataloader(dataset, num_threads, shuffle=False, b_size=batch_size): set_valid = get_dset(transform_test, train=True) # get train/valid split - idx_train, idx_valid = _get_valid_split( - data_dir, - dset_name, - len(set_train), - valid_ratio, - ) + if hasattr(set_train, "get_valid_split"): + # use pre-defined split if it exists + idx_train, idx_valid = set_train.get_valid_split() + else: + # use a random split and record it + idx_train, idx_valid = _get_valid_split( + data_dir, + dset_name, + len(set_train), + valid_ratio, + ) # now split the data set_train = torch.utils.data.Subset(set_train, idx_train) @@ -162,15 +178,11 @@ def get_dataloader(dataset, num_threads, shuffle=False, b_size=batch_size): size_s = min(size_s, int(math.ceil(val_split_max * len(set_valid)))) # Now split validation set into valid set, S Set - set_valid, set_s = torch.utils.data.random_split( - set_valid, [len(set_valid) - size_s, size_s] - ) + set_valid, set_s = torch.utils.data.random_split(set_valid, [len(set_valid) - size_s, size_s]) # create the remaining loaders now loader_train = get_dataloader(set_train, num_threads, shuffle=True) - loader_valid = get_dataloader( - set_valid, num_threads, b_size=test_batch_size - ) + loader_valid = get_dataloader(set_valid, num_threads, b_size=test_batch_size) loader_s = get_dataloader(set_s, 0, b_size=min(4, test_batch_size)) return { @@ -220,8 +232,6 @@ def _get_valid_split(data_dir, dset_name, dset_len, ratio_valid): os.makedirs(data_dir, exist_ok=True) # save data - np.savez( - file, set2Idx=idx_train, set1Idx=idx_valid, ratioSet1=ratio_valid - ) + np.savez(file, set2Idx=idx_train, set1Idx=idx_valid, ratioSet1=ratio_valid) return idx_train, idx_valid diff --git a/src/experiment/setup.py b/src/experiment/setup.py index 435815a..303f128 100644 --- a/src/experiment/setup.py +++ b/src/experiment/setup.py @@ -23,6 +23,7 @@ install_requires=[ "matplotlib", "numpy", + "pyhessian", "pyyaml", "seaborn", "torch", diff --git a/src/torchprune/README.md b/src/torchprune/README.md index 1bdcb91..5c8c994 100644 --- a/src/torchprune/README.md +++ b/src/torchprune/README.md @@ -413,6 +413,22 @@ download location. place the `SegmentationClassAug.zip` file into `file_dir`. * Everything else is handled automatically. +#### **Toy Datasets** +* Code: + [torchprune/util/datasets/toy.py](./torchprune/util/datasets/toy.py) +* Description: [Torchdyn + tutorial](https://torchdyn.readthedocs.io/en/latest/tutorials/00_quickstart.html#Generate-data-from-a-static-toy-dataset) +* Everything is generated automatically using the `torchdyn` library. + +#### **Tabular Datasets** +* Code: + [torchprune/util/datasets/tabular.py](./torchprune/util/datasets/tabular.py) +* Description: [Pre-processed tabular datasets](https://github.com/gpapamak/maf#how-to-get-the-datasets) +* Please download data from + [here](https://zenodo.org/record/1161203#.Wmtf_XVl8eN) + place the `data.tar.gz` file into `file_dir`. +* Everything else is handled automatically. + #### **Corrupted PASCAL VOC Segmentation Datasets** * Code: [torchprune/util/datasets/voc.py](./torchprune/util/datasets/voc.py) diff --git a/src/torchprune/setup.py b/src/torchprune/setup.py index 3d209bb..569ada7 100644 --- a/src/torchprune/setup.py +++ b/src/torchprune/setup.py @@ -34,6 +34,7 @@ "torch", "torchvision", "tensorboard", + "torchdyn==1.0.1", "protobuf", "wand", "transformers @ git+https://github.com/huggingface/transformers.git", diff --git a/src/torchprune/torchprune/method/base/base_sparsifier.py b/src/torchprune/torchprune/method/base/base_sparsifier.py index 04cd225..fb406d8 100644 --- a/src/torchprune/torchprune/method/base/base_sparsifier.py +++ b/src/torchprune/torchprune/method/base/base_sparsifier.py @@ -84,10 +84,13 @@ def _reweigh(self, counts, num_samples, probs_div): def _generate_counts(self, num_samples, probs): mask = torch.zeros_like(probs, dtype=torch.bool) numel = probs.numel() - num_samples = int(np.clip(1, int(num_samples), numel)) - idx_top = np.argpartition(probs.view(-1).cpu().numpy(), -num_samples)[ - -num_samples: - ] + num_samples = int(np.clip(0, int(num_samples), numel)) + if num_samples > 0: + idx_top = np.argpartition( + probs.view(-1).cpu().numpy(), -num_samples + )[-num_samples:] + else: + idx_top = [] mask.view(-1)[idx_top] = True return mask diff --git a/src/torchprune/torchprune/method/ref/__init__.py b/src/torchprune/torchprune/method/ref/__init__.py index 2514ad7..cc76b3a 100644 --- a/src/torchprune/torchprune/method/ref/__init__.py +++ b/src/torchprune/torchprune/method/ref/__init__.py @@ -1,4 +1,4 @@ # flake8: noqa: F403,F401 """A package with a fake compression to act as ReferenceNet.""" -from .ref_net import ReferenceNet +from .ref_net import ReferenceNet, FakeNet diff --git a/src/torchprune/torchprune/method/ref/ref_net.py b/src/torchprune/torchprune/method/ref/ref_net.py index 7ee4df8..d4d6fd6 100644 --- a/src/torchprune/torchprune/method/ref/ref_net.py +++ b/src/torchprune/torchprune/method/ref/ref_net.py @@ -39,3 +39,16 @@ def size(self): def flops(self): """Fake flops with current keep_ratio.""" return super().flops() * float(self._keep_ratio_latest) + + +class FakeNet(ReferenceNet): + """A reference net that is retrainable. + + By enabling retraining we can simulate an unpruned network that gets the + exact same training and retraining as the pruned networks. + """ + + @property + def retrainable(self): + """Indicate whether we can retrain after applying this method.""" + return True diff --git a/src/torchprune/torchprune/method/sipp/sipp_allocator.py b/src/torchprune/torchprune/method/sipp/sipp_allocator.py index 4964fe5..f459d2f 100644 --- a/src/torchprune/torchprune/method/sipp/sipp_allocator.py +++ b/src/torchprune/torchprune/method/sipp/sipp_allocator.py @@ -332,7 +332,8 @@ def get_num_samples(self, layer): """Get the number of samples for a particular layer index.""" # get optimal sample numbers from randAllocator num_samples = self._allocator_rand.get_num_samples(layer) - num_samples[num_samples < 0] = 1 + no_sampling = num_samples < 0 + num_samples[no_sampling] = 1 # check error for both methods error_rand = self._allocator_rand._get_error_theoretical( @@ -346,4 +347,7 @@ def get_num_samples(self, layer): use_rand = error_det > error_rand num_samples[use_rand] = -num_samples[use_rand] + # reset zero samples to zero + num_samples[no_sampling] = 0 + return num_samples diff --git a/src/torchprune/torchprune/util/datasets/__init__.py b/src/torchprune/torchprune/util/datasets/__init__.py index d3e2bd5..6ebe0fe 100644 --- a/src/torchprune/torchprune/util/datasets/__init__.py +++ b/src/torchprune/torchprune/util/datasets/__init__.py @@ -11,9 +11,11 @@ from .driving import Driving from .imagenet import ImageNet -from .imagenet_c import * # noqa: F403,F401 +from .imagenet_c import * from .objectnet import ObjectNet -from .cifar10 import * # noqa: F403,F401 +from .cifar10 import * from .dds import DownloadDataset -from .voc import * # noqa: F403,F401 +from .voc import * from .glue import * +from .toy import * +from .tabular import * diff --git a/src/torchprune/torchprune/util/datasets/dds.py b/src/torchprune/torchprune/util/datasets/dds.py index 09c8dce..43af272 100644 --- a/src/torchprune/torchprune/util/datasets/dds.py +++ b/src/torchprune/torchprune/util/datasets/dds.py @@ -67,7 +67,7 @@ def __init__( Args: root (str): where to store the data set to be downloaded. - file_dir (str): where to look before downloading it from S3. + file_dir (str): where to look for downloading data. train (bool, optional): train or test data set. Defaults to True. transform (torchvision.transforms, optional): set of transforms to apply to input data. Defaults to None. @@ -139,7 +139,7 @@ def __getitem__(self, index): # it might not be a PIL image yet ... img = self._convert_to_pil(img) - # target might be weird, so convert it forst + # target might be weird, so convert it first target = self._convert_target(target) if self.transform is not None: diff --git a/src/torchprune/torchprune/util/datasets/tabular.py b/src/torchprune/torchprune/util/datasets/tabular.py new file mode 100644 index 0000000..be0822f --- /dev/null +++ b/src/torchprune/torchprune/util/datasets/tabular.py @@ -0,0 +1,105 @@ +"""Tabular data sets for FFJORD experiments.""" + +from abc import ABC, abstractmethod +import numpy as np +import torch +from .dds import DownloadDataset +from ..external.ffjord import datasets as tabular_external + + +class BaseTabularDataset(DownloadDataset, ABC): + """An abstract interface for tabular datasets.""" + + def __init__(self, *args, **kwargs): + """Initialize like parent but add train_split, val_split.""" + self._train_split, self._val_split = None, None + super().__init__(*args, **kwargs) + + @property + @abstractmethod + def _dataset_name(self): + """Return the name of the tabular dataset.""" + + @property + def _train_tar_file_name(self): + return "data.tar.gz" + + @property + def _test_tar_file_name(self): + return self._train_tar_file_name + + @property + def _train_dir(self): + return "data/" + + @property + def _test_dir(self): + return self._train_dir + + def _get_train_data(self, download): + dset = getattr(tabular_external, self._dataset_name)(self._data_path) + val_trn_x = self._join_and_store_split(dset) + data = torch.tensor(val_trn_x) + return [(x_data, 0) for x_data in data] + + def _get_test_data(self, download): + dset = getattr(tabular_external, self._dataset_name)(self._data_path) + self._join_and_store_split(dset) + return [(x_data, 0) for x_data in torch.tensor(dset.tst.x)] + + def _convert_to_pil(self, img): + return img + + def _convert_target(self, target): + return int(target) + + def _join_and_store_split(self, dset): + """Join train and validation set but recall split.""" + val_trn_x = np.concatenate((dset.trn.x, dset.val.x)) + self._train_split = list(np.arange(len(dset.trn.x))) + self._val_split = list(np.arange(len(dset.trn.x), len(val_trn_x))) + return val_trn_x + + def get_valid_split(self): + """Return indices corresponding to training and validation.""" + return self._train_split, self._val_split + + +class Bsds300(BaseTabularDataset): + """The Bsds300 dataset.""" + + @property + def _dataset_name(self): + return "BSDS300" + + +class Gas(BaseTabularDataset): + """The Gas dataset.""" + + @property + def _dataset_name(self): + return "GAS" + + +class Hepmass(BaseTabularDataset): + """The Hepmass dataset.""" + + @property + def _dataset_name(self): + return "HEPMASS" + + +class Miniboone(BaseTabularDataset): + """The Miniboone dataset.""" + + @property + def _dataset_name(self): + return "MINIBOONE" + + +class Power(BaseTabularDataset): + """The Power dataset.""" + + @property + def _dataset_name(self): + return "POWER" diff --git a/src/torchprune/torchprune/util/datasets/toy.py b/src/torchprune/torchprune/util/datasets/toy.py new file mode 100644 index 0000000..adfa0ed --- /dev/null +++ b/src/torchprune/torchprune/util/datasets/toy.py @@ -0,0 +1,296 @@ +"""A wrapper module for torchdyn data sets with configurations.""" +import os +import shutil +import warnings +from abc import ABC, abstractmethod +from urllib.request import URLError + +import tarfile +import numpy as np +import torch +import torchdyn.datasets as dyn_data + +from .dds import DownloadDataset + + +class BaseToyDataset(DownloadDataset, ABC): + """An abstract interface for torchdyn toy datasets.""" + + @property + @abstractmethod + def _dataset_type(self): + """Return the type of toy dataset we want to get.""" + + @property + @abstractmethod + def _n_samples(self): + """Return number of samples we should generate.""" + + @property + @abstractmethod + def _dataset_kwargs(self): + """Return the kwargs to initialize the toy dataset.""" + + @property + def _dataset_tag(self): + """Return the tag used to identify the files related to dataset.""" + return self._dataset_type + + @property + def _train_tar_file_name(self): + return f"torchdyn_toy_{self._dataset_tag}.tar.gz" + + @property + def _test_tar_file_name(self): + return self._train_tar_file_name + + @property + def _train_dir(self): + return f"torchdyn_toy_{self._dataset_tag}" + + @property + def _test_dir(self): + return self._train_dir + + def _get_train_data(self, download): + x_data = np.load(os.path.join(self._data_path, "x_data_train.npy")) + y_data = np.load(os.path.join(self._data_path, "y_data_train.npy")) + return list(zip(x_data, y_data)) + + def _get_test_data(self, download): + x_data = np.load(os.path.join(self._data_path, "x_data_test.npy")) + y_data = np.load(os.path.join(self._data_path, "y_data_test.npy")) + return list(zip(x_data, y_data)) + + def _convert_to_pil(self, img): + return torch.tensor(img) + + def _convert_target(self, target): + return int(target) + + def _download(self): + """Download data set and generate first if necessary.""" + try: + super()._download() + except URLError: + self._generate_data() + super()._download() + + def _generate_data(self): + """Generate and store data now.""" + # issue warning at the beginning to remind user of this change + warnings.warn(f"Generating new data for {type(self)}.") + + def _sample_data(n_samples): + toy_dset = dyn_data.ToyDataset() + x_data, y_data = toy_dset.generate( + n_samples=n_samples, + dataset_type=self._dataset_type, + **self._dataset_kwargs, + ) + # check that y_data is not none + if y_data is None: + y_data = torch.zeros(len(x_data), dtype=torch.long) + + # normalize x data now + x_data -= x_data.mean() + x_data /= x_data.std() + + return x_data.cpu().numpy(), y_data.cpu().numpy() + + def _x_tmp_file(tag): + return os.path.join("/tmp", f"{self._dataset_tag}_{tag}_x.npy") + + def _y_tmp_file(tag): + return os.path.join("/tmp", f"{self._dataset_tag}_{tag}_y.npy") + + # generate and save train/test data + tags_size = {"train": self._n_samples, "test": self._n_samples // 2} + for tag, n_samples in tags_size.items(): + x_data, y_data = _sample_data(n_samples) + np.save(_x_tmp_file(tag), x_data) + np.save(_y_tmp_file(tag), y_data) + + # now store in tar file + tar_file = os.path.join(self._file_dir, self._train_tar_file_name) + tmp_tar_file = os.path.join("/tmp", self._train_tar_file_name) + with tarfile.open(tmp_tar_file, "w:gz") as tar: + for tag in tags_size: + tar.add( + _x_tmp_file(tag), + arcname=os.path.join(self._train_dir, f"x_data_{tag}.npy"), + ) + tar.add( + _y_tmp_file(tag), + arcname=os.path.join(self._train_dir, f"y_data_{tag}.npy"), + ) + + # move tar file to right location + shutil.move(tmp_tar_file, tar_file) + + # print reminder at the end + print(f"Generated new data for {type(self)}.") + + +class ToyConcentric(BaseToyDataset): + """The concentric spheres dataset.""" + + @property + def _dataset_type(self): + """Return the type of toy dataset we want to get.""" + return "spheres" + + @property + def _n_samples(self): + """Return number of samples we should generate.""" + return 1024 + + @property + def _dataset_kwargs(self): + """Return the kwargs to initialize the toy dataset.""" + return { + "dim": 2, + "noise": 1e-1, + "inner_radius": 0.75, + "outer_radius": 1.5, + } + + +class ToyMoons(BaseToyDataset): + """The moons dataset.""" + + @property + def _dataset_type(self): + """Return the type of toy dataset we want to get.""" + return "moons" + + @property + def _n_samples(self): + """Return number of samples we should generate.""" + return 1024 + + @property + def _dataset_kwargs(self): + """Return the kwargs to initialize the toy dataset.""" + return {"noise": 1e-1} + + +class ToySpirals(BaseToyDataset): + """The spirals dataset.""" + + @property + def _dataset_type(self): + """Return the type of toy dataset we want to get.""" + return "spirals" + + @property + def _n_samples(self): + """Return number of samples we should generate.""" + return 1024 + + @property + def _dataset_kwargs(self): + """Return the kwargs to initialize the toy dataset.""" + return {"noise": 0.9} + + +class ToySpirals2(BaseToyDataset): + """The spirals dataset with more samples and less noise.""" + + @property + def _dataset_type(self): + """Return the type of toy dataset we want to get.""" + return "spirals" + + @property + def _dataset_tag(self): + """Return the tag used to identify the files related to dataset.""" + return "spirals2" + + @property + def _n_samples(self): + """Return number of samples we should generate.""" + return int(2 ** 14) + + @property + def _dataset_kwargs(self): + """Return the kwargs to initialize the toy dataset.""" + return {"noise": 0.5} + + +class ToyGaussians(BaseToyDataset): + """The moon dataset.""" + + @property + def _n_gaussians(self): + return 6 + + @property + def _dataset_type(self): + """Return the type of toy dataset we want to get.""" + return "gaussians" + + @property + def _n_samples(self): + """Return number of samples we should generate.""" + return 2 ** 14 // self._n_gaussians + + @property + def _dataset_kwargs(self): + """Return the kwargs to initialize the toy dataset.""" + return { + "n_gaussians": self._n_gaussians, + "std_gaussians": 0.5, + "radius": 4, + "dim": 2, + } + + +class ToyGaussiansSpiral(BaseToyDataset): + """The Gaussian spiral dataset.""" + + @property + def _n_gaussians(self): + return 10 + + @property + def _dataset_type(self): + """Return the type of toy dataset we want to get.""" + return "gaussians_spiral" + + @property + def _n_samples(self): + """Return number of samples we should generate.""" + return 2 ** 14 // self._n_gaussians + + @property + def _dataset_kwargs(self): + """Return the kwargs to initialize the toy dataset.""" + return { + "n_gaussians": self._n_gaussians, + "n_gaussians_per_loop": 6, + "dim": 2, + "radius_start": 4.0, + "radius_end": 1.0, + "std_gaussians_start": 0.3, + "std_gaussians_end": 0.1, + } + + +class ToyDiffeqml(BaseToyDataset): + """The diffeqml dataset.""" + + @property + def _dataset_type(self): + """Return the type of toy dataset we want to get.""" + return "diffeqml" + + @property + def _n_samples(self): + """Return number of samples we should generate.""" + return 2 ** 14 + + @property + def _dataset_kwargs(self): + """Return the kwargs to initialize the toy dataset.""" + return {"noise": 5e-2} diff --git a/src/torchprune/torchprune/util/external/cnn/models/cifar/wrn.py b/src/torchprune/torchprune/util/external/cnn/models/cifar/wrn.py index 49eff18..67d2712 100644 --- a/src/torchprune/torchprune/util/external/cnn/models/cifar/wrn.py +++ b/src/torchprune/torchprune/util/external/cnn/models/cifar/wrn.py @@ -3,7 +3,7 @@ import torch.nn as nn import torch.nn.functional as F -__all__ = ['wrn', 'wrn16_8', 'wrn28_10', 'wrn40_1', 'wrn40_4'] +__all__ = ['wrn', 'wrn16_8', 'wrn28_2', 'wrn28_10', 'wrn40_1', 'wrn40_4'] class BasicBlock(nn.Module): def __init__(self, in_planes, out_planes, stride, dropRate=0.0): @@ -126,3 +126,9 @@ def wrn28_10(**kwargs): WRN, depth 28, widening factor 10 """ return WideResNet(depth=28, widen_factor=10, **kwargs) + +def wrn28_2(**kwargs): + """ + WRN, depth 28, widening factor 2 + """ + return WideResNet(depth=28, widen_factor=2, **kwargs) diff --git a/src/torchprune/torchprune/util/external/ffjord/.gitignore b/src/torchprune/torchprune/util/external/ffjord/.gitignore new file mode 100644 index 0000000..d2e4bd6 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/.gitignore @@ -0,0 +1,3 @@ +*__pycache__* +*.pyc +data/* diff --git a/src/torchprune/torchprune/util/external/ffjord/LICENSE b/src/torchprune/torchprune/util/external/ffjord/LICENSE new file mode 100644 index 0000000..5afe560 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Ricky Tian Qi Chen and Will Grathwohl + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/torchprune/torchprune/util/external/ffjord/README.md b/src/torchprune/torchprune/util/external/ffjord/README.md new file mode 100644 index 0000000..e0e8ef5 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/README.md @@ -0,0 +1,56 @@ +# Free-form Jacobian of Reversible Dynamics (FFJORD) + +Code for reproducing the experiments in the paper: + +> Will Grathwohl*, Ricky T. Q. Chen*, Jesse Bettencourt, Ilya Sutskever, David Duvenaud. "FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models." _International Conference on Learning Representations_ (2019). +> [[arxiv]](https://arxiv.org/abs/1810.01367) [[bibtex]](http://www.cs.toronto.edu/~rtqichen/bibtex/ffjord.bib) + + +## Prerequisites + +Install `torchdiffeq` from https://github.com/rtqichen/torchdiffeq. + +## Usage + +Different scripts are provided for different datasets. To see all options, use the `-h` flag. + +Toy 2d: +``` +python train_toy.py --data 8gaussians --dims 64-64-64 --layer_type concatsquash --save experiment1 +``` + +Tabular datasets from [MAF](https://github.com/gpapamak/maf): +``` +python train_tabular.py --data miniboone --nhidden 2 --hdim_factor 20 --num_blocks 1 --nonlinearity softplus --batch_size 1000 --lr 1e-3 +``` + +MNIST/CIFAR10: +``` +python train_cnf.py --data mnist --dims 64,64,64 --strides 1,1,1,1 --num_blocks 2 --layer_type concat --multiscale True --rademacher True +``` + +VAE Experiments (based on [Sylvester VAE](https://github.com/riannevdberg/sylvester-flows)): +``` +python train_vae_flow.py --dataset mnist --flow cnf_rank --rank 64 --dims 1024-1024 --num_blocks 2 +``` + +Glow / Real NVP experiments are run using `train_discrete_toy.py` and `train_discrete_tabular.py`. + +## Datasets + +### Tabular (UCI + BSDS300) +Follow instructions from https://github.com/gpapamak/maf and place them in `data/`. + +### VAE datasets +Follow instructions from https://github.com/riannevdberg/sylvester-flows and place them in `data/`. + +## Bespoke Flows + +Here's a fun script that you can use to create your own 2D flow from an image! +``` +python train_img2d.py --img imgs/github.png --save github_flow +``` + +

+ +

diff --git a/src/torchprune/torchprune/util/models/cnn/__init__.py b/src/torchprune/torchprune/util/external/ffjord/__init__.py similarity index 100% rename from src/torchprune/torchprune/util/models/cnn/__init__.py rename to src/torchprune/torchprune/util/external/ffjord/__init__.py diff --git a/src/torchprune/torchprune/util/external/ffjord/assets/github_flow.gif b/src/torchprune/torchprune/util/external/ffjord/assets/github_flow.gif new file mode 100644 index 0000000000000000000000000000000000000000..26e8d54ac176a20903f9d1183cab65928ab639e8 GIT binary patch literal 1061540 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

edsyuyPpIL=hVsrWTIb## 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

=j_|mSF1$`;+)}U1cw^gTBSxKPI!sg@ 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

( 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

+#1M&ulZzF=MPN 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 F@ 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

+1M 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

r} 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 QYU?vl6>!C>=o;7c;)~gr^dX-aje|jjI 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

mJST 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 literal 0 HcmV?d00001 diff --git a/src/torchprune/torchprune/util/external/ffjord/datasets/LICENSE.txt b/src/torchprune/torchprune/util/external/ffjord/datasets/LICENSE.txt new file mode 100644 index 0000000..6faf4ff --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/datasets/LICENSE.txt @@ -0,0 +1,26 @@ +Copyright (c) 2017, George Papamakarios +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +The views and conclusions contained in the software and documentation are those +of the authors and should not be interpreted as representing official policies, +either expressed or implied, of anybody else. diff --git a/src/torchprune/torchprune/util/external/ffjord/datasets/__init__.py b/src/torchprune/torchprune/util/external/ffjord/datasets/__init__.py new file mode 100644 index 0000000..7220778 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/datasets/__init__.py @@ -0,0 +1,5 @@ +from .power import POWER +from .gas import GAS +from .hepmass import HEPMASS +from .miniboone import MINIBOONE +from .bsds300 import BSDS300 diff --git a/src/torchprune/torchprune/util/external/ffjord/datasets/bsds300.py b/src/torchprune/torchprune/util/external/ffjord/datasets/bsds300.py new file mode 100644 index 0000000..0d1e026 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/datasets/bsds300.py @@ -0,0 +1,33 @@ +import os +import numpy as np +import h5py + + +class BSDS300: + """ + A dataset of patches from BSDS300. + """ + + class Data: + """ + Constructs the dataset. + """ + + def __init__(self, data): + + self.x = data[:] + self.N = self.x.shape[0] + + def __init__(self, root): + + # load dataset + f = h5py.File(os.path.join(root, "BSDS300", "BSDS300.hdf5"), "r") + + self.trn = self.Data(f["train"]) + self.val = self.Data(f["validation"]) + self.tst = self.Data(f["test"]) + + self.n_dims = self.trn.x.shape[1] + self.image_size = [int(np.sqrt(self.n_dims + 1))] * 2 + + f.close() diff --git a/src/torchprune/torchprune/util/external/ffjord/datasets/gas.py b/src/torchprune/torchprune/util/external/ffjord/datasets/gas.py new file mode 100644 index 0000000..5bd68c9 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/datasets/gas.py @@ -0,0 +1,69 @@ +import os +import pandas as pd +import numpy as np + + +class GAS: + class Data: + def __init__(self, data): + + self.x = data.astype(np.float32) + self.N = self.x.shape[0] + + def __init__(self, root): + + file = os.path.join(root, "gas", "ethylene_CO.pickle") + trn, val, tst = load_data_and_clean_and_split(file) + + self.trn = self.Data(trn) + self.val = self.Data(val) + self.tst = self.Data(tst) + + self.n_dims = self.trn.x.shape[1] + + +def load_data(file): + + data = pd.read_pickle(file) + # data = pd.read_pickle(file).sample(frac=0.25) + # data.to_pickle(file) + data.drop("Meth", axis=1, inplace=True) + data.drop("Eth", axis=1, inplace=True) + data.drop("Time", axis=1, inplace=True) + return data + + +def get_correlation_numbers(data): + C = data.corr() + A = C > 0.98 + B = A.to_numpy().sum(axis=1) + return B + + +def load_data_and_clean(file): + + data = load_data(file) + B = get_correlation_numbers(data) + + while np.any(B > 1): + col_to_remove = np.where(B > 1)[0][0] + col_name = data.columns[col_to_remove] + data.drop(col_name, axis=1, inplace=True) + B = get_correlation_numbers(data) + # print(data.corr()) + data = (data - data.mean()) / data.std() + + return data + + +def load_data_and_clean_and_split(file): + + data = load_data_and_clean(file).to_numpy() + N_test = int(0.1 * data.shape[0]) + data_test = data[-N_test:] + data_train = data[0:-N_test] + N_validate = int(0.1 * data_train.shape[0]) + data_validate = data_train[-N_validate:] + data_train = data_train[0:-N_validate] + + return data_train, data_validate, data_test diff --git a/src/torchprune/torchprune/util/external/ffjord/datasets/hepmass.py b/src/torchprune/torchprune/util/external/ffjord/datasets/hepmass.py new file mode 100644 index 0000000..2fe35d9 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/datasets/hepmass.py @@ -0,0 +1,112 @@ +import os +import pandas as pd +import numpy as np +from collections import Counter + + +class HEPMASS: + """ + The HEPMASS data set. + http://archive.ics.uci.edu/ml/datasets/HEPMASS + """ + + class Data: + def __init__(self, data): + + self.x = data.astype(np.float32) + self.N = self.x.shape[0] + + def __init__(self, root): + + path = os.path.join(root, "hepmass") + trn, val, tst = load_data_no_discrete_normalised_as_array(path) + + self.trn = self.Data(trn) + self.val = self.Data(val) + self.tst = self.Data(tst) + + self.n_dims = self.trn.x.shape[1] + + +def load_data(path): + + data_train = pd.read_csv( + filepath_or_buffer=os.path.join(path, "1000_train.csv"), + index_col=False, + ) + data_test = pd.read_csv( + filepath_or_buffer=os.path.join(path, "1000_test.csv"), index_col=False + ) + + return data_train, data_test + + +def load_data_no_discrete(path): + """ + Loads the positive class examples from the first 10 percent of the dataset. + """ + data_train, data_test = load_data(path) + + # Gets rid of any background noise examples i.e. class label 0. + data_train = data_train[data_train[data_train.columns[0]] == 1] + data_train = data_train.drop(data_train.columns[0], axis=1) + data_test = data_test[data_test[data_test.columns[0]] == 1] + data_test = data_test.drop(data_test.columns[0], axis=1) + # Because the data set is messed up! + data_test = data_test.drop(data_test.columns[-1], axis=1) + + return data_train, data_test + + +def load_data_no_discrete_normalised(path): + + data_train, data_test = load_data_no_discrete(path) + mu = data_train.mean() + s = data_train.std() + data_train = (data_train - mu) / s + data_test = (data_test - mu) / s + + return data_train, data_test + + +def load_data_no_discrete_normalised_as_array(path): + + data_train, data_test = load_data_no_discrete_normalised(path) + data_train, data_test = data_train.to_numpy(), data_test.to_numpy() + + i = 0 + # Remove any features that have too many re-occurring real values. + features_to_remove = [] + for feature in data_train.T: + c = Counter(feature) + max_count = np.array([v for k, v in sorted(c.items())])[0] + if max_count > 5: + features_to_remove.append(i) + i += 1 + data_train = data_train[ + :, + np.array( + [ + i + for i in range(data_train.shape[1]) + if i not in features_to_remove + ] + ), + ] + data_test = data_test[ + :, + np.array( + [ + i + for i in range(data_test.shape[1]) + if i not in features_to_remove + ] + ), + ] + + N = data_train.shape[0] + N_validate = int(N * 0.1) + data_validate = data_train[-N_validate:] + data_train = data_train[0:-N_validate] + + return data_train, data_validate, data_test diff --git a/src/torchprune/torchprune/util/external/ffjord/datasets/miniboone.py b/src/torchprune/torchprune/util/external/ffjord/datasets/miniboone.py new file mode 100644 index 0000000..10f8881 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/datasets/miniboone.py @@ -0,0 +1,66 @@ +import os +import numpy as np + + +class MINIBOONE: + class Data: + def __init__(self, data): + + self.x = data.astype(np.float32) + self.N = self.x.shape[0] + + def __init__(self, root): + + file = os.path.join(root, "miniboone", "data.npy") + trn, val, tst = load_data_normalised(file) + + self.trn = self.Data(trn) + self.val = self.Data(val) + self.tst = self.Data(tst) + + self.n_dims = self.trn.x.shape[1] + + +def load_data(root_path): + # NOTE: To remember how the pre-processing was done. + # data = pd.read_csv(root_path, names=[str(x) for x in range(50)], delim_whitespace=True) + # print data.head() + # data = data.as_matrix() + # # Remove some random outliers + # indices = (data[:, 0] < -100) + # data = data[~indices] + # + # i = 0 + # # Remove any features that have too many re-occuring real values. + # features_to_remove = [] + # for feature in data.T: + # c = Counter(feature) + # max_count = np.array([v for k, v in sorted(c.iteritems())])[0] + # if max_count > 5: + # features_to_remove.append(i) + # i += 1 + # data = data[:, np.array([i for i in range(data.shape[1]) if i not in features_to_remove])] + # np.save("~/data/miniboone/data.npy", data) + + data = np.load(root_path) + N_test = int(0.1 * data.shape[0]) + data_test = data[-N_test:] + data = data[0:-N_test] + N_validate = int(0.1 * data.shape[0]) + data_validate = data[-N_validate:] + data_train = data[0:-N_validate] + + return data_train, data_validate, data_test + + +def load_data_normalised(root_path): + + data_train, data_validate, data_test = load_data(root_path) + data = np.vstack((data_train, data_validate)) + mu = data.mean(axis=0) + s = data.std(axis=0) + data_train = (data_train - mu) / s + data_validate = (data_validate - mu) / s + data_test = (data_test - mu) / s + + return data_train, data_validate, data_test diff --git a/src/torchprune/torchprune/util/external/ffjord/datasets/power.py b/src/torchprune/torchprune/util/external/ffjord/datasets/power.py new file mode 100644 index 0000000..5539732 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/datasets/power.py @@ -0,0 +1,71 @@ +import os +import numpy as np + + +class POWER: + class Data: + def __init__(self, data): + + self.x = data.astype(np.float32) + self.N = self.x.shape[0] + + def __init__(self, root): + + trn, val, tst = load_data_normalised(root) + + self.trn = self.Data(trn) + self.val = self.Data(val) + self.tst = self.Data(tst) + + self.n_dims = self.trn.x.shape[1] + + +def load_data(root): + return np.load(os.path.join(root, "power", "data.npy")) + + +def load_data_split_with_noise(root): + + rng = np.random.RandomState(42) + + data = load_data(root) + rng.shuffle(data) + N = data.shape[0] + + data = np.delete(data, 3, axis=1) + data = np.delete(data, 1, axis=1) + ############################ + # Add noise + ############################ + # global_intensity_noise = 0.1*rng.rand(N, 1) + voltage_noise = 0.01 * rng.rand(N, 1) + # grp_noise = 0.001*rng.rand(N, 1) + gap_noise = 0.001 * rng.rand(N, 1) + sm_noise = rng.rand(N, 3) + time_noise = np.zeros((N, 1)) + # noise = np.hstack((gap_noise, grp_noise, voltage_noise, global_intensity_noise, sm_noise, time_noise)) + # noise = np.hstack((gap_noise, grp_noise, voltage_noise, sm_noise, time_noise)) + noise = np.hstack((gap_noise, voltage_noise, sm_noise, time_noise)) + data = data + noise + + N_test = int(0.1 * data.shape[0]) + data_test = data[-N_test:] + data = data[0:-N_test] + N_validate = int(0.1 * data.shape[0]) + data_validate = data[-N_validate:] + data_train = data[0:-N_validate] + + return data_train, data_validate, data_test + + +def load_data_normalised(root): + + data_train, data_validate, data_test = load_data_split_with_noise(root) + data = np.vstack((data_train, data_validate)) + mu = data.mean(axis=0) + s = data.std(axis=0) + data_train = (data_train - mu) / s + data_validate = (data_validate - mu) / s + data_test = (data_test - mu) / s + + return data_train, data_validate, data_test diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/approx_error_1d.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/approx_error_1d.py new file mode 100644 index 0000000..c4a52d7 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/approx_error_1d.py @@ -0,0 +1,265 @@ +from inspect import getsourcefile +import sys +import os + +current_path = os.path.abspath(getsourcefile(lambda: 0)) +current_dir = os.path.dirname(current_path) +parent_dir = current_dir[:current_dir.rfind(os.path.sep)] +sys.path.insert(0, parent_dir) + +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt + +import numpy as np +import argparse +import os +import time + +import torch +import torch.optim as optim + +import lib.utils as utils +import lib.layers.odefunc as odefunc + +from train_misc import standard_normal_logprob +from train_misc import set_cnf_options, count_nfe, count_parameters, count_total_time +from train_misc import build_model_tabular + +import seaborn as sns +sns.set_style("whitegrid") +colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"] +sns.palplot(sns.xkcd_palette(colors)) + +SOLVERS = ["dopri5", "bdf", "rk4", "midpoint", 'adams', 'explicit_adams', 'fixed_adams'] +parser = argparse.ArgumentParser('Continuous Normalizing Flow') +parser.add_argument( + "--layer_type", type=str, default="concatsquash", + choices=["ignore", "concat", "concat_v2", "squash", "concatsquash", "concatcoord", "hyper", "blend"] +) +parser.add_argument('--dims', type=str, default='64-64-64') +parser.add_argument("--num_blocks", type=int, default=1, help='Number of stacked CNFs.') +parser.add_argument('--time_length', type=float, default=0.5) +parser.add_argument('--train_T', type=eval, default=True) +parser.add_argument("--divergence_fn", type=str, default="brute_force", choices=["brute_force", "approximate"]) +parser.add_argument("--nonlinearity", type=str, default="tanh", choices=odefunc.NONLINEARITIES) + +parser.add_argument('--solver', type=str, default='dopri5', choices=SOLVERS) +parser.add_argument('--atol', type=float, default=1e-5) +parser.add_argument('--rtol', type=float, default=1e-5) +parser.add_argument("--step_size", type=float, default=None, help="Optional fixed step size.") + +parser.add_argument('--test_solver', type=str, default=None, choices=SOLVERS + [None]) +parser.add_argument('--test_atol', type=float, default=None) +parser.add_argument('--test_rtol', type=float, default=None) + +parser.add_argument('--residual', type=eval, default=False, choices=[True, False]) +parser.add_argument('--rademacher', type=eval, default=False, choices=[True, False]) +parser.add_argument('--spectral_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--batch_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--bn_lag', type=float, default=0) + +parser.add_argument('--niters', type=int, default=10000) +parser.add_argument('--batch_size', type=int, default=100) +parser.add_argument('--test_batch_size', type=int, default=1000) +parser.add_argument('--lr', type=float, default=1e-3) +parser.add_argument('--weight_decay', type=float, default=1e-5) + +# Track quantities +parser.add_argument('--l1int', type=float, default=None, help="int_t ||f||_1") +parser.add_argument('--l2int', type=float, default=None, help="int_t ||f||_2") +parser.add_argument('--dl2int', type=float, default=None, help="int_t ||f^T df/dt||_2") +parser.add_argument('--JFrobint', type=float, default=None, help="int_t ||df/dx||_F") +parser.add_argument('--JdiagFrobint', type=float, default=None, help="int_t ||df_i/dx_i||_F") +parser.add_argument('--JoffdiagFrobint', type=float, default=None, help="int_t ||df/dx - df_i/dx_i||_F") + +parser.add_argument('--save', type=str, default='experiments/approx_error_1d') +parser.add_argument('--viz_freq', type=int, default=100) +parser.add_argument('--val_freq', type=int, default=100) +parser.add_argument('--log_freq', type=int, default=10) +parser.add_argument('--gpu', type=int, default=0) +args = parser.parse_args() + +# logger +utils.makedirs(args.save) +logger = utils.get_logger(logpath=os.path.join(args.save, 'logs'), filepath=os.path.abspath(__file__)) + +if args.layer_type == "blend": + logger.info("!! Setting time_length from None to 1.0 due to use of Blend layers.") + args.time_length = 1.0 + +logger.info(args) + +device = torch.device('cuda:' + str(args.gpu) if torch.cuda.is_available() else 'cpu') + + +def normal_log_density(x, mean=0, stdev=1): + term = (x - mean) / stdev + return -0.5 * (np.log(2 * np.pi) + 2 * np.log(stdev) + term * term) + + +def data_sample(batch_size): + x1 = np.random.randn(batch_size) * np.sqrt(0.4) - 2.8 + x2 = np.random.randn(batch_size) * np.sqrt(0.4) - 0.9 + x3 = np.random.randn(batch_size) * np.sqrt(0.4) + 2. + xs = np.concatenate([x1[:, None], x2[:, None], x3[:, None]], 1) + k = np.random.randint(0, 3, batch_size) + x = xs[np.arange(batch_size), k] + return torch.tensor(x[:, None]).float().to(device) + + +def data_density(x): + p1 = normal_log_density(x, mean=-2.8, stdev=np.sqrt(0.4)) + p2 = normal_log_density(x, mean=-0.9, stdev=np.sqrt(0.4)) + p3 = normal_log_density(x, mean=2.0, stdev=np.sqrt(0.4)) + return torch.log(p1.exp() / 3 + p2.exp() / 3 + p3.exp() / 3) + + +def model_density(x, model): + x = x.to(device) + z, delta_logp = model(x, torch.zeros_like(x)) + logpx = standard_normal_logprob(z) - delta_logp + return logpx + + +def model_sample(model, batch_size): + z = torch.randn(batch_size, 1) + logqz = standard_normal_logprob(z) + x, logqx = model(z, logqz, reverse=True) + return x, logqx + + +def compute_loss(args, model, batch_size=None): + if batch_size is None: batch_size = args.batch_size + + x = data_sample(batch_size) + logpx = model_density(x, model) + return -torch.mean(logpx) + + +def train(): + + model = build_model_tabular(args, 1).to(device) + set_cnf_options(args, model) + + logger.info(model) + logger.info("Number of trainable parameters: {}".format(count_parameters(model))) + + optimizer = optim.Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay) + + time_meter = utils.RunningAverageMeter(0.93) + loss_meter = utils.RunningAverageMeter(0.93) + nfef_meter = utils.RunningAverageMeter(0.93) + nfeb_meter = utils.RunningAverageMeter(0.93) + tt_meter = utils.RunningAverageMeter(0.93) + + end = time.time() + best_loss = float('inf') + model.train() + for itr in range(1, args.niters + 1): + optimizer.zero_grad() + + loss = compute_loss(args, model) + loss_meter.update(loss.item()) + + total_time = count_total_time(model) + nfe_forward = count_nfe(model) + + loss.backward() + optimizer.step() + + nfe_total = count_nfe(model) + nfe_backward = nfe_total - nfe_forward + nfef_meter.update(nfe_forward) + nfeb_meter.update(nfe_backward) + + time_meter.update(time.time() - end) + tt_meter.update(total_time) + + log_message = ( + 'Iter {:04d} | Time {:.4f}({:.4f}) | Loss {:.6f}({:.6f}) | NFE Forward {:.0f}({:.1f})' + ' | NFE Backward {:.0f}({:.1f}) | CNF Time {:.4f}({:.4f})'.format( + itr, time_meter.val, time_meter.avg, loss_meter.val, loss_meter.avg, nfef_meter.val, nfef_meter.avg, + nfeb_meter.val, nfeb_meter.avg, tt_meter.val, tt_meter.avg + ) + ) + logger.info(log_message) + + if itr % args.val_freq == 0 or itr == args.niters: + with torch.no_grad(): + model.eval() + test_loss = compute_loss(args, model, batch_size=args.test_batch_size) + test_nfe = count_nfe(model) + log_message = '[TEST] Iter {:04d} | Test Loss {:.6f} | NFE {:.0f}'.format(itr, test_loss, test_nfe) + logger.info(log_message) + + if test_loss.item() < best_loss: + best_loss = test_loss.item() + utils.makedirs(args.save) + torch.save({ + 'args': args, + 'state_dict': model.state_dict(), + }, os.path.join(args.save, 'checkpt.pth')) + model.train() + + if itr % args.viz_freq == 0: + with torch.no_grad(): + model.eval() + + xx = torch.linspace(-10, 10, 10000).view(-1, 1) + true_p = data_density(xx) + plt.plot(xx.view(-1).cpu().numpy(), true_p.view(-1).exp().cpu().numpy(), label='True') + + true_p = model_density(xx, model) + plt.plot(xx.view(-1).cpu().numpy(), true_p.view(-1).exp().cpu().numpy(), label='Model') + + utils.makedirs(os.path.join(args.save, 'figs')) + plt.savefig(os.path.join(args.save, 'figs', '{:06d}.jpg'.format(itr))) + plt.close() + + model.train() + + end = time.time() + + logger.info('Training has finished.') + + +def evaluate(): + model = build_model_tabular(args, 1).to(device) + set_cnf_options(args, model) + + checkpt = torch.load(os.path.join(args.save, 'checkpt.pth')) + model.load_state_dict(checkpt['state_dict']) + model.to(device) + + tols = [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7, 1e-8] + errors = [] + with torch.no_grad(): + for tol in tols: + args.rtol = tol + args.atol = tol + set_cnf_options(args, model) + + xx = torch.linspace(-15, 15, 500000).view(-1, 1).to(device) + prob_xx = model_density(xx, model).double().view(-1).cpu() + xx = xx.double().cpu().view(-1) + dxx = torch.log(xx[1:] - xx[:-1]) + num_integral = torch.logsumexp(prob_xx[:-1] + dxx, 0).exp() + errors.append(float(torch.abs(num_integral - 1.))) + + print(errors[-1]) + + plt.figure(figsize=(5, 3)) + plt.plot(tols, errors, linewidth=3, marker='o', markersize=7) + # plt.plot([-1, 0.2], [-1, 0.2], '--', color='grey', linewidth=1) + plt.xscale("log", nonposx='clip') + # plt.yscale("log", nonposy='clip') + plt.xlabel('Solver Tolerance', fontsize=17) + plt.ylabel('$| 1 - \int p(x) |$', fontsize=17) + plt.tight_layout() + plt.savefig('ode_solver_error_vs_tol.pdf') + + +if __name__ == '__main__': + # train() + evaluate() diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_bottleneck_losses.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_bottleneck_losses.py new file mode 100644 index 0000000..82761c0 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_bottleneck_losses.py @@ -0,0 +1,70 @@ +import re +import numpy as np +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt +import scipy.signal +import scipy.ndimage + +# BASE = "experiments/cnf_mnist_64-64-128-128-64-64/logs" +# RESIDUAL = "experiments/cnf_mnist_64-64-128-128-64-64_residual/logs" +# RADEMACHER = "experiments/cnf_mnist_64-64-128-128-64-64_rademacher/logs" + +BOTTLENECK = "experiments/cnf_mnist_bottleneck_64-64-128-5-128-64-64/logs" +BOTTLENECK_EST = "experiments/cnf_mnist_bottleneck_64-64-128-5-128-64-64_ae-est/logs" +RAD_BOTTLENECK = "experiments/cnf_mnist_bottleneck_64-64-128-5-128-64-64_rademacher/logs" +RAD_BOTTLENECK_EST = "experiments/cnf_mnist_bottleneck_64-64-128-5-128-64-64_ae-est_rademacher/logs" + +# ET_ALL = "experiments/cnf_mnist_bottleneck_64-64-128-5-128-64-64_ae-est_residual_rademacher/logs" + + +def get_losses(filename): + with open(filename, "r") as f: + lines = f.readlines() + + losses = [] + + for line in lines: + w = re.findall(r"Bit/dim [^|(]*\([0-9\.]*\)", line) + if w: w = re.findall(r"\([0-9\.]*\)", w[0]) + if w: w = re.findall(r"[0-9\.]+", w[0]) + if w: + losses.append(float(w[0])) + + return losses + + +bottleneck_loss = get_losses(BOTTLENECK) +bottleneck_est_loss = get_losses(BOTTLENECK_EST) +rademacher_bottleneck_loss = get_losses(RAD_BOTTLENECK) +rademacher_bottleneck_est_loss = get_losses(RAD_BOTTLENECK_EST) + +bottleneck_loss = scipy.signal.medfilt(bottleneck_loss, 21) +bottleneck_est_loss = scipy.signal.medfilt(bottleneck_est_loss, 21) +rademacher_bottleneck_loss = scipy.signal.medfilt(rademacher_bottleneck_loss, 21) +rademacher_bottleneck_est_loss = scipy.signal.medfilt(rademacher_bottleneck_est_loss, 21) + +import seaborn as sns +sns.set_style("whitegrid") +colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"] +sns.palplot(sns.xkcd_palette(colors)) + +import brewer2mpl +line_colors = brewer2mpl.get_map('Set2', 'qualitative', 4).mpl_colors +dark_colors = brewer2mpl.get_map('Dark2', 'qualitative', 4).mpl_colors +# plt.style.use('ggplot') + +plt.figure(figsize=(4, 3)) +plt.plot(np.arange(len(bottleneck_loss)) / 30, bottleneck_loss, ':', color=line_colors[1], label="Gaussian w/o Trick") +plt.plot(np.arange(len(bottleneck_est_loss)) / 30, bottleneck_est_loss, color=dark_colors[1], label="Gaussian w/ Trick") +plt.plot(np.arange(len(rademacher_bottleneck_loss)) / 30, rademacher_bottleneck_loss, ':', color=line_colors[2], label="Rademacher w/o Trick") +plt.plot(np.arange(len(rademacher_bottleneck_est_loss)) / 30, rademacher_bottleneck_est_loss, color=dark_colors[2], label="Rademacher w/ Trick") + +plt.legend(frameon=True, fontsize=10.5, loc='upper right') +plt.ylim([1.1, 1.7]) +# plt.yscale("log", nonposy='clip') +plt.xlabel("Epoch", fontsize=18) +plt.ylabel("Bits/dim", fontsize=18) +plt.xlim([0, 170]) +plt.tight_layout() +plt.savefig('bottleneck_losses.pdf') diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_compare_multiscale.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_compare_multiscale.py new file mode 100644 index 0000000..36ff110 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_compare_multiscale.py @@ -0,0 +1,60 @@ +import re +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt + +MNIST_SINGLESCALE = "diagnostics/mnist.log" +MNIST_MULTISCALE = "diagnostics/mnist_multiscale.log" + + +def get_values(filename): + with open(filename, "r") as f: + lines = f.readlines() + + losses = [] + nfes = [] + + for line in lines: + + w = re.findall(r"Steps [^|(]*\([0-9\.]*\)", line) + if w: w = re.findall(r"\([0-9\.]*\)", w[0]) + if w: w = re.findall(r"[0-9\.]+", w[0]) + if w: + nfes.append(float(w[0])) + + w = re.findall(r"Bit/dim [^|(]*\([0-9\.]*\)", line) + if w: w = re.findall(r"\([0-9\.]*\)", w[0]) + if w: w = re.findall(r"[0-9\.]+", w[0]) + if w: + losses.append(float(w[0])) + + return losses, nfes + + +mnist_singlescale_loss, mnist_singlescale_nfes = get_values(MNIST_SINGLESCALE) +mnist_multiscale_loss, mnist_multiscale_nfes = get_values(MNIST_MULTISCALE) + +import brewer2mpl +line_colors = brewer2mpl.get_map('Set2', 'qualitative', 4).mpl_colors +dark_colors = brewer2mpl.get_map('Dark2', 'qualitative', 4).mpl_colors + +import seaborn as sns +sns.set_style("whitegrid") +colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"] +sns.palplot(sns.xkcd_palette(colors)) + +plt.figure(figsize=(4, 2.6)) +plt.scatter(mnist_singlescale_nfes[::10], mnist_singlescale_loss[::10], color=line_colors[1], label="Single FFJORD") +plt.scatter(mnist_multiscale_nfes[::10], mnist_multiscale_loss[::10], color=line_colors[2], label="Multiscale FFJORD") + +plt.ylim([0.9, 1.25]) +plt.legend(frameon=True, fontsize=10.5) +plt.xlabel("NFE", fontsize=18) +plt.ylabel("Bits/dim", fontsize=18) + +ax = plt.gca() +ax.tick_params(axis='both', which='major', labelsize=14) +ax.tick_params(axis='both', which='minor', labelsize=10) + +plt.tight_layout() +plt.savefig('multiscale_loss_vs_nfe.pdf') diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_flows.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_flows.py new file mode 100644 index 0000000..d284a33 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_flows.py @@ -0,0 +1,157 @@ +from inspect import getsourcefile +import sys +import os + +current_path = os.path.abspath(getsourcefile(lambda: 0)) +current_dir = os.path.dirname(current_path) +parent_dir = current_dir[:current_dir.rfind(os.path.sep)] +sys.path.insert(0, parent_dir) + +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt + +import argparse +import os + +import torch + +import lib.toy_data as toy_data +import lib.utils as utils +import lib.visualize_flow as viz_flow +import lib.layers.odefunc as odefunc +import lib.layers as layers + +from train_misc import standard_normal_logprob +from train_misc import build_model_tabular, count_parameters + +SOLVERS = ["dopri5", "bdf", "rk4", "midpoint", 'adams', 'explicit_adams', 'fixed_adams'] +parser = argparse.ArgumentParser('Continuous Normalizing Flow') +parser.add_argument( + '--data', choices=['swissroll', '8gaussians', 'pinwheel', 'circles', 'moons', '2spirals', 'checkerboard', 'rings'], + type=str, default='pinwheel' +) + +parser.add_argument('--discrete', action='store_true') + +parser.add_argument('--depth', help='number of coupling layers', type=int, default=10) +parser.add_argument('--glow', type=eval, choices=[True, False], default=False) + +parser.add_argument( + "--layer_type", type=str, default="concatsquash", + choices=["ignore", "concat", "concat_v2", "squash", "concatsquash", "concatcoord", "hyper", "blend"] +) +parser.add_argument('--dims', type=str, default='64-64-64') +parser.add_argument("--num_blocks", type=int, default=1, help='Number of stacked CNFs.') +parser.add_argument('--time_length', type=float, default=0.5) +parser.add_argument('--train_T', type=eval, default=True) +parser.add_argument("--divergence_fn", type=str, default="brute_force", choices=["brute_force", "approximate"]) +parser.add_argument("--nonlinearity", type=str, default="tanh", choices=odefunc.NONLINEARITIES) + +parser.add_argument('--solver', type=str, default='dopri5', choices=SOLVERS) +parser.add_argument('--atol', type=float, default=1e-5) +parser.add_argument('--rtol', type=float, default=1e-5) +parser.add_argument("--step_size", type=float, default=None, help="Optional fixed step size.") + +parser.add_argument('--test_solver', type=str, default=None, choices=SOLVERS + [None]) +parser.add_argument('--test_atol', type=float, default=None) +parser.add_argument('--test_rtol', type=float, default=None) + +parser.add_argument('--residual', type=eval, default=False, choices=[True, False]) +parser.add_argument('--rademacher', type=eval, default=False, choices=[True, False]) +parser.add_argument('--spectral_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--batch_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--bn_lag', type=float, default=0) + +parser.add_argument('--niters', type=int, default=2500) +parser.add_argument('--batch_size', type=int, default=100) +parser.add_argument('--test_batch_size', type=int, default=1000) +parser.add_argument('--lr', type=float, default=1e-3) +parser.add_argument('--weight_decay', type=float, default=1e-5) + +parser.add_argument('--checkpt', type=str, required=True) +parser.add_argument('--save', type=str, default='experiments/cnf') +parser.add_argument('--viz_freq', type=int, default=100) +parser.add_argument('--val_freq', type=int, default=100) +parser.add_argument('--log_freq', type=int, default=10) +parser.add_argument('--gpu', type=int, default=0) +args = parser.parse_args() + +device = torch.device('cuda:' + str(args.gpu) if torch.cuda.is_available() else 'cpu') + + +def construct_discrete_model(): + + chain = [] + for i in range(args.depth): + if args.glow: chain.append(layers.BruteForceLayer(2)) + chain.append(layers.CouplingLayer(2, swap=i % 2 == 0)) + return layers.SequentialFlow(chain) + + +def get_transforms(model): + + def sample_fn(z, logpz=None): + if logpz is not None: + return model(z, logpz, reverse=True) + else: + return model(z, reverse=True) + + def density_fn(x, logpx=None): + if logpx is not None: + return model(x, logpx, reverse=False) + else: + return model(x, reverse=False) + + return sample_fn, density_fn + + +if __name__ == '__main__': + + if args.discrete: + model = construct_discrete_model().to(device) + model.load_state_dict(torch.load(args.checkpt)['state_dict']) + else: + model = build_model_tabular(args, 2).to(device) + + sd = torch.load(args.checkpt)['state_dict'] + fixed_sd = {} + for k, v in sd.items(): + fixed_sd[k.replace('odefunc.odefunc', 'odefunc')] = v + model.load_state_dict(fixed_sd) + + print(model) + print("Number of trainable parameters: {}".format(count_parameters(model))) + + model.eval() + p_samples = toy_data.inf_train_gen(args.data, batch_size=800**2) + + with torch.no_grad(): + sample_fn, density_fn = get_transforms(model) + + plt.figure(figsize=(10, 10)) + ax = ax = plt.gca() + viz_flow.plt_samples(p_samples, ax, npts=800) + plt.subplots_adjust(left=0, right=1, top=1, bottom=0) + fig_filename = os.path.join(args.save, 'figs', 'true_samples.jpg') + utils.makedirs(os.path.dirname(fig_filename)) + plt.savefig(fig_filename) + plt.close() + + plt.figure(figsize=(10, 10)) + ax = ax = plt.gca() + viz_flow.plt_flow_density(standard_normal_logprob, density_fn, ax, npts=800, memory=200, device=device) + plt.subplots_adjust(left=0, right=1, top=1, bottom=0) + fig_filename = os.path.join(args.save, 'figs', 'model_density.jpg') + utils.makedirs(os.path.dirname(fig_filename)) + plt.savefig(fig_filename) + plt.close() + + plt.figure(figsize=(10, 10)) + ax = ax = plt.gca() + viz_flow.plt_flow_samples(torch.randn, sample_fn, ax, npts=800, memory=200, device=device) + plt.subplots_adjust(left=0, right=1, top=1, bottom=0) + fig_filename = os.path.join(args.save, 'figs', 'model_samples.jpg') + utils.makedirs(os.path.dirname(fig_filename)) + plt.savefig(fig_filename) + plt.close() diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_nfe_vs_dim_vae.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_nfe_vs_dim_vae.py new file mode 100644 index 0000000..26126c5 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_nfe_vs_dim_vae.py @@ -0,0 +1,50 @@ +import os.path +import re +import numpy as np +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt +import scipy.ndimage + +import seaborn as sns +sns.set_style("whitegrid") +colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"] +sns.palplot(sns.xkcd_palette(colors)) + +dims = [16, 32, 48, 64] +dirs = [ + 'vae_mnist_cnf_num_flows_4_256-256_num_blocks_1__2018-09-16_17_27_03', + 'vae_mnist_cnf_num_flows_4_256-256_num_blocks_1__2018-09-16_17_26_41', + 'vae_mnist_cnf_num_flows_4_256-256_num_blocks_1__2018-09-16_17_23_35', + 'vae_mnist_cnf_num_flows_4_256-256_num_blocks_1__2018-09-16_17_25_03', +] + +nfe_all = [] + +for dim, dirname in zip(dims, dirs): + with open(os.path.join('snapshots', dirname, 'logs'), 'r') as f: + lines = f.readlines() + + nfes_ = [] + + for line in lines: + w = re.findall(r"NFE Forward [0-9]*", line) + if w: w = re.findall(r"[0-9]+", w[0]) + if w: + nfes_.append(float(w[0])) + + nfe_all.append(nfes_) + +plt.figure(figsize=(4, 2.4)) +for i, (dim, nfes) in enumerate(zip(dims, nfe_all)): + nfes = np.array(nfes) + xx = (np.arange(len(nfes)) + 1) / 50 + nfes = scipy.ndimage.gaussian_filter(nfes, 101) + plt.plot(xx, nfes, '--', label='Dim {}'.format(dim)) + +plt.legend(frameon=True, fontsize=10.5) +plt.xlabel('Epoch', fontsize=18) +plt.ylabel('NFE', fontsize=18) +plt.xlim([0, 200]) +plt.tight_layout() +plt.savefig("nfes_vs_dim_vae.pdf") diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_sn_losses.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_sn_losses.py new file mode 100644 index 0000000..fc425f8 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/plot_sn_losses.py @@ -0,0 +1,81 @@ +import re +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt + +CIFAR10 = "diagnostics/cifar10_multiscale.log" +CIFAR10_SN = "diagnostics/cifar10_multiscale_sn.log" + +MNIST = "diagnostics/mnist_multiscale.log" +MNIST_SN = "diagnostics/mnist_multiscale_sn.log" + + +def get_values(filename): + with open(filename, "r") as f: + lines = f.readlines() + + losses = [] + nfes = [] + + for line in lines: + + w = re.findall(r"Steps [^|(]*\([0-9\.]*\)", line) + if w: w = re.findall(r"\([0-9\.]*\)", w[0]) + if w: w = re.findall(r"[0-9\.]+", w[0]) + if w: + nfes.append(float(w[0])) + + w = re.findall(r"Bit/dim [^|(]*\([0-9\.]*\)", line) + if w: w = re.findall(r"\([0-9\.]*\)", w[0]) + if w: w = re.findall(r"[0-9\.]+", w[0]) + if w: + losses.append(float(w[0])) + + return losses, nfes + + +cifar10_loss, cifar10_nfes = get_values(CIFAR10) +cifar10_sn_loss, cifar10_sn_nfes = get_values(CIFAR10_SN) +mnist_loss, mnist_nfes = get_values(MNIST) +mnist_sn_loss, mnist_sn_nfes = get_values(MNIST_SN) + +import brewer2mpl +line_colors = brewer2mpl.get_map('Set2', 'qualitative', 4).mpl_colors +dark_colors = brewer2mpl.get_map('Dark2', 'qualitative', 4).mpl_colors +plt.style.use('ggplot') + +# CIFAR10 plot +plt.figure(figsize=(6, 7)) +plt.scatter(cifar10_nfes, cifar10_loss, color=line_colors[1], label="w/o Spectral Norm") +plt.scatter(cifar10_sn_nfes, cifar10_sn_loss, color=line_colors[2], label="w/ Spectral Norm") + +plt.ylim([3, 5]) +plt.legend(fontsize=18) +plt.xlabel("NFE", fontsize=30) +plt.ylabel("Bits/dim", fontsize=30) + +ax = plt.gca() +ax.tick_params(axis='both', which='major', labelsize=24) +ax.tick_params(axis='both', which='minor', labelsize=16) +ax.yaxis.set_ticks([3, 3.5, 4, 4.5, 5]) + +plt.tight_layout() +plt.savefig('cifar10_sn_loss_vs_nfe.pdf') + +# MNIST plot +plt.figure(figsize=(6, 7)) +plt.scatter(mnist_nfes, mnist_loss, color=line_colors[1], label="w/o Spectral Norm") +plt.scatter(mnist_sn_nfes, mnist_sn_loss, color=line_colors[2], label="w/ Spectral Norm") + +plt.ylim([0.9, 2]) +plt.legend(fontsize=18) +plt.xlabel("NFE", fontsize=30) +plt.ylabel("Bits/dim", fontsize=30) + +ax = plt.gca() +ax.tick_params(axis='both', which='major', labelsize=24) +ax.tick_params(axis='both', which='minor', labelsize=16) +# ax.yaxis.set_ticks([3, 3.5, 4, 4.5, 5]) + +plt.tight_layout() +plt.savefig('mnist_sn_loss_vs_nfe.pdf') diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/scrap_log.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/scrap_log.py new file mode 100644 index 0000000..c08e99b --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/scrap_log.py @@ -0,0 +1,64 @@ +import os +import re +import csv + + +def log_to_csv(log_filename, csv_filename): + with open(log_filename, 'r') as f: + lines = f.readlines() + + with open(csv_filename, 'w', newline='') as csvfile: + fieldnames = None + writer = None + + for line in lines: + if line.startswith('Iter'): + # A dictionary of quantity : value. + quants = _line_to_dict(line) + # Create writer and write header. + if fieldnames is None: + fieldnames = quants.keys() + writer = csv.DictWriter(csvfile, fieldnames=fieldnames) + writer.writeheader() + # Write a line. + writer.writerow(quants) + + +def _line_to_dict(line): + line = re.sub(':', '', line) # strip colons. + line = re.sub('\([^)]*\)', '', line) # strip running averages. + + quants = {} + for quant_str in line.split('|'): + quant_str = quant_str.strip() # strip beginning and ending whitespaces. + key, val = quant_str.split(' ') + quants[key] = val + + return quants + + +def plot_pairplot(csv_filename, fig_filename, top=None): + import seaborn as sns + import pandas as pd + + sns.set(style="ticks", color_codes=True) + quants = pd.read_csv(csv_filename) + if top is not None: + quants = quants[:top] + + g = sns.pairplot(quants, kind='reg', diag_kind='kde', markers='.') + g.savefig(fig_filename) + + +if __name__ == '__main__': + + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('--log', type=str, required=True) + parser.add_argument('--top_iters', type=int, default=None) + args = parser.parse_args() + + print('Parsing log into csv.') + log_to_csv(args.log, args.log + '.csv') + print('Creating correlation plot.') + plot_pairplot(args.log + '.csv', os.path.join(os.path.dirname(args.log), 'quants.png'), args.top_iters) diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_cnf.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_cnf.py new file mode 100644 index 0000000..3cb73c6 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_cnf.py @@ -0,0 +1,257 @@ +from inspect import getsourcefile +import sys +import os +import subprocess + +current_path = os.path.abspath(getsourcefile(lambda: 0)) +current_dir = os.path.dirname(current_path) +parent_dir = current_dir[:current_dir.rfind(os.path.sep)] +sys.path.insert(0, parent_dir) + +import argparse +import torch +import torchvision.datasets as dset +import torchvision.transforms as tforms +from torchvision.utils import save_image + +import lib.layers as layers +import lib.spectral_norm as spectral_norm +import lib.utils as utils + + +def add_noise(x): + """ + [0, 1] -> [0, 255] -> add noise -> [0, 1] + """ + noise = x.new().resize_as_(x).uniform_() + x = x * 255 + noise + x = x / 256 + return x + + +def get_dataset(args): + trans = lambda im_size: tforms.Compose([tforms.Resize(im_size), tforms.ToTensor(), add_noise]) + + if args.data == "mnist": + im_dim = 1 + im_size = 28 if args.imagesize is None else args.imagesize + train_set = dset.MNIST(root="./data", train=True, transform=trans(im_size), download=True) + test_set = dset.MNIST(root="./data", train=False, transform=trans(im_size), download=True) + elif args.data == "svhn": + im_dim = 3 + im_size = 32 if args.imagesize is None else args.imagesize + train_set = dset.SVHN(root="./data", split="train", transform=trans(im_size), download=True) + test_set = dset.SVHN(root="./data", split="test", transform=trans(im_size), download=True) + elif args.data == "cifar10": + im_dim = 3 + im_size = 32 if args.imagesize is None else args.imagesize + train_set = dset.CIFAR10(root="./data", train=True, transform=trans(im_size), download=True) + test_set = dset.CIFAR10(root="./data", train=False, transform=trans(im_size), download=True) + elif args.dataset == 'celeba': + im_dim = 3 + im_size = 64 if args.imagesize is None else args.imagesize + train_set = dset.CelebA( + train=True, transform=tforms.Compose([ + tforms.ToPILImage(), + tforms.Resize(im_size), + tforms.RandomHorizontalFlip(), + tforms.ToTensor(), + add_noise, + ]) + ) + test_set = dset.CelebA( + train=False, transform=tforms.Compose([ + tforms.ToPILImage(), + tforms.Resize(args.imagesize), + tforms.ToTensor(), + add_noise, + ]) + ) + data_shape = (im_dim, im_size, im_size) + + train_loader = torch.utils.data.DataLoader(dataset=train_set, batch_size=args.batch_size, shuffle=True) + test_loader = torch.utils.data.DataLoader(dataset=test_set, batch_size=args.batch_size, shuffle=False) + return train_loader, test_loader, data_shape + + +def add_spectral_norm(model): + def recursive_apply_sn(parent_module): + for child_name in list(parent_module._modules.keys()): + child_module = parent_module._modules[child_name] + classname = child_module.__class__.__name__ + if classname.find('Conv') != -1 and 'weight' in child_module._parameters: + del parent_module._modules[child_name] + parent_module.add_module(child_name, spectral_norm.spectral_norm(child_module, 'weight')) + else: + recursive_apply_sn(child_module) + + recursive_apply_sn(model) + + +def build_model(args, state_dict): + # load dataset + train_loader, test_loader, data_shape = get_dataset(args) + + hidden_dims = tuple(map(int, args.dims.split(","))) + strides = tuple(map(int, args.strides.split(","))) + + # neural net that parameterizes the velocity field + if args.autoencode: + + def build_cnf(): + autoencoder_diffeq = layers.AutoencoderDiffEqNet( + hidden_dims=hidden_dims, + input_shape=data_shape, + strides=strides, + conv=args.conv, + layer_type=args.layer_type, + nonlinearity=args.nonlinearity, + ) + odefunc = layers.AutoencoderODEfunc( + autoencoder_diffeq=autoencoder_diffeq, + divergence_fn=args.divergence_fn, + residual=args.residual, + rademacher=args.rademacher, + ) + cnf = layers.CNF( + odefunc=odefunc, + T=args.time_length, + solver=args.solver, + ) + return cnf + else: + + def build_cnf(): + diffeq = layers.ODEnet( + hidden_dims=hidden_dims, + input_shape=data_shape, + strides=strides, + conv=args.conv, + layer_type=args.layer_type, + nonlinearity=args.nonlinearity, + ) + odefunc = layers.ODEfunc( + diffeq=diffeq, + divergence_fn=args.divergence_fn, + residual=args.residual, + rademacher=args.rademacher, + ) + cnf = layers.CNF( + odefunc=odefunc, + T=args.time_length, + solver=args.solver, + ) + return cnf + + chain = [layers.LogitTransform(alpha=args.alpha), build_cnf()] + if args.batch_norm: + chain.append(layers.MovingBatchNorm2d(data_shape[0])) + model = layers.SequentialFlow(chain) + + if args.spectral_norm: + add_spectral_norm(model) + + model.load_state_dict(state_dict) + + return model, test_loader.dataset + + +if __name__ == '__main__': + parser = argparse.ArgumentParser("Visualizes experiments trained using train_cnf.py.") + parser.add_argument("--checkpt", type=str, required=True) + parser.add_argument("--nsamples", type=int, default=50) + parser.add_argument("--ntimes", type=int, default=100) + parser.add_argument("--save", type=str, default="imgs") + args = parser.parse_args() + + checkpt = torch.load(args.checkpt, map_location=lambda storage, loc: storage) + ck_args = checkpt["args"] + state_dict = checkpt["state_dict"] + + model, test_set = build_model(ck_args, state_dict) + real_samples = torch.stack([test_set[i][0] for i in range(args.nsamples)], dim=0) + data_shape = real_samples.shape[1:] + fake_latents = torch.randn(args.nsamples, *data_shape) + + # Transfer to GPU if available. + device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + print("Running on {}".format(device)) + model.to(device) + real_samples = real_samples.to(device) + fake_latents = fake_latents.to(device) + + # Construct fake samples + fake_samples = model(fake_latents, reverse=True).view(-1, *data_shape) + samples = torch.cat([real_samples, fake_samples], dim=0) + + still_diffeq = torch.zeros_like(samples) + im_indx = 0 + + # Image-saving helper function + def save_im(im, diffeq): + global im_indx + filename = os.path.join(current_dir, args.save, "flow_%05d.png" % im_indx) + utils.makedirs(os.path.dirname(filename)) + + diffeq = diffeq.clone() + de_min, de_max = float(diffeq.min()), float(diffeq.max()) + diffeq.clamp_(min=de_min, max=de_max) + diffeq.add_(-de_min).div_(de_max - de_min + 1e-5) + + assert im.shape == diffeq.shape + shape = im.shape + interleaved = torch.stack([im, diffeq]).transpose(0, 1).contiguous().view(2 * shape[0], *shape[1:]) + save_image(interleaved, filename, nrow=20, padding=0, range=(0, 1)) + im_indx += 1 + + # Still frames with image samples. + for _ in range(30): + save_im(samples, still_diffeq) + + # Forward image to latent. + logits = model.chain[0](samples) + for i in range(1, len(model.chain)): + assert isinstance(model.chain[i], layers.CNF) + cnf = model.chain[i] + tt = torch.linspace(cnf.integration_times[0], cnf.integration_times[-1], args.ntimes) + z_t = cnf(logits, integration_times=tt) + logits = z_t[-1] + + # transform back to image space + im_t = model.chain[0](z_t.view(args.ntimes * args.nsamples * 2, *data_shape), + reverse=True).view(args.ntimes, 2 * args.nsamples, *data_shape) + + # save each step as an image + for t, im in zip(tt, im_t): + diffeq = cnf.odefunc(t, (im, None))[0] + diffeq = model.chain[0](diffeq, reverse=True) + save_im(im, diffeq) + + # Still frames with latent samples. + latents = model.chain[0](logits, reverse=True) + for _ in range(30): + save_im(latents, still_diffeq) + + # Forward image to latent. + for i in range(len(model.chain) - 1, 0, -1): + assert isinstance(model.chain[i], layers.CNF) + cnf = model.chain[i] + tt = torch.linspace(cnf.integration_times[-1], cnf.integration_times[0], args.ntimes) + z_t = cnf(logits, integration_times=tt) + logits = z_t[-1] + + # transform back to image space + im_t = model.chain[0](z_t.view(args.ntimes * args.nsamples * 2, *data_shape), + reverse=True).view(args.ntimes, 2 * args.nsamples, *data_shape) + # save each step as an image + for t, im in zip(tt, im_t): + diffeq = cnf.odefunc(t, (im, None))[0] + diffeq = model.chain[0](diffeq, reverse=True) + save_im(im, -diffeq) + + # Combine the images into a movie + bashCommand = r"ffmpeg -y -i {}/flow_%05d.png {}".format( + os.path.join(current_dir, args.save), os.path.join(current_dir, args.save, "flow.mp4") + ) + process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE) + output, error = process.communicate() diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_high_fidelity_toy.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_high_fidelity_toy.py new file mode 100644 index 0000000..b4181c2 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_high_fidelity_toy.py @@ -0,0 +1,132 @@ +import os +import math +from tqdm import tqdm +import numpy as np +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt +import torch + + +def standard_normal_logprob(z): + logZ = -0.5 * math.log(2 * math.pi) + return logZ - z.pow(2) / 2 + + +def makedirs(dirname): + if not os.path.exists(dirname): + os.makedirs(dirname) + + +def save_density_traj(model, data_samples, savedir, ntimes=101, memory=0.01, device='cpu'): + model.eval() + + # sample from a grid + npts = 800 + side = np.linspace(-4, 4, npts) + xx, yy = np.meshgrid(side, side) + xx = torch.from_numpy(xx).type(torch.float32).to(device) + yy = torch.from_numpy(yy).type(torch.float32).to(device) + z_grid = torch.cat([xx.reshape(-1, 1), yy.reshape(-1, 1)], 1) + + with torch.no_grad(): + # We expect the model is a chain of CNF layers wrapped in a SequentialFlow container. + logpz_grid = torch.sum(standard_normal_logprob(z_grid), 1, keepdim=True) + for cnf in model.chain: + end_time = cnf.sqrt_end_time * cnf.sqrt_end_time + viz_times = torch.linspace(0., end_time, ntimes) + + logpz_grid = [standard_normal_logprob(z_grid).sum(1, keepdim=True)] + for t in tqdm(viz_times[1:]): + inds = torch.arange(0, z_grid.shape[0]).to(torch.int64) + logpz_t = [] + for ii in torch.split(inds, int(z_grid.shape[0] * memory)): + z0, delta_logp = cnf( + z_grid[ii], + torch.zeros(z_grid[ii].shape[0], 1).to(z_grid), integration_times=torch.tensor([0., + t.item()]) + ) + logpz_t.append(standard_normal_logprob(z0).sum(1, keepdim=True) - delta_logp) + logpz_grid.append(torch.cat(logpz_t, 0)) + logpz_grid = torch.stack(logpz_grid, 0).cpu().detach().numpy() + z_grid = z_grid.cpu().detach().numpy() + + plt.figure(figsize=(8, 8)) + for t in range(logpz_grid.shape[0]): + + plt.clf() + ax = plt.gca() + + # plot the density + z, logqz = z_grid, logpz_grid[t] + + xx = z[:, 0].reshape(npts, npts) + yy = z[:, 1].reshape(npts, npts) + qz = np.exp(logqz).reshape(npts, npts) + + plt.pcolormesh(xx, yy, qz, cmap='binary') + ax.set_xlim(-4, 4) + ax.set_ylim(-4, 4) + cmap = matplotlib.cm.get_cmap('binary') + ax.set_axis_bgcolor(cmap(0.)) + ax.invert_yaxis() + ax.get_xaxis().set_ticks([]) + ax.get_yaxis().set_ticks([]) + plt.tight_layout() + + makedirs(savedir) + plt.savefig(os.path.join(savedir, f"viz-{t:05d}.jpg")) + + +def trajectory_to_video(savedir): + import subprocess + bashCommand = 'ffmpeg -y -i {} {}'.format(os.path.join(savedir, 'viz-%05d.jpg'), os.path.join(savedir, 'traj.mp4')) + process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE) + output, error = process.communicate() + + +if __name__ == '__main__': + import argparse + import sys + + sys.path.append(os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))) + + import lib.toy_data as toy_data + from train_misc import count_parameters + from train_misc import set_cnf_options, add_spectral_norm, create_regularization_fns + from train_misc import build_model_tabular + + def get_ckpt_model_and_data(args): + # Load checkpoint. + checkpt = torch.load(args.checkpt, map_location=lambda storage, loc: storage) + ckpt_args = checkpt['args'] + state_dict = checkpt['state_dict'] + + # Construct model and restore checkpoint. + regularization_fns, regularization_coeffs = create_regularization_fns(ckpt_args) + model = build_model_tabular(ckpt_args, 2, regularization_fns).to(device) + if ckpt_args.spectral_norm: add_spectral_norm(model) + set_cnf_options(ckpt_args, model) + + model.load_state_dict(state_dict) + model.to(device) + + print(model) + print("Number of trainable parameters: {}".format(count_parameters(model))) + + # Load samples from dataset + data_samples = toy_data.inf_train_gen(ckpt_args.data, batch_size=2000) + + return model, data_samples + + parser = argparse.ArgumentParser() + parser.add_argument('--checkpt', type=str, required=True) + parser.add_argument('--ntimes', type=int, default=101) + parser.add_argument('--memory', type=float, default=0.01, help='Higher this number, the more memory is consumed.') + parser.add_argument('--save', type=str, default='trajectory') + args = parser.parse_args() + + device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') + model, data_samples = get_ckpt_model_and_data(args) + save_density_traj(model, data_samples, args.save, ntimes=args.ntimes, memory=args.memory, device=device) + trajectory_to_video(args.save) diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_multiscale.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_multiscale.py new file mode 100644 index 0000000..b3fcd9d --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_multiscale.py @@ -0,0 +1,222 @@ +from inspect import getsourcefile +import sys +import os +import math + +current_path = os.path.abspath(getsourcefile(lambda: 0)) +current_dir = os.path.dirname(current_path) +parent_dir = current_dir[:current_dir.rfind(os.path.sep)] +sys.path.insert(0, parent_dir) + +import argparse + +import lib.layers as layers +import lib.odenvp as odenvp +import torch +import torchvision.transforms as tforms +import torchvision.datasets as dset +from torchvision.utils import save_image +import lib.utils as utils + +from train_misc import add_spectral_norm, set_cnf_options, count_parameters + +parser = argparse.ArgumentParser("Continuous Normalizing Flow") +parser.add_argument("--checkpt", type=str, required=True) +parser.add_argument("--data", choices=["mnist", "svhn", "cifar10", 'lsun_church'], type=str, default="cifar10") +parser.add_argument("--dims", type=str, default="64,64,64") +parser.add_argument("--num_blocks", type=int, default=2, help='Number of stacked CNFs.') +parser.add_argument("--divergence_fn", type=str, default="approximate", choices=["brute_force", "approximate"]) +parser.add_argument( + "--nonlinearity", type=str, default="softplus", choices=["tanh", "relu", "softplus", "elu", "swish"] +) +parser.add_argument("--conv", type=eval, default=True, choices=[True, False]) + +parser.add_argument('--solver', type=str, default='dopri5') +parser.add_argument('--atol', type=float, default=1e-5) +parser.add_argument('--rtol', type=float, default=1e-5) +parser.add_argument("--step_size", type=float, default=None, help="Optional fixed step size.") + +parser.add_argument('--test_solver', type=str, default=None) +parser.add_argument('--test_atol', type=float, default=None) +parser.add_argument('--test_rtol', type=float, default=None) + +parser.add_argument("--imagesize", type=int, default=None) +parser.add_argument("--alpha", type=float, default=-1.0) +parser.add_argument('--time_length', type=float, default=1.0) +parser.add_argument('--train_T', type=eval, default=True) + +parser.add_argument("--add_noise", type=eval, default=True, choices=[True, False]) +parser.add_argument('--rademacher', type=eval, default=True, choices=[True, False]) +parser.add_argument('--residual', type=eval, default=False, choices=[True, False]) +parser.add_argument('--spectral_norm', type=eval, default=False, choices=[True, False]) + +parser.add_argument('--ntimes', type=int, default=50) +parser.add_argument('--save', type=str, default='img_trajectory') + +args = parser.parse_args() + +BATCH_SIZE = 8 * 8 + + +def add_noise(x): + """ + [0, 1] -> [0, 255] -> add noise -> [0, 1] + """ + if args.add_noise: + noise = x.new().resize_as_(x).uniform_() + x = x * 255 + noise + x = x / 256 + return x + + +def get_dataset(args): + trans = lambda im_size: tforms.Compose([tforms.Resize(im_size), tforms.ToTensor(), add_noise]) + + if args.data == "mnist": + im_dim = 1 + im_size = 28 if args.imagesize is None else args.imagesize + train_set = dset.MNIST(root="./data", train=True, transform=trans(im_size), download=True) + elif args.data == "cifar10": + im_dim = 3 + im_size = 32 if args.imagesize is None else args.imagesize + train_set = dset.CIFAR10( + root="./data", train=True, transform=tforms.Compose([ + tforms.Resize(im_size), + tforms.RandomHorizontalFlip(), + tforms.ToTensor(), + add_noise, + ]), download=True + ) + elif args.data == 'lsun_church': + im_dim = 3 + im_size = 64 if args.imagesize is None else args.imagesize + train_set = dset.LSUN( + 'data', ['church_outdoor_train'], transform=tforms.Compose([ + tforms.Resize(96), + tforms.RandomCrop(64), + tforms.Resize(im_size), + tforms.ToTensor(), + add_noise, + ]) + ) + data_shape = (im_dim, im_size, im_size) + if not args.conv: + data_shape = (im_dim * im_size * im_size,) + + return train_set, data_shape + + +def create_model(args, data_shape): + hidden_dims = tuple(map(int, args.dims.split(","))) + + model = odenvp.ODENVP( + (BATCH_SIZE, *data_shape), + n_blocks=args.num_blocks, + intermediate_dims=hidden_dims, + nonlinearity=args.nonlinearity, + alpha=args.alpha, + cnf_kwargs={"T": args.time_length, "train_T": args.train_T}, + ) + if args.spectral_norm: add_spectral_norm(model) + set_cnf_options(args, model) + return model + + +if __name__ == '__main__': + device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + cvt = lambda x: x.type(torch.float32).to(device, non_blocking=True) + + # load dataset + train_set, data_shape = get_dataset(args) + + # build model + model = create_model(args, data_shape) + + print(model) + print("Number of trainable parameters: {}".format(count_parameters(model))) + + # restore parameters + checkpt = torch.load(args.checkpt, map_location=lambda storage, loc: storage) + pruned_sd = {} + for k, v in checkpt['state_dict'].items(): + pruned_sd[k.replace('odefunc.odefunc', 'odefunc')] = v + model.load_state_dict(pruned_sd) + + train_loader = torch.utils.data.DataLoader(dataset=train_set, batch_size=BATCH_SIZE, shuffle=True) + + data_samples, _ = train_loader.__iter__().__next__() + + # cosine interpolate between 4 real images. + z = data_samples[:4] + print('Inferring base values for 4 example images.') + z = model(z) + + phi0 = torch.linspace(0, 0.5, int(math.sqrt(BATCH_SIZE))) * math.pi + phi1 = torch.linspace(0, 0.5, int(math.sqrt(BATCH_SIZE))) * math.pi + phi0, phi1 = torch.meshgrid([phi0, phi1]) + phi0, phi1 = phi0.contiguous().view(-1, 1), phi1.contiguous().view(-1, 1) + z = torch.cos(phi0) * (torch.cos(phi1) * z[0] + torch.sin(phi1) * z[1]) + \ + torch.sin(phi0) * (torch.cos(phi1) * z[2] + torch.sin(phi1) * z[3]) + print('Reconstructing images from latent interpolation.') + z = model(z, reverse=True) + + non_cnf_layers = [] + + utils.makedirs(args.save) + img_idx = 0 + + def save_imgs_figure(xs): + global img_idx + save_image( + list(xs), + os.path.join(args.save, "img_{:05d}.jpg".format(img_idx)), nrow=int(math.sqrt(BATCH_SIZE)), normalize=True, + range=(0, 1) + ) + img_idx += 1 + + class FactorOut(torch.nn.Module): + + def __init__(self, factor_out): + super(FactorOut, self).__init__() + self.factor_out = factor_out + + def forward(self, x, reverse=True): + assert reverse + T = x.shape[0] // self.factor_out.shape[0] + return torch.cat([x, self.factor_out.repeat(T, *([1] * (self.factor_out.ndimension() - 1)))], 1) + + time_ratio = 1.0 + print('Visualizing transformations.') + with torch.no_grad(): + for idx, stacked_layers in enumerate(model.transforms): + for layer in stacked_layers.chain: + print(z.shape) + print(non_cnf_layers) + if isinstance(layer, layers.CNF): + # linspace over time, and visualize by reversing through previous non_cnf_layers. + cnf = layer + end_time = (cnf.sqrt_end_time * cnf.sqrt_end_time) + ntimes = int(args.ntimes * time_ratio) + integration_times = torch.linspace(0, end_time.item(), ntimes) + z_traj = cnf(z, integration_times=integration_times) + + # reverse z(t) for all times to the input space + z_flatten = z_traj.view(ntimes * BATCH_SIZE, *z_traj.shape[2:]) + for prev_layer in non_cnf_layers[::-1]: + z_flatten = prev_layer(z_flatten, reverse=True) + z_inv = z_flatten.view(ntimes, BATCH_SIZE, *data_shape) + for t in range(1, z_inv.shape[0]): + z_t = z_inv[t] + save_imgs_figure(z_t) + z = z_traj[-1] + else: + # update z and place in non_cnf_layers. + z = layer(z) + non_cnf_layers.append(layer) + if idx < len(model.transforms) - 1: + d = z.shape[1] // 2 + z, factor_out = z[:, :d], z[:, d:] + non_cnf_layers.append(FactorOut(factor_out)) + + # After every factor out, we half the time for visualization. + time_ratio = time_ratio / 2 diff --git a/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_toy.py b/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_toy.py new file mode 100644 index 0000000..7ebf029 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/diagnostics/viz_toy.py @@ -0,0 +1,179 @@ +import os +import math +import numpy as np +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt +import torch + + +def standard_normal_logprob(z): + logZ = -0.5 * math.log(2 * math.pi) + return logZ - z.pow(2) / 2 + + +def makedirs(dirname): + if not os.path.exists(dirname): + os.makedirs(dirname) + + +def save_trajectory(model, data_samples, savedir, ntimes=101, memory=0.01, device='cpu'): + model.eval() + + # Sample from prior + z_samples = torch.randn(2000, 2).to(device) + + # sample from a grid + npts = 800 + side = np.linspace(-4, 4, npts) + xx, yy = np.meshgrid(side, side) + xx = torch.from_numpy(xx).type(torch.float32).to(device) + yy = torch.from_numpy(yy).type(torch.float32).to(device) + z_grid = torch.cat([xx.reshape(-1, 1), yy.reshape(-1, 1)], 1) + + with torch.no_grad(): + # We expect the model is a chain of CNF layers wrapped in a SequentialFlow container. + logp_samples = torch.sum(standard_normal_logprob(z_samples), 1, keepdim=True) + logp_grid = torch.sum(standard_normal_logprob(z_grid), 1, keepdim=True) + t = 0 + for cnf in model.chain: + end_time = (cnf.sqrt_end_time * cnf.sqrt_end_time) + integration_times = torch.linspace(0, end_time, ntimes) + + z_traj, _ = cnf(z_samples, logp_samples, integration_times=integration_times, reverse=True) + z_traj = z_traj.cpu().numpy() + + grid_z_traj, grid_logpz_traj = [], [] + inds = torch.arange(0, z_grid.shape[0]).to(torch.int64) + for ii in torch.split(inds, int(z_grid.shape[0] * memory)): + _grid_z_traj, _grid_logpz_traj = cnf( + z_grid[ii], logp_grid[ii], integration_times=integration_times, reverse=True + ) + _grid_z_traj, _grid_logpz_traj = _grid_z_traj.cpu().numpy(), _grid_logpz_traj.cpu().numpy() + grid_z_traj.append(_grid_z_traj) + grid_logpz_traj.append(_grid_logpz_traj) + grid_z_traj = np.concatenate(grid_z_traj, axis=1) + grid_logpz_traj = np.concatenate(grid_logpz_traj, axis=1) + + plt.figure(figsize=(8, 8)) + for _ in range(z_traj.shape[0]): + + plt.clf() + + # plot target potential function + ax = plt.subplot(2, 2, 1, aspect="equal") + + ax.hist2d(data_samples[:, 0], data_samples[:, 1], range=[[-4, 4], [-4, 4]], bins=200) + ax.invert_yaxis() + ax.get_xaxis().set_ticks([]) + ax.get_yaxis().set_ticks([]) + ax.set_title("Target", fontsize=32) + + # plot the density + ax = plt.subplot(2, 2, 2, aspect="equal") + + z, logqz = grid_z_traj[t], grid_logpz_traj[t] + + xx = z[:, 0].reshape(npts, npts) + yy = z[:, 1].reshape(npts, npts) + qz = np.exp(logqz).reshape(npts, npts) + + plt.pcolormesh(xx, yy, qz) + ax.set_xlim(-4, 4) + ax.set_ylim(-4, 4) + cmap = matplotlib.cm.get_cmap(None) + ax.set_axis_bgcolor(cmap(0.)) + ax.invert_yaxis() + ax.get_xaxis().set_ticks([]) + ax.get_yaxis().set_ticks([]) + ax.set_title("Density", fontsize=32) + + # plot the samples + ax = plt.subplot(2, 2, 3, aspect="equal") + + zk = z_traj[t] + ax.hist2d(zk[:, 0], zk[:, 1], range=[[-4, 4], [-4, 4]], bins=200) + ax.invert_yaxis() + ax.get_xaxis().set_ticks([]) + ax.get_yaxis().set_ticks([]) + ax.set_title("Samples", fontsize=32) + + # plot vector field + ax = plt.subplot(2, 2, 4, aspect="equal") + + K = 13j + y, x = np.mgrid[-4:4:K, -4:4:K] + K = int(K.imag) + zs = torch.from_numpy(np.stack([x, y], -1).reshape(K * K, 2)).to(device, torch.float32) + logps = torch.zeros(zs.shape[0], 1).to(device, torch.float32) + dydt = cnf.odefunc(integration_times[t], (zs, logps))[0] + dydt = -dydt.cpu().detach().numpy() + dydt = dydt.reshape(K, K, 2) + + logmag = 2 * np.log(np.hypot(dydt[:, :, 0], dydt[:, :, 1])) + ax.quiver( + x, y, dydt[:, :, 0], dydt[:, :, 1], + np.exp(logmag), cmap="coolwarm", scale=20., width=0.015, pivot="mid" + ) + ax.set_xlim(-4, 4) + ax.set_ylim(-4, 4) + ax.axis("off") + ax.set_title("Vector Field", fontsize=32) + + makedirs(savedir) + plt.savefig(os.path.join(savedir, f"viz-{t:05d}.jpg")) + t += 1 + + +def trajectory_to_video(savedir): + import subprocess + bashCommand = 'ffmpeg -y -i {} {}'.format(os.path.join(savedir, 'viz-%05d.jpg'), os.path.join(savedir, 'traj.mp4')) + process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE) + output, error = process.communicate() + + +if __name__ == '__main__': + import argparse + import sys + + sys.path.append(os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))) + + import lib.toy_data as toy_data + from train_misc import count_parameters + from train_misc import set_cnf_options, add_spectral_norm, create_regularization_fns + from train_misc import build_model_tabular + + def get_ckpt_model_and_data(args): + # Load checkpoint. + checkpt = torch.load(args.checkpt, map_location=lambda storage, loc: storage) + ckpt_args = checkpt['args'] + state_dict = checkpt['state_dict'] + + # Construct model and restore checkpoint. + regularization_fns, regularization_coeffs = create_regularization_fns(ckpt_args) + model = build_model_tabular(ckpt_args, 2, regularization_fns).to(device) + if ckpt_args.spectral_norm: add_spectral_norm(model) + set_cnf_options(ckpt_args, model) + + model.load_state_dict(state_dict) + model.to(device) + + print(model) + print("Number of trainable parameters: {}".format(count_parameters(model))) + + # Load samples from dataset + data_samples = toy_data.inf_train_gen(ckpt_args.data, batch_size=2000) + + return model, data_samples + + parser = argparse.ArgumentParser() + parser.add_argument('--checkpt', type=str, required=True) + parser.add_argument('--ntimes', type=int, default=101) + parser.add_argument('--memory', type=float, default=0.01, help='Higher this number, the more memory is consumed.') + parser.add_argument('--save', type=str, default='trajectory') + args = parser.parse_args() + + device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') + model, data_samples = get_ckpt_model_and_data(args) + save_trajectory(model, data_samples, args.save, ntimes=args.ntimes, memory=args.memory, device=device) + trajectory_to_video(args.save) diff --git a/src/torchprune/torchprune/util/external/ffjord/imgs/github.png b/src/torchprune/torchprune/util/external/ffjord/imgs/github.png new file mode 100644 index 0000000000000000000000000000000000000000..487ed2fafda4af9d3e8e462bbcd935792a0c7803 GIT binary patch literal 7960 zcmb7p1yq#ZxAuUFNQw*{(p>{6Eg%v@w+aJDBS@Eklo&8b*MM}2G)PM*3?bdkNOw!u zJ^p{+`rq%a@4I)c`z~fU?>^@}@1Aq^KKt3v4$)LsB*de}gFqmJaHS{O5C~QR_@HpH zfdoriGy?p)`B;L8h#eqvX@xZfZdXOh!&__qhaCmAS&md_+P5xUq z@076TCpD5d`6sfBp?dy_OnCVW$(Z}IQ-{>GPDD~r$1~eP=Y}o>*!!ZvMC{vW)K-976Td*0KEaxCV+she@h{pIR7aHL;e~2 z-%9^J_|FXgOb6x#WB<=|VBY^p`uD+qkNs~I`d_N~UljVc^8ZB&ejkHfTWq?1OrEOP z=NKJrZEY>Bj1k*{f&$*6LSgE#te~K*n3#$R*V`I>?5VGRHrN~5-kM42>XPuO6cWUOWEU||8)xUjI0mX=Oxvf8B5maOtjC{Dj12k-b4ZjydYxYpOTbhU}RLJ zVwYoSAvw3D2H$C$xb)c?FOy5ajbX{Js}pBswd~!TDCXk>Z%-?FE~iIk*E3lOZh*+u zs_&75Bd^k9b6i$0F;ptR=lrO4rFYHq^XTYk%Liirm(!xx#YXw1_gM0>3nRj3 z>nyt}?Z*DpTk`Xl6c+MusUk0PTC=m80|L&zRw|QGQi?iUoD5_sXxY|Io}8|1WMwTZ zENnPhu;yi-NL>o&Sjj)HzdS!4!?aZz*uQymff~p%taiBk@%EOkp%pow!El}X1}sal z9gQB@So|&H>%r*?n>#%{&!d%^6!7or?RA*XhVL{T(_2!^NVu-})p;K}HeHSi_!s*` z(8EJQVpE_6zQq=1W|<48V~UpM=0aARlbP6Uj}dX*YXHyO`}=j;^K->>PHO$IZnR&u?gDZGGJ5iCL1NtT~?b$Mp8{aS4`ZW@eT>l4Igl){m`p zad+?O>vQ}QF*p2mq&rdQ{yw{=jS{!?)$6@^G+JIh>D4ov=dU_~h<^+939W3wE@&Ho>kAoum`PBR+?p+$Du)Ckt(tEL7|o z#&vFM`*GY)`An`3$4p8Pwb}*-2FAw5T3TAh#(tNRl|V0Wef|1%eSIA?nkK`+LPbSI zg@lCUE$(yTrJ#AG;A{Ns8K;Oy^|x=ju?r*LUJiL| zO;&ncIEw&TmA#atWZmiMnq^nJj*hkB6UwU_PK8B9G*@iI+TBic8fw0i?TWz>wpLaT zecL_}&-ynJT_2wt)%PYp@?Gvu1cyrU<|d7ZL&q9}!Lw(t-By3Et*vcsZLKYh?9{HT zmqvLVtneF^KZ*U7otq;yQY*BOU>9ppq)$`fob^nxNbVz1{qeT%Z$C6Un*y)l(R@eL z)>QS=f;e|p#UlOsYDejLGzD{3=KQ^T^v?<|Zxg-t@(QVpNb}#j74)=VB-#v2CE?Rc zJExEz6*aKPsdM$6AG0$_2D8(D@ghAgj?84xGYy7|i;IG}E_+INUe(&@#ui9Fs?T%HL`NP&$CmA>l9-W<@o?g>-eoCS#^5e&kva+(_zu&84iTTu)ychc6Xr*31m4eaBTx` zaruCBLG{#Z+-#I??oRbEgm9UwdMCyV_^?rfG6};MyKG9%HUxp0CqJhG66Y|`>V4lF)ty$ zD#!=-GzN_G@cOI$f2)UHx7He{aWV|{>*d?p+J3p=3S(QjOU8~?D)Tu#Inlg{+d4Lu zz!YhAJw>V^twti#9&LubL2_3Hw2;9S=hsW~^V*u4GITFa45}Sc($X~OP@yvgo=Uj# zkOpPsoz00xUry|Icds@ppn+tTTLx9HPB%)Lv~N=i`uOb5!l@AD{5q>QI ze)rYjL7%h+$&24tqb2wMbw9|e!hubI7#_@l20{yFf+QF2$XPJ?Z;P2+I9q!+;lK9hlJ_2(h8h=<{GOTl zHV~^!_~qc@M=2lgTR2=&{czaRr%(O5v1IpjSVAh!{Wr!U*aB+s@bJ#Ku0+_8>Sbt^ z_|3`Mm?%ib)@*~%z&yH;BaVZSlaq&KakR*g;6`xo@UUB7qwkLf?sJyL$q$4or{AZD9a3roJw5piIrUFrVaMATj08t8 zG)CIQ1VhTM-v1{ujnAl#qqLf=IulX#MvMffR#{EW2((;bVneo-J)cFIT$b>*h-%C2 zC;$9f>O!8$r<5<70Vu-wlfm(+iVC}WQY%6=RXsb${ouIdYhm^Pqa#~x?#Bq)y{*Cb zwWw(xgPKU(pnJM{`h1`T1T1uqriBDbb8|nCe`LyKw{?H>_;JMcOk!xKqOLBK1ZU|> zetrlNX~xHPpR+yUcy)9O_?NIqY)ePSs*{V$QxlVAGnY~qG#(RyvW}5a184z3`iSjk z;g>E4%W9L<%I2n~d*?e%LKLL4(_RO`0vtnOG$PAAX?+OQ*G0)Gp`l0{8;-w-Nmdri z6&7ee)0l!A6ir4>?r^@&4Xk^r${{Br!^yDvm8m?Z06spxI#PDd!av-k*R_mT`Yagt zhQoACnac>5wyKiP(Pl;v7ChQ-yfTz5C$hV{o9pycgaN+1ye#4{{eq7T^}ufIo@q0k zh~q4x+E0p;4K+Ug%$wq*h4C~TccPesE+v^SHnzXMnXbs7l8cAOf{*PJvtk5zWCn>u zYKPxvN56|gMaqm}A1eh%fE#B-E=DYXZ}E&s&MWtsw*fUT{5VeO?l@m#Pa^x`>$bT3%Q4U5b(nUJ_CR5?NfahBVG6+m;|zItYnxe&^*vO` zMjnm+#_4pQwVa08HvDcn2L+!o3z`4~Mk;%}>Grs;1UM{6-@rimGdA)p*P0K9BlMzi zEin}9m&@hk1MTi~Jxrt8XY6ATdu5SS!p2$n9AVSio8*p;H=qv{UMDf6^Xwaz0Avi% z`Fy{Pa5hR-NJJ!0E$}?dYeMReyaT6|l`WXOkOQkDUOtBHZ@(!Y&b0q06e`l}!=;qD zsqEk0TUNgi1U3BJ+}z-u&kYTSasx8ka5-@z&9W&KabJ9jG^1qnBf$;@@ITuJ8uK`|_vyOPPjIc`ezlFp``y|$b#&zK zx{O{)&M}&*`o`l#ERq=IF)mGX-U2d`*`=y9~Shxy~P-f!SZG) z@lH3y7YnbR$I&dz%vniE)YKF;E#u=gU%w)2QA(l@aHe}^W{isK*`}Zy!}+9P_#J*? za3mHI4*P4Uxu~?X`(gMOKaSV(mg?-vrRw?N(e^{RmQPCt8v{~OW&kX0L#Rs5TwK01 zk%?xxc9^mF?pdy0wmtLrK6|^I9^Xa1ETCCtk|L6YQ*+c@ws!^10=FH=MCYg^*qCu7 z1_jB%;dfkNT8CcCR7sS06y)S=J9M#L$oC&V4z+65Sf~2x&q{C{{0)iv`ub#KWZwj1 zJ0~aW3JX8gqQ<>HzU%*`Ss2-`IkA&~^+6lqrKKfd;aGs* z5cM8mwJ6$)A`@w9YP@0pW(ezME|d1FlifLCVW; z58-=CNsHjeOscY+Z1BMXQueR9TxT@laU5=j0a*hfyFhp7(%3!^H8|1^W zHs@_CPd5YC$?czyYzT>ALftg=-{P1f%;qoEwJz zdH%<%(ceFbUQo!XKRt4`A&wG*htN`vcH1A$r=O|YtD*1sppYe&oIE|y6SpffuiHQ;51b6%s)A0DQH#lF8 ztdFp;y#HWP3LN#8SJ_ZRYBC95b(J3G5|$PH_AI~qDtIXa~>1Gj^N z^H*C2=H}+gSV5L%w$yZVGb3XO+L30JG!HF020N5eUt_g^)EVSCI9v;1mDU}3*w4loi2IDmGI7T>f1fAU(LnY1dQwdhq zgA$9;dZ!?na(yJRBR~L$8Oie+T3J}M20y+b1bc9K5~D#GK-}7JPHcG)&%4kbR`0xk zlOxkoT2*CS?RWV*@CGM3$ht6lTuz*lMgpX>^O;P_foIF>>veMneK&mmq(ie&sd0!J zfmh?D*{x4NA1O6?l|Sau`tELx=QW9_xF`!7i)yOi`_JcE{8?H>;iw0pxIPxi)P+I( z5ADmVtMk0l71fIjd@p-M2>5!pMON2crfZzfkG6B5{WFn_a#i+I3Utr39{yQ(*-4e^ zisxT3eboQHq2V&A(k?_mKQ@e0h`RuD&^M&?rR904R+ggB+nS9L%{R4P6``T{%%sGf zLqo1(+cN~T+TFjqQ$+gO+CDHM&uu2km&%vAsCbfRL{`bp-aR#*s49=pRB7PT&_x(CjK4ha_3YJ2Mg> zrQzk}U6V?5c60Ft3Hw5RK04<%9i1RhTd%`pQ1ER~iir9KqU4DkxM@{^(h0b9=jD(el^}rU4t_%i9FO;USDq z0Pgl}vP&>dDom+AUoJAdC4Mijq9QAv7oQLxL{)ZXf_R+*{e`v&Or5X9#1EsAC&$J{N4qR`M5XQT*YM{47=LKL zzOk{fvNAT(SK|0u^cEwU9+*LwwQ5>%dmmd+9wY%#WpP znAxr`Egf3qscU#_Pv@vmEF-c}^gJNJ?=5`pees%)j}Jy8a)d_^+a4tmotzvO=YIBQ z4Wy|;c^W3)Uq?Cku^b&8ffFJXr2odo;JYE{?Uy^8x&9lOStkBl52PBUi{LSA1^OlQ z65iiRtQ5&Tk{Ycv)H5EB>bGI`>fWrV7bdm-n}~x9z7Y&7+i%50ZmE5;cgM z{sam4VWlhxxU4D(c-~2yT9#IpWKbw{aRpoypaF%_s=x=v?kLKoT1a7kU8 zrutC#>COf1`@@Z~rqfZwI>(jA@Xpq!#!*WHbXPy|@gfA^(d88tdEbwy<&1itnB3z> zd|M6F5cWq|zwSvDQnX^nuX4bs`&0jaV0NRSw$^}sE~tj*wC?2OmW3iSXWO^&F9j6f_4mWS82HQhTaB~$T;r& zAfC<@IwkYA@R=IZpm3T*5&x?TuLBEBLJ5g_?x)557*AK*k*{A$BgF+Mgb*}lW^aRn z+^0K03OP79B+riq^xQpDe|?1RH(|l(zhm4$mVCODVB$9MmLT=XXr_E9U{nXD{g>zG zGtGShYM(WPhKH1umiAlX17`I4RS&f@cd6NuGSg-WunxzQ3)giSB-OX{R4ED`#FqsH zCMG69K_U5`y;YmZGrz;<_3=!lnb2m}KB?mtV(HcL_W=O`@7~><^N{3YWc*^S0R~~F zY!CNH*;Ci26SaXxHo$OSO_b;G87ir&CR33xPKP^U>f%xxo05`}wx)?yk#_`Ibo0si zjlM1@WHK>}_@3rGlen5W#taP+7Y|lrv~OywLd+Gy@W!?#)(wh0el2#wKN5$QcikqU z=i%eZ%)8GaA#pw)LJC4JY4h9n_(g?*VM8jv0_hY{< z*U4KGvRbW)0*n_)%SYhlFHX+S7c%68|Hut?wXD5hSo8|pckuRV*8fOEN7U9PE-p&B zpPGb1bzEI4oSD6R`P|r89nb#)$$M2Ra&StR1O$@Fm_X2Agg#hb*+OEh|Q+#w(C0!AzfYC*>q;LCMLFe2*r2 zaJ)1|J7d`Y_A7wY0GsNOn@s|r(Vz1C^78U1W`$M10ht}pTwPXlS^o19DT55Ln8aKc zm#B>l5A%c~0h28jo%~8vq9esDf@>!)jRTvLEn16N(c8yo!#OBFKmUiUtaq(jdc9)} z)#ZSmo<3V%w&rbZRhAOfzNK4_1=IC)$HM7_ za#O3`Y;R74lr*ldE(+TnZ4P_;EW0Bf|J)RF75CU&J^nMK6&3YfQr=jEm6a7Li?isz zb2S4D&$r$!f2Uqfk1H-Bq7QJcKN@_F@d$>U?EqI8!N$(c3Qh|)@$f#5C&WerZ`1{X0s1O&+nlT8Y{giQsQnlV^#Jd{@3T%=YKwZy12Ob`ST~h*xfPg z8dg@uyu3MT8}Kyi)QNg)Vu1H<9vq5b2&hF%Nu*_la@9URw6`_4^I5rsjEszsEiH|e zm|R~TV@ix0{&F2U4^hQ_eu{)^9#oNL#9i&}?3Gt0q($1CWmRT-ySp8|y}3l0I^0fa z);)-K!$iYKXW__2(*P=ZiJ;J zD48z7#~M8c*lVQfONdQK!0LCiUd$_vZEvT5lCjW8U)^)fD>czHs~w$a$RYZG{tt;WZ(|_031WGY`LQE0}+h^ z9dzuHiwwMR(R?GG_waa{9+Le`Zu~B(&{E~tmm4yG1Y3yXrr>>U_Ue@?Cq!FSx5BFT z!nQq}oYz1TF91q9a&UP@7aT@NM3f8ts|EY_27qwEd17N}DgWT_1E4ITuBwbjOq}=6 z015X=u(3}iJR}G5Nk{&wN=PlbYoX9)Z8z$+IUZ#T$wqx)`+nhKWwi`2gwMx!yTZ23 zGP@r_#g$bwFo01Wlkm9M@8Z{$(*#irpeJw^=+p(3m0|p^eK&su0T(4SQ6(iM_4GV; zUFqG!6V?6%4JuYoc|>>rzCRBus}w+a?0KoPG7eMUUK)ysfYJ-QxcmOm5fMIN982fu zXcb8Kgj3SUN*C__)Dyl=(m$CZA}fpU|<{Nm_v=L z!N?16(;-zpxYbg$Lv4dJTtPh9bdl&%ytd~y5A{YLE*#E_9ftFb?_R1ixLsuIkiFK zDgQv;JLHgJW?tExcz1HL(|CFG^F2N^`;n-G1Tm$k0E2+jZgZe+5H!d*g0w02l@kG> b)`fJSPu+&YUQ9Ovzj*r})1g@R literal 0 HcmV?d00001 diff --git a/src/torchprune/torchprune/util/external/ffjord/imgs/maple_leaf.jpg b/src/torchprune/torchprune/util/external/ffjord/imgs/maple_leaf.jpg new file mode 100644 index 0000000000000000000000000000000000000000..05bcc192068a0d39f7836b93cbfa80898e7d9960 GIT binary patch literal 55459 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

+DvV&(6h%w0~l4L#}uOT!2gnn3K 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
MeeLP`kd`nua|P9V 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 DSA#5| literal 0 HcmV?d00001 diff --git a/src/torchprune/torchprune/util/external/ffjord/train_cnf.py b/src/torchprune/torchprune/util/external/ffjord/train_cnf.py new file mode 100644 index 0000000..afbc364 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/train_cnf.py @@ -0,0 +1,444 @@ +import argparse +import os +import time +import numpy as np + +import torch +import torch.optim as optim +import torchvision.datasets as dset +import torchvision.transforms as tforms +from torchvision.utils import save_image + +import lib.layers as layers +import lib.utils as utils +import lib.odenvp as odenvp +import lib.multiscale_parallel as multiscale_parallel + +from train_misc import standard_normal_logprob +from train_misc import set_cnf_options, count_nfe, count_parameters, count_total_time +from train_misc import add_spectral_norm, spectral_norm_power_iteration +from train_misc import create_regularization_fns, get_regularization, append_regularization_to_log + +# go fast boi!! +torch.backends.cudnn.benchmark = True +SOLVERS = ["dopri5", "bdf", "rk4", "midpoint", 'adams', 'explicit_adams'] +parser = argparse.ArgumentParser("Continuous Normalizing Flow") +parser.add_argument("--data", choices=["mnist", "svhn", "cifar10", 'lsun_church'], type=str, default="mnist") +parser.add_argument("--dims", type=str, default="8,32,32,8") +parser.add_argument("--strides", type=str, default="2,2,1,-2,-2") +parser.add_argument("--num_blocks", type=int, default=1, help='Number of stacked CNFs.') + +parser.add_argument("--conv", type=eval, default=True, choices=[True, False]) +parser.add_argument( + "--layer_type", type=str, default="ignore", + choices=["ignore", "concat", "concat_v2", "squash", "concatsquash", "concatcoord", "hyper", "blend"] +) +parser.add_argument("--divergence_fn", type=str, default="approximate", choices=["brute_force", "approximate"]) +parser.add_argument( + "--nonlinearity", type=str, default="softplus", choices=["tanh", "relu", "softplus", "elu", "swish"] +) +parser.add_argument('--solver', type=str, default='dopri5', choices=SOLVERS) +parser.add_argument('--atol', type=float, default=1e-5) +parser.add_argument('--rtol', type=float, default=1e-5) +parser.add_argument("--step_size", type=float, default=None, help="Optional fixed step size.") + +parser.add_argument('--test_solver', type=str, default=None, choices=SOLVERS + [None]) +parser.add_argument('--test_atol', type=float, default=None) +parser.add_argument('--test_rtol', type=float, default=None) + +parser.add_argument("--imagesize", type=int, default=None) +parser.add_argument("--alpha", type=float, default=1e-6) +parser.add_argument('--time_length', type=float, default=1.0) +parser.add_argument('--train_T', type=eval, default=True) + +parser.add_argument("--num_epochs", type=int, default=1000) +parser.add_argument("--batch_size", type=int, default=200) +parser.add_argument( + "--batch_size_schedule", type=str, default="", help="Increases the batchsize at every given epoch, dash separated." +) +parser.add_argument("--test_batch_size", type=int, default=200) +parser.add_argument("--lr", type=float, default=1e-3) +parser.add_argument("--warmup_iters", type=float, default=1000) +parser.add_argument("--weight_decay", type=float, default=0.0) +parser.add_argument("--spectral_norm_niter", type=int, default=10) + +parser.add_argument("--add_noise", type=eval, default=True, choices=[True, False]) +parser.add_argument("--batch_norm", type=eval, default=False, choices=[True, False]) +parser.add_argument('--residual', type=eval, default=False, choices=[True, False]) +parser.add_argument('--autoencode', type=eval, default=False, choices=[True, False]) +parser.add_argument('--rademacher', type=eval, default=True, choices=[True, False]) +parser.add_argument('--spectral_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--multiscale', type=eval, default=False, choices=[True, False]) +parser.add_argument('--parallel', type=eval, default=False, choices=[True, False]) + +# Regularizations +parser.add_argument('--l1int', type=float, default=None, help="int_t ||f||_1") +parser.add_argument('--l2int', type=float, default=None, help="int_t ||f||_2") +parser.add_argument('--dl2int', type=float, default=None, help="int_t ||f^T df/dt||_2") +parser.add_argument('--JFrobint', type=float, default=None, help="int_t ||df/dx||_F") +parser.add_argument('--JdiagFrobint', type=float, default=None, help="int_t ||df_i/dx_i||_F") +parser.add_argument('--JoffdiagFrobint', type=float, default=None, help="int_t ||df/dx - df_i/dx_i||_F") + +parser.add_argument("--time_penalty", type=float, default=0, help="Regularization on the end_time.") +parser.add_argument( + "--max_grad_norm", type=float, default=1e10, + help="Max norm of graidents (default is just stupidly high to avoid any clipping)" +) + +parser.add_argument("--begin_epoch", type=int, default=1) +parser.add_argument("--resume", type=str, default=None) +parser.add_argument("--save", type=str, default="experiments/cnf") +parser.add_argument("--val_freq", type=int, default=1) +parser.add_argument("--log_freq", type=int, default=10) + +args = parser.parse_args() + +# logger +utils.makedirs(args.save) +logger = utils.get_logger(logpath=os.path.join(args.save, 'logs'), filepath=os.path.abspath(__file__)) + +if args.layer_type == "blend": + logger.info("!! Setting time_length from None to 1.0 due to use of Blend layers.") + args.time_length = 1.0 + +logger.info(args) + + +def add_noise(x): + """ + [0, 1] -> [0, 255] -> add noise -> [0, 1] + """ + if args.add_noise: + noise = x.new().resize_as_(x).uniform_() + x = x * 255 + noise + x = x / 256 + return x + + +def update_lr(optimizer, itr): + iter_frac = min(float(itr + 1) / max(args.warmup_iters, 1), 1.0) + lr = args.lr * iter_frac + for param_group in optimizer.param_groups: + param_group["lr"] = lr + + +def get_train_loader(train_set, epoch): + if args.batch_size_schedule != "": + epochs = [0] + list(map(int, args.batch_size_schedule.split("-"))) + n_passed = sum(np.array(epochs) <= epoch) + current_batch_size = int(args.batch_size * n_passed) + else: + current_batch_size = args.batch_size + train_loader = torch.utils.data.DataLoader( + dataset=train_set, batch_size=current_batch_size, shuffle=True, drop_last=True, pin_memory=True + ) + logger.info("===> Using batch size {}. Total {} iterations/epoch.".format(current_batch_size, len(train_loader))) + return train_loader + + +def get_dataset(args): + trans = lambda im_size: tforms.Compose([tforms.Resize(im_size), tforms.ToTensor(), add_noise]) + + if args.data == "mnist": + im_dim = 1 + im_size = 28 if args.imagesize is None else args.imagesize + train_set = dset.MNIST(root="./data", train=True, transform=trans(im_size), download=True) + test_set = dset.MNIST(root="./data", train=False, transform=trans(im_size), download=True) + elif args.data == "svhn": + im_dim = 3 + im_size = 32 if args.imagesize is None else args.imagesize + train_set = dset.SVHN(root="./data", split="train", transform=trans(im_size), download=True) + test_set = dset.SVHN(root="./data", split="test", transform=trans(im_size), download=True) + elif args.data == "cifar10": + im_dim = 3 + im_size = 32 if args.imagesize is None else args.imagesize + train_set = dset.CIFAR10( + root="./data", train=True, transform=tforms.Compose([ + tforms.Resize(im_size), + tforms.RandomHorizontalFlip(), + tforms.ToTensor(), + add_noise, + ]), download=True + ) + test_set = dset.CIFAR10(root="./data", train=False, transform=trans(im_size), download=True) + elif args.data == 'celeba': + im_dim = 3 + im_size = 64 if args.imagesize is None else args.imagesize + train_set = dset.CelebA( + train=True, transform=tforms.Compose([ + tforms.ToPILImage(), + tforms.Resize(im_size), + tforms.RandomHorizontalFlip(), + tforms.ToTensor(), + add_noise, + ]) + ) + test_set = dset.CelebA( + train=False, transform=tforms.Compose([ + tforms.ToPILImage(), + tforms.Resize(im_size), + tforms.ToTensor(), + add_noise, + ]) + ) + elif args.data == 'lsun_church': + im_dim = 3 + im_size = 64 if args.imagesize is None else args.imagesize + train_set = dset.LSUN( + 'data', ['church_outdoor_train'], transform=tforms.Compose([ + tforms.Resize(96), + tforms.RandomCrop(64), + tforms.Resize(im_size), + tforms.ToTensor(), + add_noise, + ]) + ) + test_set = dset.LSUN( + 'data', ['church_outdoor_val'], transform=tforms.Compose([ + tforms.Resize(96), + tforms.RandomCrop(64), + tforms.Resize(im_size), + tforms.ToTensor(), + add_noise, + ]) + ) + data_shape = (im_dim, im_size, im_size) + if not args.conv: + data_shape = (im_dim * im_size * im_size,) + + test_loader = torch.utils.data.DataLoader( + dataset=test_set, batch_size=args.test_batch_size, shuffle=False, drop_last=True + ) + return train_set, test_loader, data_shape + + +def compute_bits_per_dim(x, model): + zero = torch.zeros(x.shape[0], 1).to(x) + + # Don't use data parallelize if batch size is small. + # if x.shape[0] < 200: + # model = model.module + + z, delta_logp = model(x, zero) # run model forward + + logpz = standard_normal_logprob(z).view(z.shape[0], -1).sum(1, keepdim=True) # logp(z) + logpx = logpz - delta_logp + + logpx_per_dim = torch.sum(logpx) / x.nelement() # averaged over batches + bits_per_dim = -(logpx_per_dim - np.log(256)) / np.log(2) + + return bits_per_dim + + +def create_model(args, data_shape, regularization_fns): + hidden_dims = tuple(map(int, args.dims.split(","))) + strides = tuple(map(int, args.strides.split(","))) + + if args.multiscale: + model = odenvp.ODENVP( + (args.batch_size, *data_shape), + n_blocks=args.num_blocks, + intermediate_dims=hidden_dims, + nonlinearity=args.nonlinearity, + alpha=args.alpha, + cnf_kwargs={"T": args.time_length, "train_T": args.train_T, "regularization_fns": regularization_fns}, + ) + elif args.parallel: + model = multiscale_parallel.MultiscaleParallelCNF( + (args.batch_size, *data_shape), + n_blocks=args.num_blocks, + intermediate_dims=hidden_dims, + alpha=args.alpha, + time_length=args.time_length, + ) + else: + if args.autoencode: + + def build_cnf(): + autoencoder_diffeq = layers.AutoencoderDiffEqNet( + hidden_dims=hidden_dims, + input_shape=data_shape, + strides=strides, + conv=args.conv, + layer_type=args.layer_type, + nonlinearity=args.nonlinearity, + ) + odefunc = layers.AutoencoderODEfunc( + autoencoder_diffeq=autoencoder_diffeq, + divergence_fn=args.divergence_fn, + residual=args.residual, + rademacher=args.rademacher, + ) + cnf = layers.CNF( + odefunc=odefunc, + T=args.time_length, + regularization_fns=regularization_fns, + solver=args.solver, + ) + return cnf + else: + + def build_cnf(): + diffeq = layers.ODEnet( + hidden_dims=hidden_dims, + input_shape=data_shape, + strides=strides, + conv=args.conv, + layer_type=args.layer_type, + nonlinearity=args.nonlinearity, + ) + odefunc = layers.ODEfunc( + diffeq=diffeq, + divergence_fn=args.divergence_fn, + residual=args.residual, + rademacher=args.rademacher, + ) + cnf = layers.CNF( + odefunc=odefunc, + T=args.time_length, + train_T=args.train_T, + regularization_fns=regularization_fns, + solver=args.solver, + ) + return cnf + + chain = [layers.LogitTransform(alpha=args.alpha)] if args.alpha > 0 else [layers.ZeroMeanTransform()] + chain = chain + [build_cnf() for _ in range(args.num_blocks)] + if args.batch_norm: + chain.append(layers.MovingBatchNorm2d(data_shape[0])) + model = layers.SequentialFlow(chain) + return model + + +if __name__ == "__main__": + + # get deivce + device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + cvt = lambda x: x.type(torch.float32).to(device, non_blocking=True) + + # load dataset + train_set, test_loader, data_shape = get_dataset(args) + + # build model + regularization_fns, regularization_coeffs = create_regularization_fns(args) + model = create_model(args, data_shape, regularization_fns) + + if args.spectral_norm: add_spectral_norm(model, logger) + set_cnf_options(args, model) + + logger.info(model) + logger.info("Number of trainable parameters: {}".format(count_parameters(model))) + + # optimizer + optimizer = optim.Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay) + + # restore parameters + if args.resume is not None: + checkpt = torch.load(args.resume, map_location=lambda storage, loc: storage) + model.load_state_dict(checkpt["state_dict"]) + if "optim_state_dict" in checkpt.keys(): + optimizer.load_state_dict(checkpt["optim_state_dict"]) + # Manually move optimizer state to device. + for state in optimizer.state.values(): + for k, v in state.items(): + if torch.is_tensor(v): + state[k] = cvt(v) + + if torch.cuda.is_available(): + model = torch.nn.DataParallel(model).cuda() + + # For visualization. + fixed_z = cvt(torch.randn(100, *data_shape)) + + time_meter = utils.RunningAverageMeter(0.97) + loss_meter = utils.RunningAverageMeter(0.97) + steps_meter = utils.RunningAverageMeter(0.97) + grad_meter = utils.RunningAverageMeter(0.97) + tt_meter = utils.RunningAverageMeter(0.97) + + if args.spectral_norm and not args.resume: spectral_norm_power_iteration(model, 500) + + best_loss = float("inf") + itr = 0 + for epoch in range(args.begin_epoch, args.num_epochs + 1): + model.train() + train_loader = get_train_loader(train_set, epoch) + for _, (x, y) in enumerate(train_loader): + start = time.time() + update_lr(optimizer, itr) + optimizer.zero_grad() + + if not args.conv: + x = x.view(x.shape[0], -1) + + # cast data and move to device + x = cvt(x) + # compute loss + loss = compute_bits_per_dim(x, model) + if regularization_coeffs: + reg_states = get_regularization(model, regularization_coeffs) + reg_loss = sum( + reg_state * coeff for reg_state, coeff in zip(reg_states, regularization_coeffs) if coeff != 0 + ) + loss = loss + reg_loss + total_time = count_total_time(model) + loss = loss + total_time * args.time_penalty + + loss.backward() + grad_norm = torch.nn.utils.clip_grad_norm_(model.parameters(), args.max_grad_norm) + + optimizer.step() + + if args.spectral_norm: spectral_norm_power_iteration(model, args.spectral_norm_niter) + + time_meter.update(time.time() - start) + loss_meter.update(loss.item()) + steps_meter.update(count_nfe(model)) + grad_meter.update(grad_norm) + tt_meter.update(total_time) + + if itr % args.log_freq == 0: + log_message = ( + "Iter {:04d} | Time {:.4f}({:.4f}) | Bit/dim {:.4f}({:.4f}) | " + "Steps {:.0f}({:.2f}) | Grad Norm {:.4f}({:.4f}) | Total Time {:.2f}({:.2f})".format( + itr, time_meter.val, time_meter.avg, loss_meter.val, loss_meter.avg, steps_meter.val, + steps_meter.avg, grad_meter.val, grad_meter.avg, tt_meter.val, tt_meter.avg + ) + ) + if regularization_coeffs: + log_message = append_regularization_to_log(log_message, regularization_fns, reg_states) + logger.info(log_message) + + itr += 1 + + # compute test loss + model.eval() + if epoch % args.val_freq == 0: + with torch.no_grad(): + start = time.time() + logger.info("validating...") + losses = [] + for (x, y) in test_loader: + if not args.conv: + x = x.view(x.shape[0], -1) + x = cvt(x) + loss = compute_bits_per_dim(x, model) + losses.append(loss) + + loss = np.mean(losses) + logger.info("Epoch {:04d} | Time {:.4f}, Bit/dim {:.4f}".format(epoch, time.time() - start, loss)) + if loss < best_loss: + best_loss = loss + utils.makedirs(args.save) + torch.save({ + "args": args, + "state_dict": model.module.state_dict() if torch.cuda.is_available() else model.state_dict(), + "optim_state_dict": optimizer.state_dict(), + }, os.path.join(args.save, "checkpt.pth")) + + # visualize samples and density + with torch.no_grad(): + fig_filename = os.path.join(args.save, "figs", "{:04d}.jpg".format(epoch)) + utils.makedirs(os.path.dirname(fig_filename)) + generated_samples = model(fixed_z, reverse=True).view(-1, *data_shape) + save_image(generated_samples, fig_filename, nrow=10) diff --git a/src/torchprune/torchprune/util/external/ffjord/train_discrete_tabular.py b/src/torchprune/torchprune/util/external/ffjord/train_discrete_tabular.py new file mode 100644 index 0000000..4492842 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/train_discrete_tabular.py @@ -0,0 +1,235 @@ +import argparse +import os +import time + +import torch + +import lib.utils as utils +from lib.custom_optimizers import Adam +import lib.layers as layers + +import datasets + +from train_misc import standard_normal_logprob, count_parameters + +parser = argparse.ArgumentParser() +parser.add_argument( + '--data', choices=['power', 'gas', 'hepmass', 'miniboone', 'bsds300'], type=str, default='miniboone' +) + +parser.add_argument('--depth', type=int, default=10) +parser.add_argument('--dims', type=str, default="100-100") +parser.add_argument('--nonlinearity', type=str, default="tanh") +parser.add_argument('--glow', type=eval, default=False, choices=[True, False]) +parser.add_argument('--batch_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--bn_lag', type=float, default=0) + +parser.add_argument('--early_stopping', type=int, default=30) +parser.add_argument('--batch_size', type=int, default=1000) +parser.add_argument('--test_batch_size', type=int, default=None) +parser.add_argument('--lr', type=float, default=1e-4) +parser.add_argument('--weight_decay', type=float, default=1e-6) + +parser.add_argument('--resume', type=str, default=None) +parser.add_argument('--save', type=str, default='experiments/cnf') +parser.add_argument('--evaluate', action='store_true') +parser.add_argument('--val_freq', type=int, default=200) +parser.add_argument('--log_freq', type=int, default=10) +args = parser.parse_args() + +# logger +utils.makedirs(args.save) +logger = utils.get_logger(logpath=os.path.join(args.save, 'logs'), filepath=os.path.abspath(__file__)) +logger.info(args) + +test_batch_size = args.test_batch_size if args.test_batch_size else args.batch_size + + +def batch_iter(X, batch_size=args.batch_size, shuffle=False): + """ + X: feature tensor (shape: num_instances x num_features) + """ + if shuffle: + idxs = torch.randperm(X.shape[0]) + else: + idxs = torch.arange(X.shape[0]) + if X.is_cuda: + idxs = idxs.cuda() + for batch_idxs in idxs.split(batch_size): + yield X[batch_idxs] + + +ndecs = 0 + + +def update_lr(optimizer, n_vals_without_improvement): + global ndecs + if ndecs == 0 and n_vals_without_improvement > args.early_stopping // 3: + for param_group in optimizer.param_groups: + param_group["lr"] = args.lr / 10 + ndecs = 1 + elif ndecs == 1 and n_vals_without_improvement > args.early_stopping // 3 * 2: + for param_group in optimizer.param_groups: + param_group["lr"] = args.lr / 100 + ndecs = 2 + else: + for param_group in optimizer.param_groups: + param_group["lr"] = args.lr / 10**ndecs + + +def load_data(name): + + if name == 'bsds300': + return datasets.BSDS300() + + elif name == 'power': + return datasets.POWER() + + elif name == 'gas': + return datasets.GAS() + + elif name == 'hepmass': + return datasets.HEPMASS() + + elif name == 'miniboone': + return datasets.MINIBOONE() + + else: + raise ValueError('Unknown dataset') + + +def build_model(input_dim): + hidden_dims = tuple(map(int, args.dims.split("-"))) + chain = [] + for i in range(args.depth): + if args.glow: chain.append(layers.BruteForceLayer(input_dim)) + chain.append(layers.MaskedCouplingLayer(input_dim, hidden_dims, 'alternate', swap=i % 2 == 0)) + if args.batch_norm: chain.append(layers.MovingBatchNorm1d(input_dim, bn_lag=args.bn_lag)) + return layers.SequentialFlow(chain) + + +def compute_loss(x, model): + zero = torch.zeros(x.shape[0], 1).to(x) + + z, delta_logp = model(x, zero) # run model forward + + logpz = standard_normal_logprob(z).view(z.shape[0], -1).sum(1, keepdim=True) # logp(z) + logpx = logpz - delta_logp + loss = -torch.mean(logpx) + return loss + + +def restore_model(model, filename): + checkpt = torch.load(filename, map_location=lambda storage, loc: storage) + model.load_state_dict(checkpt["state_dict"]) + return model + + +if __name__ == '__main__': + + device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + cvt = lambda x: x.type(torch.float32).to(device, non_blocking=True) + + logger.info('Using {} GPUs.'.format(torch.cuda.device_count())) + + data = load_data(args.data) + data.trn.x = torch.from_numpy(data.trn.x) + data.val.x = torch.from_numpy(data.val.x) + data.tst.x = torch.from_numpy(data.tst.x) + + model = build_model(data.n_dims).to(device) + + if args.resume is not None: + checkpt = torch.load(args.resume) + model.load_state_dict(checkpt['state_dict']) + + logger.info(model) + logger.info("Number of trainable parameters: {}".format(count_parameters(model))) + + if not args.evaluate: + optimizer = Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay) + + time_meter = utils.RunningAverageMeter(0.98) + loss_meter = utils.RunningAverageMeter(0.98) + + best_loss = float('inf') + itr = 0 + n_vals_without_improvement = 0 + end = time.time() + model.train() + while True: + if args.early_stopping > 0 and n_vals_without_improvement > args.early_stopping: + break + + for x in batch_iter(data.trn.x, shuffle=True): + if args.early_stopping > 0 and n_vals_without_improvement > args.early_stopping: + break + + optimizer.zero_grad() + + x = cvt(x) + loss = compute_loss(x, model) + loss_meter.update(loss.item()) + + loss.backward() + optimizer.step() + + time_meter.update(time.time() - end) + + if itr % args.log_freq == 0: + log_message = ( + 'Iter {:06d} | Epoch {:.2f} | Time {:.4f}({:.4f}) | Loss {:.6f}({:.6f}) | '.format( + itr, + float(itr) / (data.trn.x.shape[0] / float(args.batch_size)), time_meter.val, time_meter.avg, + loss_meter.val, loss_meter.avg + ) + ) + logger.info(log_message) + itr += 1 + end = time.time() + + # Validation loop. + if itr % args.val_freq == 0: + model.eval() + start_time = time.time() + with torch.no_grad(): + val_loss = utils.AverageMeter() + for x in batch_iter(data.val.x, batch_size=test_batch_size): + x = cvt(x) + val_loss.update(compute_loss(x, model).item(), x.shape[0]) + + if val_loss.avg < best_loss: + best_loss = val_loss.avg + utils.makedirs(args.save) + torch.save({ + 'args': args, + 'state_dict': model.state_dict(), + }, os.path.join(args.save, 'checkpt.pth')) + n_vals_without_improvement = 0 + else: + n_vals_without_improvement += 1 + update_lr(optimizer, n_vals_without_improvement) + + log_message = ( + '[VAL] Iter {:06d} | Val Loss {:.6f} | ' + 'NoImproveEpochs {:02d}/{:02d}'.format( + itr, val_loss.avg, n_vals_without_improvement, args.early_stopping + ) + ) + logger.info(log_message) + model.train() + + logger.info('Training has finished.') + model = restore_model(model, os.path.join(args.save, 'checkpt.pth')).to(device) + + logger.info('Evaluating model on test set.') + model.eval() + + with torch.no_grad(): + test_loss = utils.AverageMeter() + for itr, x in enumerate(batch_iter(data.tst.x, batch_size=test_batch_size)): + x = cvt(x) + test_loss.update(compute_loss(x, model).item(), x.shape[0]) + logger.info('Progress: {:.2f}%'.format(itr / (data.tst.x.shape[0] / test_batch_size))) + log_message = '[TEST] Iter {:06d} | Test Loss {:.6f} '.format(itr, test_loss.avg) + logger.info(log_message) diff --git a/src/torchprune/torchprune/util/external/ffjord/train_discrete_toy.py b/src/torchprune/torchprune/util/external/ffjord/train_discrete_toy.py new file mode 100644 index 0000000..afa536e --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/train_discrete_toy.py @@ -0,0 +1,186 @@ +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt + +import argparse +import os +import time + +import torch +import torch.optim as optim + +import lib.layers as layers +import lib.toy_data as toy_data +import lib.utils as utils +from lib.visualize_flow import visualize_transform + +from train_misc import standard_normal_logprob +from train_misc import count_parameters + +SOLVERS = ["dopri5", "bdf", "rk4", "midpoint", 'adams', 'explicit_adams', 'fixed_adams'] +parser = argparse.ArgumentParser('Continuous Normalizing Flow') +parser.add_argument( + '--data', choices=['swissroll', '8gaussians', 'pinwheel', 'circles', 'moons', '2spirals', 'checkerboard', 'rings'], + type=str, default='pinwheel' +) + +parser.add_argument('--depth', help='number of coupling layers', type=int, default=10) +parser.add_argument('--glow', type=eval, choices=[True, False], default=False) +parser.add_argument('--nf', type=eval, choices=[True, False], default=False) + +parser.add_argument('--niters', type=int, default=100001) +parser.add_argument('--batch_size', type=int, default=100) +parser.add_argument('--test_batch_size', type=int, default=1000) +parser.add_argument('--lr', type=float, default=1e-4) +parser.add_argument('--weight_decay', type=float, default=0) + +# Track quantities +parser.add_argument('--l1int', type=float, default=None, help="int_t ||f||_1") +parser.add_argument('--l2int', type=float, default=None, help="int_t ||f||_2") +parser.add_argument('--dl2int', type=float, default=None, help="int_t ||f^T df/dt||_2") +parser.add_argument('--JFrobint', type=float, default=None, help="int_t ||df/dx||_F") +parser.add_argument('--JdiagFrobint', type=float, default=None, help="int_t ||df_i/dx_i||_F") +parser.add_argument('--JoffdiagFrobint', type=float, default=None, help="int_t ||df/dx - df_i/dx_i||_F") + +parser.add_argument('--save', type=str, default='experiments/cnf') +parser.add_argument('--viz_freq', type=int, default=1000) +parser.add_argument('--val_freq', type=int, default=1000) +parser.add_argument('--log_freq', type=int, default=100) +parser.add_argument('--gpu', type=int, default=0) +args = parser.parse_args() + +# logger +utils.makedirs(args.save) +logger = utils.get_logger(logpath=os.path.join(args.save, 'logs'), filepath=os.path.abspath(__file__)) + +logger.info(args) + +device = torch.device('cuda:' + str(args.gpu) if torch.cuda.is_available() else 'cpu') + + +def construct_model(): + + if args.nf: + chain = [] + for i in range(args.depth): + chain.append(layers.PlanarFlow(2)) + return layers.SequentialFlow(chain) + else: + chain = [] + for i in range(args.depth): + if args.glow: chain.append(layers.BruteForceLayer(2)) + chain.append(layers.CouplingLayer(2, swap=i % 2 == 0)) + return layers.SequentialFlow(chain) + + +def get_transforms(model): + + if args.nf: + sample_fn = None + else: + + def sample_fn(z, logpz=None): + if logpz is not None: + return model(z, logpz, reverse=True) + else: + return model(z, reverse=True) + + def density_fn(x, logpx=None): + if logpx is not None: + return model(x, logpx, reverse=False) + else: + return model(x, reverse=False) + + return sample_fn, density_fn + + +def compute_loss(args, model, batch_size=None): + if batch_size is None: batch_size = args.batch_size + + # load data + x = toy_data.inf_train_gen(args.data, batch_size=batch_size) + x = torch.from_numpy(x).type(torch.float32).to(device) + zero = torch.zeros(x.shape[0], 1).to(x) + + # transform to z + z, delta_logp = model(x, zero) + + # compute log q(z) + logpz = standard_normal_logprob(z).sum(1, keepdim=True) + + logpx = logpz - delta_logp + loss = -torch.mean(logpx) + return loss + + +if __name__ == '__main__': + + model = construct_model().to(device) + + logger.info(model) + logger.info("Number of trainable parameters: {}".format(count_parameters(model))) + + optimizer = optim.Adamax(model.parameters(), lr=args.lr, weight_decay=args.weight_decay) + + time_meter = utils.RunningAverageMeter(0.98) + loss_meter = utils.RunningAverageMeter(0.98) + + end = time.time() + best_loss = float('inf') + model.train() + for itr in range(1, args.niters + 1): + optimizer.zero_grad() + + loss = compute_loss(args, model) + loss_meter.update(loss.item()) + + loss.backward() + optimizer.step() + + time_meter.update(time.time() - end) + + if itr % args.log_freq == 0: + log_message = ( + 'Iter {:04d} | Time {:.4f}({:.4f}) | Loss {:.6f}({:.6f})'.format( + itr, time_meter.val, time_meter.avg, loss_meter.val, loss_meter.avg + ) + ) + logger.info(log_message) + + if itr % args.val_freq == 0 or itr == args.niters: + with torch.no_grad(): + model.eval() + test_loss = compute_loss(args, model, batch_size=args.test_batch_size) + log_message = '[TEST] Iter {:04d} | Test Loss {:.6f}'.format(itr, test_loss) + logger.info(log_message) + + if test_loss.item() < best_loss: + best_loss = test_loss.item() + utils.makedirs(args.save) + torch.save({ + 'args': args, + 'state_dict': model.state_dict(), + }, os.path.join(args.save, 'checkpt.pth')) + model.train() + + if itr % args.viz_freq == 0: + with torch.no_grad(): + model.eval() + p_samples = toy_data.inf_train_gen(args.data, batch_size=2000) + + sample_fn, density_fn = get_transforms(model) + + plt.figure(figsize=(9, 3)) + visualize_transform( + p_samples, torch.randn, standard_normal_logprob, transform=sample_fn, inverse_transform=density_fn, + samples=True, npts=800, device=device + ) + fig_filename = os.path.join(args.save, 'figs', '{:04d}.jpg'.format(itr)) + utils.makedirs(os.path.dirname(fig_filename)) + plt.savefig(fig_filename) + plt.close() + model.train() + + end = time.time() + + logger.info('Training has finished.') diff --git a/src/torchprune/torchprune/util/external/ffjord/train_img2d.py b/src/torchprune/torchprune/util/external/ffjord/train_img2d.py new file mode 100644 index 0000000..5041e25 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/train_img2d.py @@ -0,0 +1,253 @@ +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt + +import argparse +import os +import time + +import torch +import torch.optim as optim + +import lib.utils as utils +from lib.visualize_flow import visualize_transform +import lib.layers.odefunc as odefunc + +from train_misc import standard_normal_logprob +from train_misc import set_cnf_options, count_nfe, count_parameters, count_total_time +from train_misc import add_spectral_norm, spectral_norm_power_iteration +from train_misc import create_regularization_fns, get_regularization, append_regularization_to_log +from train_misc import build_model_tabular + +from diagnostics.viz_toy import save_trajectory, trajectory_to_video + +SOLVERS = ["dopri5", "bdf", "rk4", "midpoint", 'adams', 'explicit_adams', 'fixed_adams'] +parser = argparse.ArgumentParser('Continuous Normalizing Flow') +parser.add_argument('--img', type=str, required=True) +parser.add_argument('--data', type=str, default='dummy') +parser.add_argument( + "--layer_type", type=str, default="concatsquash", + choices=["ignore", "concat", "concat_v2", "squash", "concatsquash", "concatcoord", "hyper", "blend"] +) +parser.add_argument('--dims', type=str, default='64-64-64') +parser.add_argument("--num_blocks", type=int, default=1, help='Number of stacked CNFs.') +parser.add_argument('--time_length', type=float, default=0.5) +parser.add_argument('--train_T', type=eval, default=True) +parser.add_argument("--divergence_fn", type=str, default="brute_force", choices=["brute_force", "approximate"]) +parser.add_argument("--nonlinearity", type=str, default="tanh", choices=odefunc.NONLINEARITIES) + +parser.add_argument('--solver', type=str, default='dopri5', choices=SOLVERS) +parser.add_argument('--atol', type=float, default=1e-5) +parser.add_argument('--rtol', type=float, default=1e-5) +parser.add_argument("--step_size", type=float, default=None, help="Optional fixed step size.") + +parser.add_argument('--test_solver', type=str, default=None, choices=SOLVERS + [None]) +parser.add_argument('--test_atol', type=float, default=None) +parser.add_argument('--test_rtol', type=float, default=None) + +parser.add_argument('--residual', type=eval, default=False, choices=[True, False]) +parser.add_argument('--rademacher', type=eval, default=False, choices=[True, False]) +parser.add_argument('--spectral_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--batch_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--bn_lag', type=float, default=0) + +parser.add_argument('--niters', type=int, default=10000) +parser.add_argument('--batch_size', type=int, default=1000) +parser.add_argument('--test_batch_size', type=int, default=1000) +parser.add_argument('--lr', type=float, default=1e-3) +parser.add_argument('--weight_decay', type=float, default=1e-5) + +# Track quantities +parser.add_argument('--l1int', type=float, default=None, help="int_t ||f||_1") +parser.add_argument('--l2int', type=float, default=None, help="int_t ||f||_2") +parser.add_argument('--dl2int', type=float, default=None, help="int_t ||f^T df/dt||_2") +parser.add_argument('--JFrobint', type=float, default=None, help="int_t ||df/dx||_F") +parser.add_argument('--JdiagFrobint', type=float, default=None, help="int_t ||df_i/dx_i||_F") +parser.add_argument('--JoffdiagFrobint', type=float, default=None, help="int_t ||df/dx - df_i/dx_i||_F") + +parser.add_argument('--save', type=str, default='experiments/cnf') +parser.add_argument('--viz_freq', type=int, default=100) +parser.add_argument('--val_freq', type=int, default=100) +parser.add_argument('--log_freq', type=int, default=10) +parser.add_argument('--gpu', type=int, default=0) +args = parser.parse_args() + +# logger +utils.makedirs(args.save) +logger = utils.get_logger(logpath=os.path.join(args.save, 'logs'), filepath=os.path.abspath(__file__)) + +if args.layer_type == "blend": + logger.info("!! Setting time_length from None to 1.0 due to use of Blend layers.") + args.time_length = 1.0 + +logger.info(args) + +device = torch.device('cuda:' + str(args.gpu) if torch.cuda.is_available() else 'cpu') + +from PIL import Image +import numpy as np + +img = np.array(Image.open(args.img).convert('L')) +h, w = img.shape +xx = np.linspace(-4, 4, w) +yy = np.linspace(-4, 4, h) +xx, yy = np.meshgrid(xx, yy) +xx = xx.reshape(-1, 1) +yy = yy.reshape(-1, 1) + +means = np.concatenate([xx, yy], 1) +img = img.max() - img +probs = img.reshape(-1) / img.sum() + +std = np.array([8 / w / 2, 8 / h / 2]) + + +def sample_data(data=None, rng=None, batch_size=200): + """data and rng are ignored.""" + inds = np.random.choice(int(probs.shape[0]), int(batch_size), p=probs) + m = means[inds] + samples = np.random.randn(*m.shape) * std + m + return samples + + +def get_transforms(model): + + def sample_fn(z, logpz=None): + if logpz is not None: + return model(z, logpz, reverse=True) + else: + return model(z, reverse=True) + + def density_fn(x, logpx=None): + if logpx is not None: + return model(x, logpx, reverse=False) + else: + return model(x, reverse=False) + + return sample_fn, density_fn + + +def compute_loss(args, model, batch_size=None): + if batch_size is None: batch_size = args.batch_size + + # load data + x = sample_data(args.data, batch_size=batch_size) + x = torch.from_numpy(x).type(torch.float32).to(device) + zero = torch.zeros(x.shape[0], 1).to(x) + + # transform to z + z, delta_logp = model(x, zero) + + # compute log q(z) + logpz = standard_normal_logprob(z).sum(1, keepdim=True) + + logpx = logpz - delta_logp + loss = -torch.mean(logpx) + return loss + + +if __name__ == '__main__': + + regularization_fns, regularization_coeffs = create_regularization_fns(args) + model = build_model_tabular(args, 2, regularization_fns).to(device) + if args.spectral_norm: add_spectral_norm(model) + set_cnf_options(args, model) + + logger.info(model) + logger.info("Number of trainable parameters: {}".format(count_parameters(model))) + + optimizer = optim.Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay) + + time_meter = utils.RunningAverageMeter(0.93) + loss_meter = utils.RunningAverageMeter(0.93) + nfef_meter = utils.RunningAverageMeter(0.93) + nfeb_meter = utils.RunningAverageMeter(0.93) + tt_meter = utils.RunningAverageMeter(0.93) + + end = time.time() + best_loss = float('inf') + model.train() + for itr in range(1, args.niters + 1): + optimizer.zero_grad() + if args.spectral_norm: spectral_norm_power_iteration(model, 1) + + loss = compute_loss(args, model) + loss_meter.update(loss.item()) + + if len(regularization_coeffs) > 0: + reg_states = get_regularization(model, regularization_coeffs) + reg_loss = sum( + reg_state * coeff for reg_state, coeff in zip(reg_states, regularization_coeffs) if coeff != 0 + ) + loss = loss + reg_loss + + total_time = count_total_time(model) + nfe_forward = count_nfe(model) + + loss.backward() + optimizer.step() + + nfe_total = count_nfe(model) + nfe_backward = nfe_total - nfe_forward + nfef_meter.update(nfe_forward) + nfeb_meter.update(nfe_backward) + + time_meter.update(time.time() - end) + tt_meter.update(total_time) + + log_message = ( + 'Iter {:04d} | Time {:.4f}({:.4f}) | Loss {:.6f}({:.6f}) | NFE Forward {:.0f}({:.1f})' + ' | NFE Backward {:.0f}({:.1f}) | CNF Time {:.4f}({:.4f})'.format( + itr, time_meter.val, time_meter.avg, loss_meter.val, loss_meter.avg, nfef_meter.val, nfef_meter.avg, + nfeb_meter.val, nfeb_meter.avg, tt_meter.val, tt_meter.avg + ) + ) + if len(regularization_coeffs) > 0: + log_message = append_regularization_to_log(log_message, regularization_fns, reg_states) + + logger.info(log_message) + + if itr % args.val_freq == 0 or itr == args.niters: + with torch.no_grad(): + model.eval() + test_loss = compute_loss(args, model, batch_size=args.test_batch_size) + test_nfe = count_nfe(model) + log_message = '[TEST] Iter {:04d} | Test Loss {:.6f} | NFE {:.0f}'.format(itr, test_loss, test_nfe) + logger.info(log_message) + + if test_loss.item() < best_loss: + best_loss = test_loss.item() + utils.makedirs(args.save) + torch.save({ + 'args': args, + 'state_dict': model.state_dict(), + }, os.path.join(args.save, 'checkpt.pth')) + model.train() + + if itr % args.viz_freq == 0: + with torch.no_grad(): + model.eval() + p_samples = sample_data(args.data, batch_size=2000) + + sample_fn, density_fn = get_transforms(model) + + plt.figure(figsize=(9, 3)) + visualize_transform( + p_samples, torch.randn, standard_normal_logprob, transform=sample_fn, inverse_transform=density_fn, + samples=True, npts=800, device=device + ) + fig_filename = os.path.join(args.save, 'figs', '{:04d}.jpg'.format(itr)) + utils.makedirs(os.path.dirname(fig_filename)) + plt.savefig(fig_filename) + plt.close() + model.train() + + end = time.time() + + logger.info('Training has finished.') + + save_traj_dir = os.path.join(args.save, 'trajectory') + logger.info('Plotting trajectory to {}'.format(save_traj_dir)) + data_samples = sample_data(args.data, batch_size=2000) + save_trajectory(model, data_samples, save_traj_dir, device=device) + trajectory_to_video(save_traj_dir) diff --git a/src/torchprune/torchprune/util/external/ffjord/train_misc.py b/src/torchprune/torchprune/util/external/ffjord/train_misc.py new file mode 100644 index 0000000..d2ee9e1 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/train_misc.py @@ -0,0 +1,200 @@ +import six +import math + +from .lib.layers.wrappers import cnf_regularization as reg_lib +from .lib import spectral_norm as spectral_norm +from .lib import layers as layers +from .lib.layers.odefunc import divergence_bf, divergence_approx + + +def standard_normal_logprob(z): + logZ = -0.5 * math.log(2 * math.pi) + return logZ - z.pow(2) / 2 + + +def set_cnf_options(args, model): + + def _set(module): + if isinstance(module, layers.CNF): + # Set training settings + module.solver = args.solver + module.atol = args.atol + module.rtol = args.rtol + if args.step_size is not None: + module.solver_options['step_size'] = args.step_size + + # If using fixed-grid adams, restrict order to not be too high. + if args.solver in ['fixed_adams', 'explicit_adams']: + module.solver_options['max_order'] = 4 + + # Set the test settings + module.test_solver = args.test_solver if args.test_solver else args.solver + module.test_atol = args.test_atol if args.test_atol else args.atol + module.test_rtol = args.test_rtol if args.test_rtol else args.rtol + + if isinstance(module, layers.ODEfunc): + module.rademacher = args.rademacher + module.residual = args.residual + + model.apply(_set) + + +def override_divergence_fn(model, divergence_fn): + + def _set(module): + if isinstance(module, layers.ODEfunc): + if divergence_fn == "brute_force": + module.divergence_fn = divergence_bf + elif divergence_fn == "approximate": + module.divergence_fn = divergence_approx + + model.apply(_set) + + +def count_nfe(model): + + class AccNumEvals(object): + + def __init__(self): + self.num_evals = 0 + + def __call__(self, module): + if isinstance(module, layers.ODEfunc): + self.num_evals += module.num_evals() + + accumulator = AccNumEvals() + model.apply(accumulator) + return accumulator.num_evals + + +def count_parameters(model): + return sum(p.numel() for p in model.parameters() if p.requires_grad) + + +def count_total_time(model): + + class Accumulator(object): + + def __init__(self): + self.total_time = 0 + + def __call__(self, module): + if isinstance(module, layers.CNF): + self.total_time = self.total_time + module.sqrt_end_time * module.sqrt_end_time + + accumulator = Accumulator() + model.apply(accumulator) + return accumulator.total_time + + +def add_spectral_norm(model, logger=None): + """Applies spectral norm to all modules within the scope of a CNF.""" + + def apply_spectral_norm(module): + if 'weight' in module._parameters: + if logger: logger.info("Adding spectral norm to {}".format(module)) + spectral_norm.inplace_spectral_norm(module, 'weight') + + def find_cnf(module): + if isinstance(module, layers.CNF): + module.apply(apply_spectral_norm) + else: + for child in module.children(): + find_cnf(child) + + find_cnf(model) + + +def spectral_norm_power_iteration(model, n_power_iterations=1): + + def recursive_power_iteration(module): + if hasattr(module, spectral_norm.POWER_ITERATION_FN): + getattr(module, spectral_norm.POWER_ITERATION_FN)(n_power_iterations) + + model.apply(recursive_power_iteration) + + +REGULARIZATION_FNS = { + "l1int": reg_lib.l1_regularzation_fn, + "l2int": reg_lib.l2_regularzation_fn, + "dl2int": reg_lib.directional_l2_regularization_fn, + "JFrobint": reg_lib.jacobian_frobenius_regularization_fn, + "JdiagFrobint": reg_lib.jacobian_diag_frobenius_regularization_fn, + "JoffdiagFrobint": reg_lib.jacobian_offdiag_frobenius_regularization_fn, +} + +INV_REGULARIZATION_FNS = {v: k for k, v in six.iteritems(REGULARIZATION_FNS)} + + +def append_regularization_to_log(log_message, regularization_fns, reg_states): + for i, reg_fn in enumerate(regularization_fns): + log_message = log_message + " | " + INV_REGULARIZATION_FNS[reg_fn] + ": {:.8f}".format(reg_states[i].item()) + return log_message + + +def create_regularization_fns(args): + regularization_fns = [] + regularization_coeffs = [] + + for arg_key, reg_fn in six.iteritems(REGULARIZATION_FNS): + if getattr(args, arg_key) is not None: + regularization_fns.append(reg_fn) + regularization_coeffs.append(eval("args." + arg_key)) + + regularization_fns = tuple(regularization_fns) + regularization_coeffs = tuple(regularization_coeffs) + return regularization_fns, regularization_coeffs + + +def get_regularization(model, regularization_coeffs): + if len(regularization_coeffs) == 0: + return None + + acc_reg_states = tuple([0.] * len(regularization_coeffs)) + for module in model.modules(): + if isinstance(module, layers.CNF): + acc_reg_states = tuple(acc + reg for acc, reg in zip(acc_reg_states, module.get_regularization_states())) + return acc_reg_states + + +def build_model_tabular(args, dims, regularization_fns=None): + + hidden_dims = tuple(map(int, args.dims.split("-"))) + + def build_cnf(): + diffeq = layers.ODEnet( + hidden_dims=hidden_dims, + input_shape=(dims,), + strides=None, + conv=False, + layer_type=args.layer_type, + nonlinearity=args.nonlinearity, + ) + odefunc = layers.ODEfunc( + diffeq=diffeq, + divergence_fn=args.divergence_fn, + residual=args.residual, + rademacher=args.rademacher, + ) + cnf = layers.CNF( + odefunc=odefunc, + T=args.time_length, + train_T=args.train_T, + regularization_fns=regularization_fns, + solver=args.solver, + ) + return cnf + + chain = [build_cnf() for _ in range(args.num_blocks)] + if args.batch_norm: + bn_layers = [layers.MovingBatchNorm1d(dims, bn_lag=args.bn_lag) for _ in range(args.num_blocks)] + bn_chain = [layers.MovingBatchNorm1d(dims, bn_lag=args.bn_lag)] + for a, b in zip(chain, bn_layers): + bn_chain.append(a) + bn_chain.append(b) + chain = bn_chain + model = layers.SequentialFlow(chain) + + set_cnf_options(args, model) + + return model diff --git a/src/torchprune/torchprune/util/external/ffjord/train_tabular.py b/src/torchprune/torchprune/util/external/ffjord/train_tabular.py new file mode 100644 index 0000000..b66d1d7 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/train_tabular.py @@ -0,0 +1,306 @@ +import argparse +import os +import time + +import torch + +import lib.utils as utils +import lib.layers.odefunc as odefunc +from lib.custom_optimizers import Adam + +import datasets + +from train_misc import standard_normal_logprob +from train_misc import set_cnf_options, count_nfe, count_parameters, count_total_time +from train_misc import create_regularization_fns, get_regularization, append_regularization_to_log +from train_misc import build_model_tabular, override_divergence_fn + +SOLVERS = ["dopri5", "bdf", "rk4", "midpoint", 'adams', 'explicit_adams', 'fixed_adams'] +parser = argparse.ArgumentParser('Continuous Normalizing Flow') +parser.add_argument( + '--data', choices=['power', 'gas', 'hepmass', 'miniboone', 'bsds300'], type=str, default='miniboone' +) +parser.add_argument( + "--layer_type", type=str, default="concatsquash", + choices=["ignore", "concat", "concat_v2", "squash", "concatsquash", "concatcoord", "hyper", "blend"] +) +parser.add_argument('--hdim_factor', type=int, default=10) +parser.add_argument('--nhidden', type=int, default=1) +parser.add_argument("--num_blocks", type=int, default=1, help='Number of stacked CNFs.') +parser.add_argument('--time_length', type=float, default=1.0) +parser.add_argument('--train_T', type=eval, default=True) +parser.add_argument("--divergence_fn", type=str, default="approximate", choices=["brute_force", "approximate"]) +parser.add_argument("--nonlinearity", type=str, default="softplus", choices=odefunc.NONLINEARITIES) + +parser.add_argument('--solver', type=str, default='dopri5', choices=SOLVERS) +parser.add_argument('--atol', type=float, default=1e-8) +parser.add_argument('--rtol', type=float, default=1e-6) +parser.add_argument("--step_size", type=float, default=None, help="Optional fixed step size.") + +parser.add_argument('--test_solver', type=str, default=None, choices=SOLVERS + [None]) +parser.add_argument('--test_atol', type=float, default=None) +parser.add_argument('--test_rtol', type=float, default=None) + +parser.add_argument('--residual', type=eval, default=False, choices=[True, False]) +parser.add_argument('--rademacher', type=eval, default=False, choices=[True, False]) +parser.add_argument('--batch_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--bn_lag', type=float, default=0) + +parser.add_argument('--early_stopping', type=int, default=30) +parser.add_argument('--batch_size', type=int, default=1000) +parser.add_argument('--test_batch_size', type=int, default=None) +parser.add_argument('--lr', type=float, default=1e-3) +parser.add_argument('--weight_decay', type=float, default=1e-6) + +# Track quantities +parser.add_argument('--l1int', type=float, default=None, help="int_t ||f||_1") +parser.add_argument('--l2int', type=float, default=None, help="int_t ||f||_2") +parser.add_argument('--dl2int', type=float, default=None, help="int_t ||f^T df/dt||_2") +parser.add_argument('--JFrobint', type=float, default=None, help="int_t ||df/dx||_F") +parser.add_argument('--JdiagFrobint', type=float, default=None, help="int_t ||df_i/dx_i||_F") +parser.add_argument('--JoffdiagFrobint', type=float, default=None, help="int_t ||df/dx - df_i/dx_i||_F") + +parser.add_argument('--resume', type=str, default=None) +parser.add_argument('--save', type=str, default='experiments/cnf') +parser.add_argument('--evaluate', action='store_true') +parser.add_argument('--val_freq', type=int, default=200) +parser.add_argument('--log_freq', type=int, default=10) +args = parser.parse_args() + +# logger +utils.makedirs(args.save) +logger = utils.get_logger(logpath=os.path.join(args.save, 'logs'), filepath=os.path.abspath(__file__)) + +if args.layer_type == "blend": + logger.info("!! Setting time_length from None to 1.0 due to use of Blend layers.") + args.time_length = 1.0 + args.train_T = False + +logger.info(args) + +test_batch_size = args.test_batch_size if args.test_batch_size else args.batch_size + + +def batch_iter(X, batch_size=args.batch_size, shuffle=False): + """ + X: feature tensor (shape: num_instances x num_features) + """ + if shuffle: + idxs = torch.randperm(X.shape[0]) + else: + idxs = torch.arange(X.shape[0]) + if X.is_cuda: + idxs = idxs.cuda() + for batch_idxs in idxs.split(batch_size): + yield X[batch_idxs] + + +ndecs = 0 + + +def update_lr(optimizer, n_vals_without_improvement): + global ndecs + if ndecs == 0 and n_vals_without_improvement > args.early_stopping // 3: + for param_group in optimizer.param_groups: + param_group["lr"] = args.lr / 10 + ndecs = 1 + elif ndecs == 1 and n_vals_without_improvement > args.early_stopping // 3 * 2: + for param_group in optimizer.param_groups: + param_group["lr"] = args.lr / 100 + ndecs = 2 + else: + for param_group in optimizer.param_groups: + param_group["lr"] = args.lr / 10**ndecs + + +def load_data(name): + + if name == 'bsds300': + return datasets.BSDS300() + + elif name == 'power': + return datasets.POWER() + + elif name == 'gas': + return datasets.GAS() + + elif name == 'hepmass': + return datasets.HEPMASS() + + elif name == 'miniboone': + return datasets.MINIBOONE() + + else: + raise ValueError('Unknown dataset') + + +def compute_loss(x, model): + zero = torch.zeros(x.shape[0], 1).to(x) + + z, delta_logp = model(x, zero) # run model forward + + logpz = standard_normal_logprob(z).view(z.shape[0], -1).sum(1, keepdim=True) # logp(z) + logpx = logpz - delta_logp + loss = -torch.mean(logpx) + return loss + + +def restore_model(model, filename): + checkpt = torch.load(filename, map_location=lambda storage, loc: storage) + model.load_state_dict(checkpt["state_dict"]) + return model + + +if __name__ == '__main__': + + device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + cvt = lambda x: x.type(torch.float32).to(device, non_blocking=True) + + logger.info('Using {} GPUs.'.format(torch.cuda.device_count())) + + data = load_data(args.data) + data.trn.x = torch.from_numpy(data.trn.x) + data.val.x = torch.from_numpy(data.val.x) + data.tst.x = torch.from_numpy(data.tst.x) + + args.dims = '-'.join([str(args.hdim_factor * data.n_dims)] * args.nhidden) + + regularization_fns, regularization_coeffs = create_regularization_fns(args) + model = build_model_tabular(args, data.n_dims, regularization_fns).to(device) + set_cnf_options(args, model) + + for k in model.state_dict().keys(): + logger.info(k) + + if args.resume is not None: + checkpt = torch.load(args.resume) + + # Backwards compatibility with an older version of the code. + # TODO: remove upon release. + filtered_state_dict = {} + for k, v in checkpt['state_dict'].items(): + if 'diffeq.diffeq' not in k: + filtered_state_dict[k.replace('module.', '')] = v + model.load_state_dict(filtered_state_dict) + + logger.info(model) + logger.info("Number of trainable parameters: {}".format(count_parameters(model))) + + if not args.evaluate: + optimizer = Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay) + + time_meter = utils.RunningAverageMeter(0.98) + loss_meter = utils.RunningAverageMeter(0.98) + nfef_meter = utils.RunningAverageMeter(0.98) + nfeb_meter = utils.RunningAverageMeter(0.98) + tt_meter = utils.RunningAverageMeter(0.98) + + best_loss = float('inf') + itr = 0 + n_vals_without_improvement = 0 + end = time.time() + model.train() + while True: + if args.early_stopping > 0 and n_vals_without_improvement > args.early_stopping: + break + + for x in batch_iter(data.trn.x, shuffle=True): + if args.early_stopping > 0 and n_vals_without_improvement > args.early_stopping: + break + + optimizer.zero_grad() + + x = cvt(x) + loss = compute_loss(x, model) + loss_meter.update(loss.item()) + + if len(regularization_coeffs) > 0: + reg_states = get_regularization(model, regularization_coeffs) + reg_loss = sum( + reg_state * coeff for reg_state, coeff in zip(reg_states, regularization_coeffs) if coeff != 0 + ) + loss = loss + reg_loss + + total_time = count_total_time(model) + nfe_forward = count_nfe(model) + + loss.backward() + optimizer.step() + + nfe_total = count_nfe(model) + nfe_backward = nfe_total - nfe_forward + nfef_meter.update(nfe_forward) + nfeb_meter.update(nfe_backward) + + time_meter.update(time.time() - end) + tt_meter.update(total_time) + + if itr % args.log_freq == 0: + log_message = ( + 'Iter {:06d} | Epoch {:.2f} | Time {:.4f}({:.4f}) | Loss {:.6f}({:.6f}) | ' + 'NFE Forward {:.0f}({:.1f}) | NFE Backward {:.0f}({:.1f}) | CNF Time {:.4f}({:.4f})'.format( + itr, + float(itr) / (data.trn.x.shape[0] / float(args.batch_size)), time_meter.val, time_meter.avg, + loss_meter.val, loss_meter.avg, nfef_meter.val, nfef_meter.avg, nfeb_meter.val, + nfeb_meter.avg, tt_meter.val, tt_meter.avg + ) + ) + if len(regularization_coeffs) > 0: + log_message = append_regularization_to_log(log_message, regularization_fns, reg_states) + + logger.info(log_message) + itr += 1 + end = time.time() + + # Validation loop. + if itr % args.val_freq == 0: + model.eval() + start_time = time.time() + with torch.no_grad(): + val_loss = utils.AverageMeter() + val_nfe = utils.AverageMeter() + for x in batch_iter(data.val.x, batch_size=test_batch_size): + x = cvt(x) + val_loss.update(compute_loss(x, model).item(), x.shape[0]) + val_nfe.update(count_nfe(model)) + + if val_loss.avg < best_loss: + best_loss = val_loss.avg + utils.makedirs(args.save) + torch.save({ + 'args': args, + 'state_dict': model.state_dict(), + }, os.path.join(args.save, 'checkpt.pth')) + n_vals_without_improvement = 0 + else: + n_vals_without_improvement += 1 + update_lr(optimizer, n_vals_without_improvement) + + log_message = ( + '[VAL] Iter {:06d} | Val Loss {:.6f} | NFE {:.0f} | ' + 'NoImproveEpochs {:02d}/{:02d}'.format( + itr, val_loss.avg, val_nfe.avg, n_vals_without_improvement, args.early_stopping + ) + ) + logger.info(log_message) + model.train() + + logger.info('Training has finished.') + model = restore_model(model, os.path.join(args.save, 'checkpt.pth')).to(device) + set_cnf_options(args, model) + + logger.info('Evaluating model on test set.') + model.eval() + + override_divergence_fn(model, "brute_force") + + with torch.no_grad(): + test_loss = utils.AverageMeter() + test_nfe = utils.AverageMeter() + for itr, x in enumerate(batch_iter(data.tst.x, batch_size=test_batch_size)): + x = cvt(x) + test_loss.update(compute_loss(x, model).item(), x.shape[0]) + test_nfe.update(count_nfe(model)) + logger.info('Progress: {:.2f}%'.format(100. * itr / (data.tst.x.shape[0] / test_batch_size))) + log_message = '[TEST] Iter {:06d} | Test Loss {:.6f} | NFE {:.0f}'.format(itr, test_loss.avg, test_nfe.avg) + logger.info(log_message) diff --git a/src/torchprune/torchprune/util/external/ffjord/train_toy.py b/src/torchprune/torchprune/util/external/ffjord/train_toy.py new file mode 100644 index 0000000..72ab811 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/train_toy.py @@ -0,0 +1,231 @@ +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt + +import argparse +import os +import time + +import torch +import torch.optim as optim + +import lib.toy_data as toy_data +import lib.utils as utils +from lib.visualize_flow import visualize_transform +import lib.layers.odefunc as odefunc + +from train_misc import standard_normal_logprob +from train_misc import set_cnf_options, count_nfe, count_parameters, count_total_time +from train_misc import add_spectral_norm, spectral_norm_power_iteration +from train_misc import create_regularization_fns, get_regularization, append_regularization_to_log +from train_misc import build_model_tabular + +from diagnostics.viz_toy import save_trajectory, trajectory_to_video + +SOLVERS = ["dopri5", "bdf", "rk4", "midpoint", 'adams', 'explicit_adams', 'fixed_adams'] +parser = argparse.ArgumentParser('Continuous Normalizing Flow') +parser.add_argument( + '--data', choices=['swissroll', '8gaussians', 'pinwheel', 'circles', 'moons', '2spirals', 'checkerboard', 'rings'], + type=str, default='pinwheel' +) +parser.add_argument( + "--layer_type", type=str, default="concatsquash", + choices=["ignore", "concat", "concat_v2", "squash", "concatsquash", "concatcoord", "hyper", "blend"] +) +parser.add_argument('--dims', type=str, default='64-64-64') +parser.add_argument("--num_blocks", type=int, default=1, help='Number of stacked CNFs.') +parser.add_argument('--time_length', type=float, default=0.5) +parser.add_argument('--train_T', type=eval, default=True) +parser.add_argument("--divergence_fn", type=str, default="brute_force", choices=["brute_force", "approximate"]) +parser.add_argument("--nonlinearity", type=str, default="tanh", choices=odefunc.NONLINEARITIES) + +parser.add_argument('--solver', type=str, default='dopri5', choices=SOLVERS) +parser.add_argument('--atol', type=float, default=1e-5) +parser.add_argument('--rtol', type=float, default=1e-5) +parser.add_argument("--step_size", type=float, default=None, help="Optional fixed step size.") + +parser.add_argument('--test_solver', type=str, default=None, choices=SOLVERS + [None]) +parser.add_argument('--test_atol', type=float, default=None) +parser.add_argument('--test_rtol', type=float, default=None) + +parser.add_argument('--residual', type=eval, default=False, choices=[True, False]) +parser.add_argument('--rademacher', type=eval, default=False, choices=[True, False]) +parser.add_argument('--spectral_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--batch_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--bn_lag', type=float, default=0) + +parser.add_argument('--niters', type=int, default=10000) +parser.add_argument('--batch_size', type=int, default=100) +parser.add_argument('--test_batch_size', type=int, default=1000) +parser.add_argument('--lr', type=float, default=1e-3) +parser.add_argument('--weight_decay', type=float, default=1e-5) + +# Track quantities +parser.add_argument('--l1int', type=float, default=None, help="int_t ||f||_1") +parser.add_argument('--l2int', type=float, default=None, help="int_t ||f||_2") +parser.add_argument('--dl2int', type=float, default=None, help="int_t ||f^T df/dt||_2") +parser.add_argument('--JFrobint', type=float, default=None, help="int_t ||df/dx||_F") +parser.add_argument('--JdiagFrobint', type=float, default=None, help="int_t ||df_i/dx_i||_F") +parser.add_argument('--JoffdiagFrobint', type=float, default=None, help="int_t ||df/dx - df_i/dx_i||_F") + +parser.add_argument('--save', type=str, default='experiments/cnf') +parser.add_argument('--viz_freq', type=int, default=100) +parser.add_argument('--val_freq', type=int, default=100) +parser.add_argument('--log_freq', type=int, default=10) +parser.add_argument('--gpu', type=int, default=0) +args = parser.parse_args() + +# logger +utils.makedirs(args.save) +logger = utils.get_logger(logpath=os.path.join(args.save, 'logs'), filepath=os.path.abspath(__file__)) + +if args.layer_type == "blend": + logger.info("!! Setting time_length from None to 1.0 due to use of Blend layers.") + args.time_length = 1.0 + +logger.info(args) + +device = torch.device('cuda:' + str(args.gpu) if torch.cuda.is_available() else 'cpu') + + +def get_transforms(model): + + def sample_fn(z, logpz=None): + if logpz is not None: + return model(z, logpz, reverse=True) + else: + return model(z, reverse=True) + + def density_fn(x, logpx=None): + if logpx is not None: + return model(x, logpx, reverse=False) + else: + return model(x, reverse=False) + + return sample_fn, density_fn + + +def compute_loss(args, model, batch_size=None): + if batch_size is None: batch_size = args.batch_size + + # load data + x = toy_data.inf_train_gen(args.data, batch_size=batch_size) + x = torch.from_numpy(x).type(torch.float32).to(device) + zero = torch.zeros(x.shape[0], 1).to(x) + + # transform to z + z, delta_logp = model(x, zero) + + # compute log q(z) + logpz = standard_normal_logprob(z).sum(1, keepdim=True) + + logpx = logpz - delta_logp + loss = -torch.mean(logpx) + return loss + + +if __name__ == '__main__': + + regularization_fns, regularization_coeffs = create_regularization_fns(args) + model = build_model_tabular(args, 2, regularization_fns).to(device) + if args.spectral_norm: add_spectral_norm(model) + set_cnf_options(args, model) + + logger.info(model) + logger.info("Number of trainable parameters: {}".format(count_parameters(model))) + + optimizer = optim.Adam(model.parameters(), lr=args.lr, weight_decay=args.weight_decay) + + time_meter = utils.RunningAverageMeter(0.93) + loss_meter = utils.RunningAverageMeter(0.93) + nfef_meter = utils.RunningAverageMeter(0.93) + nfeb_meter = utils.RunningAverageMeter(0.93) + tt_meter = utils.RunningAverageMeter(0.93) + + end = time.time() + best_loss = float('inf') + model.train() + for itr in range(1, args.niters + 1): + optimizer.zero_grad() + if args.spectral_norm: spectral_norm_power_iteration(model, 1) + + loss = compute_loss(args, model) + loss_meter.update(loss.item()) + + if len(regularization_coeffs) > 0: + reg_states = get_regularization(model, regularization_coeffs) + reg_loss = sum( + reg_state * coeff for reg_state, coeff in zip(reg_states, regularization_coeffs) if coeff != 0 + ) + loss = loss + reg_loss + + total_time = count_total_time(model) + nfe_forward = count_nfe(model) + + loss.backward() + optimizer.step() + + nfe_total = count_nfe(model) + nfe_backward = nfe_total - nfe_forward + nfef_meter.update(nfe_forward) + nfeb_meter.update(nfe_backward) + + time_meter.update(time.time() - end) + tt_meter.update(total_time) + + log_message = ( + 'Iter {:04d} | Time {:.4f}({:.4f}) | Loss {:.6f}({:.6f}) | NFE Forward {:.0f}({:.1f})' + ' | NFE Backward {:.0f}({:.1f}) | CNF Time {:.4f}({:.4f})'.format( + itr, time_meter.val, time_meter.avg, loss_meter.val, loss_meter.avg, nfef_meter.val, nfef_meter.avg, + nfeb_meter.val, nfeb_meter.avg, tt_meter.val, tt_meter.avg + ) + ) + if len(regularization_coeffs) > 0: + log_message = append_regularization_to_log(log_message, regularization_fns, reg_states) + + logger.info(log_message) + + if itr % args.val_freq == 0 or itr == args.niters: + with torch.no_grad(): + model.eval() + test_loss = compute_loss(args, model, batch_size=args.test_batch_size) + test_nfe = count_nfe(model) + log_message = '[TEST] Iter {:04d} | Test Loss {:.6f} | NFE {:.0f}'.format(itr, test_loss, test_nfe) + logger.info(log_message) + + if test_loss.item() < best_loss: + best_loss = test_loss.item() + utils.makedirs(args.save) + torch.save({ + 'args': args, + 'state_dict': model.state_dict(), + }, os.path.join(args.save, 'checkpt.pth')) + model.train() + + if itr % args.viz_freq == 0: + with torch.no_grad(): + model.eval() + p_samples = toy_data.inf_train_gen(args.data, batch_size=2000) + + sample_fn, density_fn = get_transforms(model) + + plt.figure(figsize=(9, 3)) + visualize_transform( + p_samples, torch.randn, standard_normal_logprob, transform=sample_fn, inverse_transform=density_fn, + samples=True, npts=800, device=device + ) + fig_filename = os.path.join(args.save, 'figs', '{:04d}.jpg'.format(itr)) + utils.makedirs(os.path.dirname(fig_filename)) + plt.savefig(fig_filename) + plt.close() + model.train() + + end = time.time() + + logger.info('Training has finished.') + + save_traj_dir = os.path.join(args.save, 'trajectory') + logger.info('Plotting trajectory to {}'.format(save_traj_dir)) + data_samples = toy_data.inf_train_gen(args.data, batch_size=2000) + save_trajectory(model, data_samples, save_traj_dir, device=device) + trajectory_to_video(save_traj_dir) diff --git a/src/torchprune/torchprune/util/external/ffjord/train_vae_flow.py b/src/torchprune/torchprune/util/external/ffjord/train_vae_flow.py new file mode 100644 index 0000000..7bec82b --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/train_vae_flow.py @@ -0,0 +1,358 @@ +# !/usr/bin/env python +# -*- coding: utf-8 -*- + +from __future__ import print_function +import argparse +import time +import torch +import torch.utils.data +import torch.optim as optim +import numpy as np +import math +import random + +import os + +import datetime + +import lib.utils as utils +import lib.layers.odefunc as odefunc + +import vae_lib.models.VAE as VAE +import vae_lib.models.CNFVAE as CNFVAE +from vae_lib.optimization.training import train, evaluate +from vae_lib.utils.load_data import load_dataset +from vae_lib.utils.plotting import plot_training_curve + +SOLVERS = ["dopri5", "bdf", "rk4", "midpoint", 'adams', 'explicit_adams', 'fixed_adams'] +parser = argparse.ArgumentParser(description='PyTorch Sylvester Normalizing flows') + +parser.add_argument( + '-d', '--dataset', type=str, default='mnist', choices=['mnist', 'freyfaces', 'omniglot', 'caltech'], + metavar='DATASET', help='Dataset choice.' +) + +parser.add_argument( + '-freys', '--freyseed', type=int, default=123, metavar='FREYSEED', + help="""Seed for shuffling frey face dataset for test split. Ignored for other datasets. + Results in paper are produced with seeds 123, 321, 231""" +) + +parser.add_argument('-nc', '--no_cuda', action='store_true', default=False, help='disables CUDA training') + +parser.add_argument('--manual_seed', type=int, help='manual seed, if not given resorts to random seed.') + +parser.add_argument( + '-li', '--log_interval', type=int, default=10, metavar='LOG_INTERVAL', + help='how many batches to wait before logging training status' +) + +parser.add_argument( + '-od', '--out_dir', type=str, default='snapshots', metavar='OUT_DIR', + help='output directory for model snapshots etc.' +) + +# optimization settings +parser.add_argument( + '-e', '--epochs', type=int, default=2000, metavar='EPOCHS', help='number of epochs to train (default: 2000)' +) +parser.add_argument( + '-es', '--early_stopping_epochs', type=int, default=35, metavar='EARLY_STOPPING', + help='number of early stopping epochs' +) + +parser.add_argument( + '-bs', '--batch_size', type=int, default=100, metavar='BATCH_SIZE', help='input batch size for training' +) +parser.add_argument('-lr', '--learning_rate', type=float, default=0.0005, metavar='LEARNING_RATE', help='learning rate') + +parser.add_argument( + '-w', '--warmup', type=int, default=100, metavar='N', + help='number of epochs for warm-up. Set to 0 to turn warmup off.' +) +parser.add_argument('--max_beta', type=float, default=1., metavar='MB', help='max beta for warm-up') +parser.add_argument('--min_beta', type=float, default=0.0, metavar='MB', help='min beta for warm-up') +parser.add_argument( + '-f', '--flow', type=str, default='no_flow', choices=[ + 'planar', 'iaf', 'householder', 'orthogonal', 'triangular', 'cnf', 'cnf_bias', 'cnf_hyper', 'cnf_rank', + 'cnf_lyper', 'no_flow' + ], help="""Type of flows to use, no flows can also be selected""" +) +parser.add_argument('-r', '--rank', type=int, default=1) +parser.add_argument( + '-nf', '--num_flows', type=int, default=4, metavar='NUM_FLOWS', + help='Number of flow layers, ignored in absence of flows' +) +parser.add_argument( + '-nv', '--num_ortho_vecs', type=int, default=8, metavar='NUM_ORTHO_VECS', + help=""" For orthogonal flow: How orthogonal vectors per flow do you need. + Ignored for other flow types.""" +) +parser.add_argument( + '-nh', '--num_householder', type=int, default=8, metavar='NUM_HOUSEHOLDERS', + help=""" For Householder Sylvester flow: Number of Householder matrices per flow. + Ignored for other flow types.""" +) +parser.add_argument( + '-mhs', '--made_h_size', type=int, default=320, metavar='MADEHSIZE', + help='Width of mades for iaf. Ignored for all other flows.' +) +parser.add_argument('--z_size', type=int, default=64, metavar='ZSIZE', help='how many stochastic hidden units') +# gpu/cpu +parser.add_argument('--gpu_num', type=int, default=0, metavar='GPU', help='choose GPU to run on.') + +# CNF settings +parser.add_argument( + "--layer_type", type=str, default="concat", + choices=["ignore", "concat", "concat_v2", "squash", "concatsquash", "concatcoord", "hyper", "blend"] +) +parser.add_argument('--dims', type=str, default='512-512') +parser.add_argument("--num_blocks", type=int, default=1, help='Number of stacked CNFs.') +parser.add_argument('--time_length', type=float, default=0.5) +parser.add_argument('--train_T', type=eval, default=False) +parser.add_argument("--divergence_fn", type=str, default="approximate", choices=["brute_force", "approximate"]) +parser.add_argument("--nonlinearity", type=str, default="softplus", choices=odefunc.NONLINEARITIES) + +parser.add_argument('--solver', type=str, default='dopri5', choices=SOLVERS) +parser.add_argument('--atol', type=float, default=1e-5) +parser.add_argument('--rtol', type=float, default=1e-5) +parser.add_argument("--step_size", type=float, default=None, help="Optional fixed step size.") + +parser.add_argument('--test_solver', type=str, default=None, choices=SOLVERS + [None]) +parser.add_argument('--test_atol', type=float, default=None) +parser.add_argument('--test_rtol', type=float, default=None) + +parser.add_argument('--residual', type=eval, default=False, choices=[True, False]) +parser.add_argument('--rademacher', type=eval, default=False, choices=[True, False]) +parser.add_argument('--batch_norm', type=eval, default=False, choices=[True, False]) +parser.add_argument('--bn_lag', type=float, default=0) +# evaluation +parser.add_argument('--evaluate', type=eval, default=False, choices=[True, False]) +parser.add_argument('--model_path', type=str, default='') +parser.add_argument('--retrain_encoder', type=eval, default=False, choices=[True, False]) + +args = parser.parse_args() +args.cuda = not args.no_cuda and torch.cuda.is_available() + +if args.manual_seed is None: + args.manual_seed = random.randint(1, 100000) +random.seed(args.manual_seed) +torch.manual_seed(args.manual_seed) +np.random.seed(args.manual_seed) + +if args.cuda: + # gpu device number + torch.cuda.set_device(args.gpu_num) + +kwargs = {'num_workers': 0, 'pin_memory': True} if args.cuda else {} + + +def run(args, kwargs): + # ================================================================================================================== + # SNAPSHOTS + # ================================================================================================================== + args.model_signature = str(datetime.datetime.now())[0:19].replace(' ', '_') + args.model_signature = args.model_signature.replace(':', '_') + + snapshots_path = os.path.join(args.out_dir, 'vae_' + args.dataset + '_') + snap_dir = snapshots_path + args.flow + + if args.flow != 'no_flow': + snap_dir += '_' + 'num_flows_' + str(args.num_flows) + + if args.flow == 'orthogonal': + snap_dir = snap_dir + '_num_vectors_' + str(args.num_ortho_vecs) + elif args.flow == 'orthogonalH': + snap_dir = snap_dir + '_num_householder_' + str(args.num_householder) + elif args.flow == 'iaf': + snap_dir = snap_dir + '_madehsize_' + str(args.made_h_size) + + elif args.flow == 'permutation': + snap_dir = snap_dir + '_' + 'kernelsize_' + str(args.kernel_size) + elif args.flow == 'mixed': + snap_dir = snap_dir + '_' + 'num_householder_' + str(args.num_householder) + elif args.flow == 'cnf_rank': + snap_dir = snap_dir + '_rank_' + str(args.rank) + '_' + args.dims + '_num_blocks_' + str(args.num_blocks) + elif 'cnf' in args.flow: + snap_dir = snap_dir + '_' + args.dims + '_num_blocks_' + str(args.num_blocks) + + if args.retrain_encoder: + snap_dir = snap_dir + '_retrain-encoder_' + elif args.evaluate: + snap_dir = snap_dir + '_evaluate_' + + snap_dir = snap_dir + '__' + args.model_signature + '/' + + args.snap_dir = snap_dir + + if not os.path.exists(snap_dir): + os.makedirs(snap_dir) + + # logger + utils.makedirs(args.snap_dir) + logger = utils.get_logger(logpath=os.path.join(args.snap_dir, 'logs'), filepath=os.path.abspath(__file__)) + + logger.info(args) + + # SAVING + torch.save(args, snap_dir + args.flow + '.config') + + # ================================================================================================================== + # LOAD DATA + # ================================================================================================================== + train_loader, val_loader, test_loader, args = load_dataset(args, **kwargs) + + if not args.evaluate: + + # ============================================================================================================== + # SELECT MODEL + # ============================================================================================================== + # flow parameters and architecture choice are passed on to model through args + + if args.flow == 'no_flow': + model = VAE.VAE(args) + elif args.flow == 'planar': + model = VAE.PlanarVAE(args) + elif args.flow == 'iaf': + model = VAE.IAFVAE(args) + elif args.flow == 'orthogonal': + model = VAE.OrthogonalSylvesterVAE(args) + elif args.flow == 'householder': + model = VAE.HouseholderSylvesterVAE(args) + elif args.flow == 'triangular': + model = VAE.TriangularSylvesterVAE(args) + elif args.flow == 'cnf': + model = CNFVAE.CNFVAE(args) + elif args.flow == 'cnf_bias': + model = CNFVAE.AmortizedBiasCNFVAE(args) + elif args.flow == 'cnf_hyper': + model = CNFVAE.HypernetCNFVAE(args) + elif args.flow == 'cnf_lyper': + model = CNFVAE.LypernetCNFVAE(args) + elif args.flow == 'cnf_rank': + model = CNFVAE.AmortizedLowRankCNFVAE(args) + else: + raise ValueError('Invalid flow choice') + + if args.retrain_encoder: + logger.info(f"Initializing decoder from {args.model_path}") + dec_model = torch.load(args.model_path) + dec_sd = {} + for k, v in dec_model.state_dict().items(): + if 'p_x' in k: + dec_sd[k] = v + model.load_state_dict(dec_sd, strict=False) + + if args.cuda: + logger.info("Model on GPU") + model.cuda() + + logger.info(model) + + if args.retrain_encoder: + parameters = [] + logger.info('Optimizing over:') + for name, param in model.named_parameters(): + if 'p_x' not in name: + logger.info(name) + parameters.append(param) + else: + parameters = model.parameters() + + optimizer = optim.Adamax(parameters, lr=args.learning_rate, eps=1.e-7) + + # ================================================================================================================== + # TRAINING + # ================================================================================================================== + train_loss = [] + val_loss = [] + + # for early stopping + best_loss = np.inf + best_bpd = np.inf + e = 0 + epoch = 0 + + train_times = [] + + for epoch in range(1, args.epochs + 1): + + t_start = time.time() + tr_loss = train(epoch, train_loader, model, optimizer, args, logger) + train_loss.append(tr_loss) + train_times.append(time.time() - t_start) + logger.info('One training epoch took %.2f seconds' % (time.time() - t_start)) + + v_loss, v_bpd = evaluate(val_loader, model, args, logger, epoch=epoch) + + val_loss.append(v_loss) + + # early-stopping + if v_loss < best_loss: + e = 0 + best_loss = v_loss + if args.input_type != 'binary': + best_bpd = v_bpd + logger.info('->model saved<-') + torch.save(model, snap_dir + args.flow + '.model') + # torch.save(model, snap_dir + args.flow + '_' + args.architecture + '.model') + + elif (args.early_stopping_epochs > 0) and (epoch >= args.warmup): + e += 1 + if e > args.early_stopping_epochs: + break + + if args.input_type == 'binary': + logger.info( + '--> Early stopping: {}/{} (BEST: loss {:.4f})\n'.format(e, args.early_stopping_epochs, best_loss) + ) + + else: + logger.info( + '--> Early stopping: {}/{} (BEST: loss {:.4f}, bpd {:.4f})\n'. + format(e, args.early_stopping_epochs, best_loss, best_bpd) + ) + + if math.isnan(v_loss): + raise ValueError('NaN encountered!') + + train_loss = np.hstack(train_loss) + val_loss = np.array(val_loss) + + plot_training_curve(train_loss, val_loss, fname=snap_dir + '/training_curve_%s.pdf' % args.flow) + + # training time per epoch + train_times = np.array(train_times) + mean_train_time = np.mean(train_times) + std_train_time = np.std(train_times, ddof=1) + logger.info('Average train time per epoch: %.2f +/- %.2f' % (mean_train_time, std_train_time)) + + # ================================================================================================================== + # EVALUATION + # ================================================================================================================== + + logger.info(args) + logger.info('Stopped after %d epochs' % epoch) + logger.info('Average train time per epoch: %.2f +/- %.2f' % (mean_train_time, std_train_time)) + + final_model = torch.load(snap_dir + args.flow + '.model') + validation_loss, validation_bpd = evaluate(val_loader, final_model, args, logger) + + else: + validation_loss = "N/A" + validation_bpd = "N/A" + logger.info(f"Loading model from {args.model_path}") + final_model = torch.load(args.model_path) + + test_loss, test_bpd = evaluate(test_loader, final_model, args, logger, testing=True) + + logger.info('FINAL EVALUATION ON VALIDATION SET. ELBO (VAL): {:.4f}'.format(validation_loss)) + logger.info('FINAL EVALUATION ON TEST SET. NLL (TEST): {:.4f}'.format(test_loss)) + if args.input_type != 'binary': + logger.info('FINAL EVALUATION ON VALIDATION SET. ELBO (VAL) BPD : {:.4f}'.format(validation_bpd)) + logger.info('FINAL EVALUATION ON TEST SET. NLL (TEST) BPD: {:.4f}'.format(test_bpd)) + + +if __name__ == "__main__": + + run(args, kwargs) diff --git a/src/torchprune/torchprune/util/models/cnn/LICENSE b/src/torchprune/torchprune/util/external/ffjord/vae_lib/LICENSE similarity index 96% rename from src/torchprune/torchprune/util/models/cnn/LICENSE rename to src/torchprune/torchprune/util/external/ffjord/vae_lib/LICENSE index 0482bd0..a37f7eb 100644 --- a/src/torchprune/torchprune/util/models/cnn/LICENSE +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2017 Wei Yang +Copyright (c) 2018 Rianne van den Berg Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/CNFVAE.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/CNFVAE.py new file mode 100644 index 0000000..3e24dc4 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/CNFVAE.py @@ -0,0 +1,412 @@ +import torch +import torch.nn as nn +from train_misc import build_model_tabular +import lib.layers as layers +from .VAE import VAE +import lib.layers.diffeq_layers as diffeq_layers +from lib.layers.odefunc import NONLINEARITIES + +from torchdiffeq import odeint_adjoint as odeint + + +def get_hidden_dims(args): + return tuple(map(int, args.dims.split("-"))) + (args.z_size,) + + +def concat_layer_num_params(in_dim, out_dim): + return (in_dim + 1) * out_dim + out_dim + + +class CNFVAE(VAE): + + def __init__(self, args): + super(CNFVAE, self).__init__(args) + + # CNF model + self.cnf = build_model_tabular(args, args.z_size) + + if args.cuda: + self.cuda() + + def encode(self, x): + """ + Encoder that ouputs parameters for base distribution of z and flow parameters. + """ + + h = self.q_z_nn(x) + h = h.view(-1, self.q_z_nn_output_dim) + mean_z = self.q_z_mean(h) + var_z = self.q_z_var(h) + + return mean_z, var_z + + def forward(self, x): + """ + Forward pass with planar flows for the transformation z_0 -> z_1 -> ... -> z_k. + Log determinant is computed as log_det_j = N E_q_z0[\sum_k log |det dz_k/dz_k-1| ]. + """ + + z_mu, z_var = self.encode(x) + + # Sample z_0 + z0 = self.reparameterize(z_mu, z_var) + + zero = torch.zeros(x.shape[0], 1).to(x) + zk, delta_logp = self.cnf(z0, zero) # run model forward + + x_mean = self.decode(zk) + + return x_mean, z_mu, z_var, -delta_logp.view(-1), z0, zk + + +class AmortizedBiasODEnet(nn.Module): + + def __init__(self, hidden_dims, input_dim, layer_type="concat", nonlinearity="softplus"): + super(AmortizedBiasODEnet, self).__init__() + base_layer = { + "ignore": diffeq_layers.IgnoreLinear, + "hyper": diffeq_layers.HyperLinear, + "squash": diffeq_layers.SquashLinear, + "concat": diffeq_layers.ConcatLinear, + "concat_v2": diffeq_layers.ConcatLinear_v2, + "concatsquash": diffeq_layers.ConcatSquashLinear, + "blend": diffeq_layers.BlendLinear, + "concatcoord": diffeq_layers.ConcatLinear, + }[layer_type] + self.input_dim = input_dim + + # build layers and add them + layers = [] + activation_fns = [] + hidden_shape = input_dim + for dim_out in hidden_dims: + layer = base_layer(hidden_shape, dim_out) + layers.append(layer) + activation_fns.append(NONLINEARITIES[nonlinearity]) + hidden_shape = dim_out + + self.layers = nn.ModuleList(layers) + self.activation_fns = nn.ModuleList(activation_fns[:-1]) + + def _unpack_params(self, params): + return [params] + + def forward(self, t, y, am_biases): + dx = y + for l, layer in enumerate(self.layers): + dx = layer(t, dx) + this_bias, am_biases = am_biases[:, :dx.size(1)], am_biases[:, dx.size(1):] + dx = dx + this_bias + # if not last layer, use nonlinearity + if l < len(self.layers) - 1: + dx = self.activation_fns[l](dx) + return dx + + +class AmortizedLowRankODEnet(nn.Module): + + def __init__(self, hidden_dims, input_dim, rank=1, layer_type="concat", nonlinearity="softplus"): + super(AmortizedLowRankODEnet, self).__init__() + base_layer = { + "ignore": diffeq_layers.IgnoreLinear, + "hyper": diffeq_layers.HyperLinear, + "squash": diffeq_layers.SquashLinear, + "concat": diffeq_layers.ConcatLinear, + "concat_v2": diffeq_layers.ConcatLinear_v2, + "concatsquash": diffeq_layers.ConcatSquashLinear, + "blend": diffeq_layers.BlendLinear, + "concatcoord": diffeq_layers.ConcatLinear, + }[layer_type] + self.input_dim = input_dim + + # build layers and add them + layers = [] + activation_fns = [] + hidden_shape = input_dim + self.output_dims = hidden_dims + self.input_dims = (input_dim,) + hidden_dims[:-1] + for dim_out in hidden_dims: + layer = base_layer(hidden_shape, dim_out) + layers.append(layer) + activation_fns.append(NONLINEARITIES[nonlinearity]) + hidden_shape = dim_out + + self.layers = nn.ModuleList(layers) + self.activation_fns = nn.ModuleList(activation_fns[:-1]) + self.rank = rank + + def _unpack_params(self, params): + return [params] + + def _rank_k_bmm(self, x, u, v): + xu = torch.bmm(x[:, None], u.view(x.shape[0], x.shape[-1], self.rank)) + xuv = torch.bmm(xu, v.view(x.shape[0], self.rank, -1)) + return xuv[:, 0] + + def forward(self, t, y, am_params): + dx = y + for l, (layer, in_dim, out_dim) in enumerate(zip(self.layers, self.input_dims, self.output_dims)): + this_u, am_params = am_params[:, :in_dim * self.rank], am_params[:, in_dim * self.rank:] + this_v, am_params = am_params[:, :out_dim * self.rank], am_params[:, out_dim * self.rank:] + this_bias, am_params = am_params[:, :out_dim], am_params[:, out_dim:] + + xw = layer(t, dx) + xw_am = self._rank_k_bmm(dx, this_u, this_v) + dx = xw + xw_am + this_bias + # if not last layer, use nonlinearity + if l < len(self.layers) - 1: + dx = self.activation_fns[l](dx) + return dx + + +class HyperODEnet(nn.Module): + + def __init__(self, hidden_dims, input_dim, layer_type="concat", nonlinearity="softplus"): + super(HyperODEnet, self).__init__() + assert layer_type == "concat" + self.input_dim = input_dim + + # build layers and add them + activation_fns = [] + for dim_out in hidden_dims + (input_dim,): + activation_fns.append(NONLINEARITIES[nonlinearity]) + self.activation_fns = nn.ModuleList(activation_fns[:-1]) + self.output_dims = hidden_dims + self.input_dims = (input_dim,) + hidden_dims[:-1] + + def _pack_inputs(self, t, x): + tt = torch.ones_like(x[:, :1]) * t + ttx = torch.cat([tt, x], 1) + return ttx + + def _unpack_params(self, params): + layer_params = [] + for in_dim, out_dim in zip(self.input_dims, self.output_dims): + this_num_params = concat_layer_num_params(in_dim, out_dim) + # get params for this layer + this_params, params = params[:, :this_num_params], params[:, this_num_params:] + # split into weight and bias + bias, weight_params = this_params[:, :out_dim], this_params[:, out_dim:] + weight = weight_params.view(weight_params.size(0), in_dim + 1, out_dim) + layer_params.append(weight) + layer_params.append(bias) + return layer_params + + def _layer(self, t, x, weight, bias): + # weights is (batch, in_dim + 1, out_dim) + ttx = self._pack_inputs(t, x) # (batch, in_dim + 1) + ttx = ttx.view(ttx.size(0), 1, ttx.size(1)) # (batch, 1, in_dim + 1) + xw = torch.bmm(ttx, weight)[:, 0, :] # (batch, out_dim) + return xw + bias + + def forward(self, t, y, *layer_params): + dx = y + for l, (weight, bias) in enumerate(zip(layer_params[::2], layer_params[1::2])): + dx = self._layer(t, dx, weight, bias) + # if not last layer, use nonlinearity + if l < len(layer_params) - 1: + dx = self.activation_fns[l](dx) + return dx + + +class LyperODEnet(nn.Module): + + def __init__(self, hidden_dims, input_dim, layer_type="concat", nonlinearity="softplus"): + super(LyperODEnet, self).__init__() + base_layer = { + "ignore": diffeq_layers.IgnoreLinear, + "hyper": diffeq_layers.HyperLinear, + "squash": diffeq_layers.SquashLinear, + "concat": diffeq_layers.ConcatLinear, + "concat_v2": diffeq_layers.ConcatLinear_v2, + "concatsquash": diffeq_layers.ConcatSquashLinear, + "blend": diffeq_layers.BlendLinear, + "concatcoord": diffeq_layers.ConcatLinear, + }[layer_type] + self.input_dim = input_dim + + # build layers and add them + layers = [] + activation_fns = [] + hidden_shape = input_dim + self.dims = (input_dim,) + hidden_dims + self.output_dims = hidden_dims + self.input_dims = (input_dim,) + hidden_dims[:-1] + for dim_out in hidden_dims[:-1]: + layer = base_layer(hidden_shape, dim_out) + layers.append(layer) + activation_fns.append(NONLINEARITIES[nonlinearity]) + hidden_shape = dim_out + + self.layers = nn.ModuleList(layers) + self.activation_fns = nn.ModuleList(activation_fns) + + def _pack_inputs(self, t, x): + tt = torch.ones_like(x[:, :1]) * t + ttx = torch.cat([tt, x], 1) + return ttx + + def _unpack_params(self, params): + return [params] + + def _am_layer(self, t, x, weight, bias): + # weights is (batch, in_dim + 1, out_dim) + ttx = self._pack_inputs(t, x) # (batch, in_dim + 1) + ttx = ttx.view(ttx.size(0), 1, ttx.size(1)) # (batch, 1, in_dim + 1) + xw = torch.bmm(ttx, weight)[:, 0, :] # (batch, out_dim) + return xw + bias + + def forward(self, t, x, am_params): + dx = x + for layer, act in zip(self.layers, self.activation_fns): + dx = act(layer(t, dx)) + bias, weight_params = am_params[:, :self.dims[-1]], am_params[:, self.dims[-1]:] + weight = weight_params.view(weight_params.size(0), self.dims[-2] + 1, self.dims[-1]) + dx = self._am_layer(t, dx, weight, bias) + return dx + + +def construct_amortized_odefunc(args, z_dim, amortization_type="bias"): + + hidden_dims = get_hidden_dims(args) + + if amortization_type == "bias": + diffeq = AmortizedBiasODEnet( + hidden_dims=hidden_dims, + input_dim=z_dim, + layer_type=args.layer_type, + nonlinearity=args.nonlinearity, + ) + elif amortization_type == "hyper": + diffeq = HyperODEnet( + hidden_dims=hidden_dims, + input_dim=z_dim, + layer_type=args.layer_type, + nonlinearity=args.nonlinearity, + ) + elif amortization_type == "lyper": + diffeq = LyperODEnet( + hidden_dims=hidden_dims, + input_dim=z_dim, + layer_type=args.layer_type, + nonlinearity=args.nonlinearity, + ) + elif amortization_type == "low_rank": + diffeq = AmortizedLowRankODEnet( + hidden_dims=hidden_dims, + input_dim=z_dim, + layer_type=args.layer_type, + nonlinearity=args.nonlinearity, + rank=args.rank, + ) + odefunc = layers.ODEfunc( + diffeq=diffeq, + divergence_fn=args.divergence_fn, + residual=args.residual, + rademacher=args.rademacher, + ) + return odefunc + + +class AmortizedCNFVAE(VAE): + h_size = 256 + + def __init__(self, args): + super(AmortizedCNFVAE, self).__init__(args) + + # CNF model + self.odefuncs = nn.ModuleList([ + construct_amortized_odefunc(args, args.z_size, self.amortization_type) for _ in range(args.num_blocks) + ]) + self.q_am = self._amortized_layers(args) + assert len(self.q_am) == args.num_blocks or len(self.q_am) == 0 + + if args.cuda: + self.cuda() + + self.register_buffer('integration_times', torch.tensor([0.0, args.time_length])) + + self.atol = args.atol + self.rtol = args.rtol + self.solver = args.solver + + def encode(self, x): + """ + Encoder that ouputs parameters for base distribution of z and flow parameters. + """ + + h = self.q_z_nn(x) + h = h.view(-1, self.q_z_nn_output_dim) + mean_z = self.q_z_mean(h) + var_z = self.q_z_var(h) + am_params = [q_am(h) for q_am in self.q_am] + + return mean_z, var_z, am_params + + def forward(self, x): + + self.log_det_j = 0. + + z_mu, z_var, am_params = self.encode(x) + + # Sample z_0 + z0 = self.reparameterize(z_mu, z_var) + + delta_logp = torch.zeros(x.shape[0], 1).to(x) + z = z0 + for odefunc, am_param in zip(self.odefuncs, am_params): + am_param_unpacked = odefunc.diffeq._unpack_params(am_param) + odefunc.before_odeint() + states = odeint( + odefunc, + (z, delta_logp) + tuple(am_param_unpacked), + self.integration_times.to(z), + atol=self.atol, + rtol=self.rtol, + method=self.solver, + ) + z, delta_logp = states[0][-1], states[1][-1] + + x_mean = self.decode(z) + + return x_mean, z_mu, z_var, -delta_logp.view(-1), z0, z + + +class AmortizedBiasCNFVAE(AmortizedCNFVAE): + amortization_type = "bias" + + def _amortized_layers(self, args): + hidden_dims = get_hidden_dims(args) + bias_size = sum(hidden_dims) + return nn.ModuleList([nn.Linear(self.h_size, bias_size) for _ in range(args.num_blocks)]) + + +class AmortizedLowRankCNFVAE(AmortizedCNFVAE): + amortization_type = "low_rank" + + def _amortized_layers(self, args): + out_dims = get_hidden_dims(args) + in_dims = (out_dims[-1],) + out_dims[:-1] + params_size = (sum(in_dims) + sum(out_dims)) * args.rank + sum(out_dims) + return nn.ModuleList([nn.Linear(self.h_size, params_size) for _ in range(args.num_blocks)]) + + +class HypernetCNFVAE(AmortizedCNFVAE): + amortization_type = "hyper" + + def _amortized_layers(self, args): + hidden_dims = get_hidden_dims(args) + input_dims = (args.z_size,) + hidden_dims[:-1] + assert args.layer_type == "concat", "hypernets only support concat layers at the moment" + weight_dims = [concat_layer_num_params(in_dim, out_dim) for in_dim, out_dim in zip(input_dims, hidden_dims)] + weight_size = sum(weight_dims) + return nn.ModuleList([nn.Linear(self.h_size, weight_size) for _ in range(args.num_blocks)]) + + +class LypernetCNFVAE(AmortizedCNFVAE): + amortization_type = "lyper" + + def _amortized_layers(self, args): + dims = (args.z_size,) + get_hidden_dims(args) + weight_size = concat_layer_num_params(dims[-2], dims[-1]) + return nn.ModuleList([nn.Linear(self.h_size, weight_size) for _ in range(args.num_blocks)]) diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/VAE.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/VAE.py new file mode 100644 index 0000000..96e4ea5 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/VAE.py @@ -0,0 +1,735 @@ +from __future__ import print_function + +import torch +import torch.nn as nn +import vae_lib.models.flows as flows +from vae_lib.models.layers import GatedConv2d, GatedConvTranspose2d + + +class VAE(nn.Module): + """ + The base VAE class containing gated convolutional encoder and decoder architecture. + Can be used as a base class for VAE's with normalizing flows. + """ + + def __init__(self, args): + super(VAE, self).__init__() + + # extract model settings from args + self.z_size = args.z_size + self.input_size = args.input_size + self.input_type = args.input_type + + if self.input_size == [1, 28, 28] or self.input_size == [3, 28, 28]: + self.last_kernel_size = 7 + elif self.input_size == [1, 28, 20]: + self.last_kernel_size = (7, 5) + else: + raise ValueError('invalid input size!!') + + self.q_z_nn, self.q_z_mean, self.q_z_var = self.create_encoder() + self.p_x_nn, self.p_x_mean = self.create_decoder() + + self.q_z_nn_output_dim = 256 + + # auxiliary + if args.cuda: + self.FloatTensor = torch.cuda.FloatTensor + else: + self.FloatTensor = torch.FloatTensor + + # log-det-jacobian = 0 without flows + self.log_det_j = self.FloatTensor(1).zero_() + + def create_encoder(self): + """ + Helper function to create the elemental blocks for the encoder. Creates a gated convnet encoder. + the encoder expects data as input of shape (batch_size, num_channels, width, height). + """ + + if self.input_type == 'binary': + q_z_nn = nn.Sequential( + GatedConv2d(self.input_size[0], 32, 5, 1, 2), + GatedConv2d(32, 32, 5, 2, 2), + GatedConv2d(32, 64, 5, 1, 2), + GatedConv2d(64, 64, 5, 2, 2), + GatedConv2d(64, 64, 5, 1, 2), + GatedConv2d(64, 256, self.last_kernel_size, 1, 0), + ) + q_z_mean = nn.Linear(256, self.z_size) + q_z_var = nn.Sequential( + nn.Linear(256, self.z_size), + nn.Softplus(), + ) + return q_z_nn, q_z_mean, q_z_var + + elif self.input_type == 'multinomial': + act = None + + q_z_nn = nn.Sequential( + GatedConv2d(self.input_size[0], 32, 5, 1, 2, activation=act), + GatedConv2d(32, 32, 5, 2, 2, activation=act), + GatedConv2d(32, 64, 5, 1, 2, activation=act), + GatedConv2d(64, 64, 5, 2, 2, activation=act), + GatedConv2d(64, 64, 5, 1, 2, activation=act), + GatedConv2d(64, 256, self.last_kernel_size, 1, 0, activation=act) + ) + q_z_mean = nn.Linear(256, self.z_size) + q_z_var = nn.Sequential(nn.Linear(256, self.z_size), nn.Softplus(), nn.Hardtanh(min_val=0.01, max_val=7.)) + return q_z_nn, q_z_mean, q_z_var + + def create_decoder(self): + """ + Helper function to create the elemental blocks for the decoder. Creates a gated convnet decoder. + """ + + num_classes = 256 + + if self.input_type == 'binary': + p_x_nn = nn.Sequential( + GatedConvTranspose2d(self.z_size, 64, self.last_kernel_size, 1, 0), + GatedConvTranspose2d(64, 64, 5, 1, 2), + GatedConvTranspose2d(64, 32, 5, 2, 2, 1), + GatedConvTranspose2d(32, 32, 5, 1, 2), + GatedConvTranspose2d(32, 32, 5, 2, 2, 1), GatedConvTranspose2d(32, 32, 5, 1, 2) + ) + + p_x_mean = nn.Sequential(nn.Conv2d(32, self.input_size[0], 1, 1, 0), nn.Sigmoid()) + return p_x_nn, p_x_mean + + elif self.input_type == 'multinomial': + act = None + p_x_nn = nn.Sequential( + GatedConvTranspose2d(self.z_size, 64, self.last_kernel_size, 1, 0, activation=act), + GatedConvTranspose2d(64, 64, 5, 1, 2, activation=act), + GatedConvTranspose2d(64, 32, 5, 2, 2, 1, activation=act), + GatedConvTranspose2d(32, 32, 5, 1, 2, activation=act), + GatedConvTranspose2d(32, 32, 5, 2, 2, 1, activation=act), + GatedConvTranspose2d(32, 32, 5, 1, 2, activation=act) + ) + + p_x_mean = nn.Sequential( + nn.Conv2d(32, 256, 5, 1, 2), + nn.Conv2d(256, self.input_size[0] * num_classes, 1, 1, 0), + # output shape: batch_size, num_channels * num_classes, pixel_width, pixel_height + ) + + return p_x_nn, p_x_mean + + else: + raise ValueError('invalid input type!!') + + def reparameterize(self, mu, var): + """ + Samples z from a multivariate Gaussian with diagonal covariance matrix using the + reparameterization trick. + """ + + std = var.sqrt() + eps = self.FloatTensor(std.size()).normal_() + z = eps.mul(std).add_(mu) + + return z + + def encode(self, x): + """ + Encoder expects following data shapes as input: shape = (batch_size, num_channels, width, height) + """ + + h = self.q_z_nn(x) + h = h.view(h.size(0), -1) + mean = self.q_z_mean(h) + var = self.q_z_var(h) + + return mean, var + + def decode(self, z): + """ + Decoder outputs reconstructed image in the following shapes: + x_mean.shape = (batch_size, num_channels, width, height) + """ + + z = z.view(z.size(0), self.z_size, 1, 1) + h = self.p_x_nn(z) + x_mean = self.p_x_mean(h) + + return x_mean + + def forward(self, x): + """ + Evaluates the model as a whole, encodes and decodes. Note that the log det jacobian is zero + for a plain VAE (without flows), and z_0 = z_k. + """ + + # mean and variance of z + z_mu, z_var = self.encode(x) + # sample z + z = self.reparameterize(z_mu, z_var) + x_mean = self.decode(z) + + return x_mean, z_mu, z_var, self.log_det_j, z, z + + +class PlanarVAE(VAE): + """ + Variational auto-encoder with planar flows in the encoder. + """ + + def __init__(self, args): + super(PlanarVAE, self).__init__(args) + + # Initialize log-det-jacobian to zero + self.log_det_j = 0. + + # Flow parameters + flow = flows.Planar + self.num_flows = args.num_flows + + # Amortized flow parameters + self.amor_u = nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size) + self.amor_w = nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size) + self.amor_b = nn.Linear(self.q_z_nn_output_dim, self.num_flows) + + # Normalizing flow layers + for k in range(self.num_flows): + flow_k = flow() + self.add_module('flow_' + str(k), flow_k) + + def encode(self, x): + """ + Encoder that ouputs parameters for base distribution of z and flow parameters. + """ + + batch_size = x.size(0) + + h = self.q_z_nn(x) + h = h.view(-1, self.q_z_nn_output_dim) + mean_z = self.q_z_mean(h) + var_z = self.q_z_var(h) + + # return amortized u an w for all flows + u = self.amor_u(h).view(batch_size, self.num_flows, self.z_size, 1) + w = self.amor_w(h).view(batch_size, self.num_flows, 1, self.z_size) + b = self.amor_b(h).view(batch_size, self.num_flows, 1, 1) + + return mean_z, var_z, u, w, b + + def forward(self, x): + """ + Forward pass with planar flows for the transformation z_0 -> z_1 -> ... -> z_k. + Log determinant is computed as log_det_j = N E_q_z0[\sum_k log |det dz_k/dz_k-1| ]. + """ + + self.log_det_j = 0. + + z_mu, z_var, u, w, b = self.encode(x) + + # Sample z_0 + z = [self.reparameterize(z_mu, z_var)] + + # Normalizing flows + for k in range(self.num_flows): + flow_k = getattr(self, 'flow_' + str(k)) + z_k, log_det_jacobian = flow_k(z[k], u[:, k, :, :], w[:, k, :, :], b[:, k, :, :]) + z.append(z_k) + self.log_det_j += log_det_jacobian + + x_mean = self.decode(z[-1]) + + return x_mean, z_mu, z_var, self.log_det_j, z[0], z[-1] + + +class OrthogonalSylvesterVAE(VAE): + """ + Variational auto-encoder with orthogonal flows in the encoder. + """ + + def __init__(self, args): + super(OrthogonalSylvesterVAE, self).__init__(args) + + # Initialize log-det-jacobian to zero + self.log_det_j = 0. + + # Flow parameters + flow = flows.Sylvester + self.num_flows = args.num_flows + self.num_ortho_vecs = args.num_ortho_vecs + + assert (self.num_ortho_vecs <= self.z_size) and (self.num_ortho_vecs > 0) + + # Orthogonalization parameters + if self.num_ortho_vecs == self.z_size: + self.cond = 1.e-5 + else: + self.cond = 1.e-6 + + self.steps = 100 + identity = torch.eye(self.num_ortho_vecs, self.num_ortho_vecs) + # Add batch dimension + identity = identity.unsqueeze(0) + # Put identity in buffer so that it will be moved to GPU if needed by any call of .cuda + self.register_buffer('_eye', identity) + self._eye.requires_grad = False + + # Masks needed for triangular R1 and R2. + triu_mask = torch.triu(torch.ones(self.num_ortho_vecs, self.num_ortho_vecs), diagonal=1) + triu_mask = triu_mask.unsqueeze(0).unsqueeze(3) + diag_idx = torch.arange(0, self.num_ortho_vecs).long() + + self.register_buffer('triu_mask', triu_mask) + self.triu_mask.requires_grad = False + self.register_buffer('diag_idx', diag_idx) + + # Amortized flow parameters + # Diagonal elements of R1 * R2 have to satisfy -1 < R1 * R2 for flow to be invertible + self.diag_activation = nn.Tanh() + + self.amor_d = nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.num_ortho_vecs * self.num_ortho_vecs) + + self.amor_diag1 = nn.Sequential( + nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.num_ortho_vecs), self.diag_activation + ) + self.amor_diag2 = nn.Sequential( + nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.num_ortho_vecs), self.diag_activation + ) + + self.amor_q = nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size * self.num_ortho_vecs) + self.amor_b = nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.num_ortho_vecs) + + # Normalizing flow layers + for k in range(self.num_flows): + flow_k = flow(self.num_ortho_vecs) + self.add_module('flow_' + str(k), flow_k) + + def batch_construct_orthogonal(self, q): + """ + Batch orthogonal matrix construction. + :param q: q contains batches of matrices, shape : (batch_size * num_flows, z_size * num_ortho_vecs) + :return: batches of orthogonalized matrices, shape: (batch_size * num_flows, z_size, num_ortho_vecs) + """ + + # Reshape to shape (num_flows * batch_size, z_size * num_ortho_vecs) + q = q.view(-1, self.z_size * self.num_ortho_vecs) + + norm = torch.norm(q, p=2, dim=1, keepdim=True) + amat = torch.div(q, norm) + dim0 = amat.size(0) + amat = amat.resize(dim0, self.z_size, self.num_ortho_vecs) + + max_norm = 0. + + # Iterative orthogonalization + for s in range(self.steps): + tmp = torch.bmm(amat.transpose(2, 1), amat) + tmp = self._eye - tmp + tmp = self._eye + 0.5 * tmp + amat = torch.bmm(amat, tmp) + + # Testing for convergence + test = torch.bmm(amat.transpose(2, 1), amat) - self._eye + norms2 = torch.sum(torch.norm(test, p=2, dim=2)**2, dim=1) + norms = torch.sqrt(norms2) + max_norm = torch.max(norms).item() + if max_norm <= self.cond: + break + + if max_norm > self.cond: + print('\nWARNING WARNING WARNING: orthogonalization not complete') + print('\t Final max norm =', max_norm) + + print() + + # Reshaping: first dimension is batch_size + amat = amat.view(-1, self.num_flows, self.z_size, self.num_ortho_vecs) + amat = amat.transpose(0, 1) + + return amat + + def encode(self, x): + """ + Encoder that ouputs parameters for base distribution of z and flow parameters. + """ + + batch_size = x.size(0) + + h = self.q_z_nn(x) + h = h.view(-1, self.q_z_nn_output_dim) + mean_z = self.q_z_mean(h) + var_z = self.q_z_var(h) + + # Amortized r1, r2, q, b for all flows + + full_d = self.amor_d(h) + diag1 = self.amor_diag1(h) + diag2 = self.amor_diag2(h) + + full_d = full_d.resize(batch_size, self.num_ortho_vecs, self.num_ortho_vecs, self.num_flows) + diag1 = diag1.resize(batch_size, self.num_ortho_vecs, self.num_flows) + diag2 = diag2.resize(batch_size, self.num_ortho_vecs, self.num_flows) + + r1 = full_d * self.triu_mask + r2 = full_d.transpose(2, 1) * self.triu_mask + + r1[:, self.diag_idx, self.diag_idx, :] = diag1 + r2[:, self.diag_idx, self.diag_idx, :] = diag2 + + q = self.amor_q(h) + b = self.amor_b(h) + + # Resize flow parameters to divide over K flows + b = b.resize(batch_size, 1, self.num_ortho_vecs, self.num_flows) + + return mean_z, var_z, r1, r2, q, b + + def forward(self, x): + """ + Forward pass with orthogonal sylvester flows for the transformation z_0 -> z_1 -> ... -> z_k. + Log determinant is computed as log_det_j = N E_q_z0[\sum_k log |det dz_k/dz_k-1| ]. + """ + + self.log_det_j = 0. + + z_mu, z_var, r1, r2, q, b = self.encode(x) + + # Orthogonalize all q matrices + q_ortho = self.batch_construct_orthogonal(q) + + # Sample z_0 + z = [self.reparameterize(z_mu, z_var)] + + # Normalizing flows + for k in range(self.num_flows): + + flow_k = getattr(self, 'flow_' + str(k)) + z_k, log_det_jacobian = flow_k(z[k], r1[:, :, :, k], r2[:, :, :, k], q_ortho[k, :, :, :], b[:, :, :, k]) + + z.append(z_k) + self.log_det_j += log_det_jacobian + + x_mean = self.decode(z[-1]) + + return x_mean, z_mu, z_var, self.log_det_j, z[0], z[-1] + + +class HouseholderSylvesterVAE(VAE): + """ + Variational auto-encoder with householder sylvester flows in the encoder. + """ + + def __init__(self, args): + super(HouseholderSylvesterVAE, self).__init__(args) + + # Initialize log-det-jacobian to zero + self.log_det_j = 0. + + # Flow parameters + flow = flows.Sylvester + self.num_flows = args.num_flows + self.num_householder = args.num_householder + assert self.num_householder > 0 + + identity = torch.eye(self.z_size, self.z_size) + # Add batch dimension + identity = identity.unsqueeze(0) + # Put identity in buffer so that it will be moved to GPU if needed by any call of .cuda + self.register_buffer('_eye', identity) + self._eye.requires_grad = False + + # Masks needed for triangular r1 and r2. + triu_mask = torch.triu(torch.ones(self.z_size, self.z_size), diagonal=1) + triu_mask = triu_mask.unsqueeze(0).unsqueeze(3) + diag_idx = torch.arange(0, self.z_size).long() + + self.register_buffer('triu_mask', triu_mask) + self.triu_mask.requires_grad = False + self.register_buffer('diag_idx', diag_idx) + + # Amortized flow parameters + # Diagonal elements of r1 * r2 have to satisfy -1 < r1 * r2 for flow to be invertible + self.diag_activation = nn.Tanh() + + self.amor_d = nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size * self.z_size) + + self.amor_diag1 = nn.Sequential( + nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size), self.diag_activation + ) + self.amor_diag2 = nn.Sequential( + nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size), self.diag_activation + ) + + self.amor_q = nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size * self.num_householder) + + self.amor_b = nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size) + + # Normalizing flow layers + for k in range(self.num_flows): + flow_k = flow(self.z_size) + + self.add_module('flow_' + str(k), flow_k) + + def batch_construct_orthogonal(self, q): + """ + Batch orthogonal matrix construction. + :param q: q contains batches of matrices, shape : (batch_size, num_flows * z_size * num_householder) + :return: batches of orthogonalized matrices, shape: (batch_size * num_flows, z_size, z_size) + """ + + # Reshape to shape (num_flows * batch_size * num_householder, z_size) + q = q.view(-1, self.z_size) + + norm = torch.norm(q, p=2, dim=1, keepdim=True) # ||v||_2 + v = torch.div(q, norm) # v / ||v||_2 + + # Calculate Householder Matrices + vvT = torch.bmm(v.unsqueeze(2), v.unsqueeze(1)) # v * v_T : batch_dot( B x L x 1 * B x 1 x L ) = B x L x L + + amat = self._eye - 2 * vvT # NOTICE: v is already normalized! so there is no need to calculate vvT/vTv + + # Reshaping: first dimension is batch_size * num_flows + amat = amat.view(-1, self.num_householder, self.z_size, self.z_size) + + tmp = amat[:, 0] + for k in range(1, self.num_householder): + tmp = torch.bmm(amat[:, k], tmp) + + amat = tmp.view(-1, self.num_flows, self.z_size, self.z_size) + amat = amat.transpose(0, 1) + + return amat + + def encode(self, x): + """ + Encoder that ouputs parameters for base distribution of z and flow parameters. + """ + + batch_size = x.size(0) + + h = self.q_z_nn(x) + h = h.view(-1, self.q_z_nn_output_dim) + mean_z = self.q_z_mean(h) + var_z = self.q_z_var(h) + + # Amortized r1, r2, q, b for all flows + full_d = self.amor_d(h) + diag1 = self.amor_diag1(h) + diag2 = self.amor_diag2(h) + + full_d = full_d.resize(batch_size, self.z_size, self.z_size, self.num_flows) + diag1 = diag1.resize(batch_size, self.z_size, self.num_flows) + diag2 = diag2.resize(batch_size, self.z_size, self.num_flows) + + r1 = full_d * self.triu_mask + r2 = full_d.transpose(2, 1) * self.triu_mask + + r1[:, self.diag_idx, self.diag_idx, :] = diag1 + r2[:, self.diag_idx, self.diag_idx, :] = diag2 + + q = self.amor_q(h) + + b = self.amor_b(h) + + # Resize flow parameters to divide over K flows + b = b.resize(batch_size, 1, self.z_size, self.num_flows) + + return mean_z, var_z, r1, r2, q, b + + def forward(self, x): + """ + Forward pass with orthogonal flows for the transformation z_0 -> z_1 -> ... -> z_k. + Log determinant is computed as log_det_j = N E_q_z0[\sum_k log |det dz_k/dz_k-1| ]. + """ + + self.log_det_j = 0. + + z_mu, z_var, r1, r2, q, b = self.encode(x) + + # Orthogonalize all q matrices + q_ortho = self.batch_construct_orthogonal(q) + + # Sample z_0 + z = [self.reparameterize(z_mu, z_var)] + + # Normalizing flows + for k in range(self.num_flows): + + flow_k = getattr(self, 'flow_' + str(k)) + q_k = q_ortho[k] + + z_k, log_det_jacobian = flow_k(z[k], r1[:, :, :, k], r2[:, :, :, k], q_k, b[:, :, :, k], sum_ldj=True) + + z.append(z_k) + self.log_det_j += log_det_jacobian + + x_mean = self.decode(z[-1]) + + return x_mean, z_mu, z_var, self.log_det_j, z[0], z[-1] + + +class TriangularSylvesterVAE(VAE): + """ + Variational auto-encoder with triangular Sylvester flows in the encoder. Alternates between setting + the orthogonal matrix equal to permutation and identity matrix for each flow. + """ + + def __init__(self, args): + super(TriangularSylvesterVAE, self).__init__(args) + + # Initialize log-det-jacobian to zero + self.log_det_j = 0. + + # Flow parameters + flow = flows.TriangularSylvester + self.num_flows = args.num_flows + + # permuting indices corresponding to Q=P (permutation matrix) for every other flow + flip_idx = torch.arange(self.z_size - 1, -1, -1).long() + self.register_buffer('flip_idx', flip_idx) + + # Masks needed for triangular r1 and r2. + triu_mask = torch.triu(torch.ones(self.z_size, self.z_size), diagonal=1) + triu_mask = triu_mask.unsqueeze(0).unsqueeze(3) + diag_idx = torch.arange(0, self.z_size).long() + + self.register_buffer('triu_mask', triu_mask) + self.triu_mask.requires_grad = False + self.register_buffer('diag_idx', diag_idx) + + # Amortized flow parameters + # Diagonal elements of r1 * r2 have to satisfy -1 < r1 * r2 for flow to be invertible + self.diag_activation = nn.Tanh() + + self.amor_d = nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size * self.z_size) + + self.amor_diag1 = nn.Sequential( + nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size), self.diag_activation + ) + self.amor_diag2 = nn.Sequential( + nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size), self.diag_activation + ) + + self.amor_b = nn.Linear(self.q_z_nn_output_dim, self.num_flows * self.z_size) + + # Normalizing flow layers + for k in range(self.num_flows): + flow_k = flow(self.z_size) + + self.add_module('flow_' + str(k), flow_k) + + def encode(self, x): + """ + Encoder that ouputs parameters for base distribution of z and flow parameters. + """ + + batch_size = x.size(0) + + h = self.q_z_nn(x) + h = h.view(-1, self.q_z_nn_output_dim) + mean_z = self.q_z_mean(h) + var_z = self.q_z_var(h) + + # Amortized r1, r2, b for all flows + full_d = self.amor_d(h) + diag1 = self.amor_diag1(h) + diag2 = self.amor_diag2(h) + + full_d = full_d.resize(batch_size, self.z_size, self.z_size, self.num_flows) + diag1 = diag1.resize(batch_size, self.z_size, self.num_flows) + diag2 = diag2.resize(batch_size, self.z_size, self.num_flows) + + r1 = full_d * self.triu_mask + r2 = full_d.transpose(2, 1) * self.triu_mask + + r1[:, self.diag_idx, self.diag_idx, :] = diag1 + r2[:, self.diag_idx, self.diag_idx, :] = diag2 + + b = self.amor_b(h) + + # Resize flow parameters to divide over K flows + b = b.resize(batch_size, 1, self.z_size, self.num_flows) + + return mean_z, var_z, r1, r2, b + + def forward(self, x): + """ + Forward pass with orthogonal flows for the transformation z_0 -> z_1 -> ... -> z_k. + Log determinant is computed as log_det_j = N E_q_z0[\sum_k log |det dz_k/dz_k-1| ]. + """ + + self.log_det_j = 0. + + z_mu, z_var, r1, r2, b = self.encode(x) + + # Sample z_0 + z = [self.reparameterize(z_mu, z_var)] + + # Normalizing flows + for k in range(self.num_flows): + + flow_k = getattr(self, 'flow_' + str(k)) + if k % 2 == 1: + # Alternate with reorderering z for triangular flow + permute_z = self.flip_idx + else: + permute_z = None + + z_k, log_det_jacobian = flow_k(z[k], r1[:, :, :, k], r2[:, :, :, k], b[:, :, :, k], permute_z, sum_ldj=True) + + z.append(z_k) + self.log_det_j += log_det_jacobian + + x_mean = self.decode(z[-1]) + + return x_mean, z_mu, z_var, self.log_det_j, z[0], z[-1] + + +class IAFVAE(VAE): + """ + Variational auto-encoder with inverse autoregressive flows in the encoder. + """ + + def __init__(self, args): + super(IAFVAE, self).__init__(args) + + # Initialize log-det-jacobian to zero + self.log_det_j = 0. + self.h_size = args.made_h_size + + self.h_context = nn.Linear(self.q_z_nn_output_dim, self.h_size) + + # Flow parameters + self.num_flows = args.num_flows + self.flow = flows.IAF( + z_size=self.z_size, num_flows=self.num_flows, num_hidden=1, h_size=self.h_size, conv2d=False + ) + + def encode(self, x): + """ + Encoder that ouputs parameters for base distribution of z and context h for flows. + """ + + h = self.q_z_nn(x) + h = h.view(-1, self.q_z_nn_output_dim) + mean_z = self.q_z_mean(h) + var_z = self.q_z_var(h) + h_context = self.h_context(h) + + return mean_z, var_z, h_context + + def forward(self, x): + """ + Forward pass with inverse autoregressive flows for the transformation z_0 -> z_1 -> ... -> z_k. + Log determinant is computed as log_det_j = N E_q_z0[\sum_k log |det dz_k/dz_k-1| ]. + """ + + # mean and variance of z + z_mu, z_var, h_context = self.encode(x) + # sample z + z_0 = self.reparameterize(z_mu, z_var) + + # iaf flows + z_k, self.log_det_j = self.flow(z_0, h_context) + + # decode + x_mean = self.decode(z_k) + + return x_mean, z_mu, z_var, self.log_det_j, z_0, z_k diff --git a/src/torchprune/torchprune/util/models/cnn/models/__init__.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/__init__.py similarity index 100% rename from src/torchprune/torchprune/util/models/cnn/models/__init__.py rename to src/torchprune/torchprune/util/external/ffjord/vae_lib/models/__init__.py diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/flows.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/flows.py new file mode 100644 index 0000000..0894043 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/flows.py @@ -0,0 +1,299 @@ +""" +Collection of flow strategies +""" + +from __future__ import print_function + +import torch +import torch.nn as nn +from torch.autograd import Variable +import torch.nn.functional as F + +from vae_lib.models.layers import MaskedConv2d, MaskedLinear + + +class Planar(nn.Module): + """ + PyTorch implementation of planar flows as presented in "Variational Inference with Normalizing Flows" + by Danilo Jimenez Rezende, Shakir Mohamed. Model assumes amortized flow parameters. + """ + + def __init__(self): + + super(Planar, self).__init__() + + self.h = nn.Tanh() + self.softplus = nn.Softplus() + + def der_h(self, x): + """ Derivative of tanh """ + + return 1 - self.h(x)**2 + + def forward(self, zk, u, w, b): + """ + Forward pass. Assumes amortized u, w and b. Conditions on diagonals of u and w for invertibility + will be be satisfied inside this function. Computes the following transformation: + z' = z + u h( w^T z + b) + or actually + z'^T = z^T + h(z^T w + b)u^T + Assumes the following input shapes: + shape u = (batch_size, z_size, 1) + shape w = (batch_size, 1, z_size) + shape b = (batch_size, 1, 1) + shape z = (batch_size, z_size). + """ + + zk = zk.unsqueeze(2) + + # reparameterize u such that the flow becomes invertible (see appendix paper) + uw = torch.bmm(w, u) + m_uw = -1. + self.softplus(uw) + w_norm_sq = torch.sum(w**2, dim=2, keepdim=True) + u_hat = u + ((m_uw - uw) * w.transpose(2, 1) / w_norm_sq) + + # compute flow with u_hat + wzb = torch.bmm(w, zk) + b + z = zk + u_hat * self.h(wzb) + z = z.squeeze(2) + + # compute logdetJ + psi = w * self.der_h(wzb) + log_det_jacobian = torch.log(torch.abs(1 + torch.bmm(psi, u_hat))) + log_det_jacobian = log_det_jacobian.squeeze(2).squeeze(1) + + return z, log_det_jacobian + + +class Sylvester(nn.Module): + """ + Sylvester normalizing flow. + """ + + def __init__(self, num_ortho_vecs): + + super(Sylvester, self).__init__() + + self.num_ortho_vecs = num_ortho_vecs + + self.h = nn.Tanh() + + triu_mask = torch.triu(torch.ones(num_ortho_vecs, num_ortho_vecs), diagonal=1).unsqueeze(0) + diag_idx = torch.arange(0, num_ortho_vecs).long() + + self.register_buffer('triu_mask', Variable(triu_mask)) + self.triu_mask.requires_grad = False + self.register_buffer('diag_idx', diag_idx) + + def der_h(self, x): + return self.der_tanh(x) + + def der_tanh(self, x): + return 1 - self.h(x)**2 + + def _forward(self, zk, r1, r2, q_ortho, b, sum_ldj=True): + """ + All flow parameters are amortized. Conditions on diagonals of R1 and R2 for invertibility need to be satisfied + outside of this function. Computes the following transformation: + z' = z + QR1 h( R2Q^T z + b) + or actually + z'^T = z^T + h(z^T Q R2^T + b^T)R1^T Q^T + :param zk: shape: (batch_size, z_size) + :param r1: shape: (batch_size, num_ortho_vecs, num_ortho_vecs) + :param r2: shape: (batch_size, num_ortho_vecs, num_ortho_vecs) + :param q_ortho: shape (batch_size, z_size , num_ortho_vecs) + :param b: shape: (batch_size, 1, self.z_size) + :return: z, log_det_j + """ + + # Amortized flow parameters + zk = zk.unsqueeze(1) + + # Save diagonals for log_det_j + diag_r1 = r1[:, self.diag_idx, self.diag_idx] + diag_r2 = r2[:, self.diag_idx, self.diag_idx] + + r1_hat = r1 + r2_hat = r2 + + qr2 = torch.bmm(q_ortho, r2_hat.transpose(2, 1)) + qr1 = torch.bmm(q_ortho, r1_hat) + + r2qzb = torch.bmm(zk, qr2) + b + z = torch.bmm(self.h(r2qzb), qr1.transpose(2, 1)) + zk + z = z.squeeze(1) + + # Compute log|det J| + # Output log_det_j in shape (batch_size) instead of (batch_size,1) + diag_j = diag_r1 * diag_r2 + diag_j = self.der_h(r2qzb).squeeze(1) * diag_j + diag_j += 1. + log_diag_j = diag_j.abs().log() + + if sum_ldj: + log_det_j = log_diag_j.sum(-1) + else: + log_det_j = log_diag_j + + return z, log_det_j + + def forward(self, zk, r1, r2, q_ortho, b, sum_ldj=True): + + return self._forward(zk, r1, r2, q_ortho, b, sum_ldj) + + +class TriangularSylvester(nn.Module): + """ + Sylvester normalizing flow with Q=P or Q=I. + """ + + def __init__(self, z_size): + + super(TriangularSylvester, self).__init__() + + self.z_size = z_size + self.h = nn.Tanh() + + diag_idx = torch.arange(0, z_size).long() + self.register_buffer('diag_idx', diag_idx) + + def der_h(self, x): + return self.der_tanh(x) + + def der_tanh(self, x): + return 1 - self.h(x)**2 + + def _forward(self, zk, r1, r2, b, permute_z=None, sum_ldj=True): + """ + All flow parameters are amortized. conditions on diagonals of R1 and R2 need to be satisfied + outside of this function. + Computes the following transformation: + z' = z + QR1 h( R2Q^T z + b) + or actually + z'^T = z^T + h(z^T Q R2^T + b^T)R1^T Q^T + with Q = P a permutation matrix (equal to identity matrix if permute_z=None) + :param zk: shape: (batch_size, z_size) + :param r1: shape: (batch_size, num_ortho_vecs, num_ortho_vecs). + :param r2: shape: (batch_size, num_ortho_vecs, num_ortho_vecs). + :param b: shape: (batch_size, 1, self.z_size) + :return: z, log_det_j + """ + + # Amortized flow parameters + zk = zk.unsqueeze(1) + + # Save diagonals for log_det_j + diag_r1 = r1[:, self.diag_idx, self.diag_idx] + diag_r2 = r2[:, self.diag_idx, self.diag_idx] + + if permute_z is not None: + # permute order of z + z_per = zk[:, :, permute_z] + else: + z_per = zk + + r2qzb = torch.bmm(z_per, r2.transpose(2, 1)) + b + z = torch.bmm(self.h(r2qzb), r1.transpose(2, 1)) + + if permute_z is not None: + # permute order of z again back again + z = z[:, :, permute_z] + + z += zk + z = z.squeeze(1) + + # Compute log|det J| + # Output log_det_j in shape (batch_size) instead of (batch_size,1) + diag_j = diag_r1 * diag_r2 + diag_j = self.der_h(r2qzb).squeeze(1) * diag_j + diag_j += 1. + log_diag_j = diag_j.abs().log() + + if sum_ldj: + log_det_j = log_diag_j.sum(-1) + else: + log_det_j = log_diag_j + + return z, log_det_j + + def forward(self, zk, r1, r2, q_ortho, b, sum_ldj=True): + + return self._forward(zk, r1, r2, q_ortho, b, sum_ldj) + + +class IAF(nn.Module): + """ + PyTorch implementation of inverse autoregressive flows as presented in + "Improving Variational Inference with Inverse Autoregressive Flow" by Diederik P. Kingma, Tim Salimans, + Rafal Jozefowicz, Xi Chen, Ilya Sutskever, Max Welling. + Inverse Autoregressive Flow with either MADE MLPs or Pixel CNNs. Contains several flows. Each transformation + takes as an input the previous stochastic z, and a context h. The structure of each flow is then as follows: + z <- autoregressive_layer(z) + h, allow for diagonal connections + z <- autoregressive_layer(z), allow for diagonal connections + : + z <- autoregressive_layer(z), do not allow for diagonal connections. + + Note that the size of h needs to be the same as h_size, which is the width of the MADE layers. + """ + + def __init__(self, z_size, num_flows=2, num_hidden=0, h_size=50, forget_bias=1., conv2d=False): + super(IAF, self).__init__() + self.z_size = z_size + self.num_flows = num_flows + self.num_hidden = num_hidden + self.h_size = h_size + self.conv2d = conv2d + if not conv2d: + ar_layer = MaskedLinear + else: + ar_layer = MaskedConv2d + self.activation = torch.nn.ELU + # self.activation = torch.nn.ReLU + + self.forget_bias = forget_bias + self.flows = [] + self.param_list = [] + + # For reordering z after each flow + flip_idx = torch.arange(self.z_size - 1, -1, -1).long() + self.register_buffer('flip_idx', flip_idx) + + for k in range(num_flows): + arch_z = [ar_layer(z_size, h_size), self.activation()] + self.param_list += list(arch_z[0].parameters()) + z_feats = torch.nn.Sequential(*arch_z) + arch_zh = [] + for j in range(num_hidden): + arch_zh += [ar_layer(h_size, h_size), self.activation()] + self.param_list += list(arch_zh[-2].parameters()) + zh_feats = torch.nn.Sequential(*arch_zh) + linear_mean = ar_layer(h_size, z_size, diagonal_zeros=True) + linear_std = ar_layer(h_size, z_size, diagonal_zeros=True) + self.param_list += list(linear_mean.parameters()) + self.param_list += list(linear_std.parameters()) + + if torch.cuda.is_available(): + z_feats = z_feats.cuda() + zh_feats = zh_feats.cuda() + linear_mean = linear_mean.cuda() + linear_std = linear_std.cuda() + self.flows.append((z_feats, zh_feats, linear_mean, linear_std)) + + self.param_list = torch.nn.ParameterList(self.param_list) + + def forward(self, z, h_context): + + logdets = 0. + for i, flow in enumerate(self.flows): + if (i + 1) % 2 == 0 and not self.conv2d: + # reverse ordering to help mixing + z = z[:, self.flip_idx] + + h = flow[0](z) + h = h + h_context + h = flow[1](h) + mean = flow[2](h) + gate = F.sigmoid(flow[3](h) + self.forget_bias) + z = gate * z + (1 - gate) * mean + logdets += torch.sum(gate.log().view(gate.size(0), -1), 1) + return z, logdets diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/layers.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/layers.py new file mode 100644 index 0000000..e15c453 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/models/layers.py @@ -0,0 +1,209 @@ +import torch +import torch.nn as nn +from torch.nn.parameter import Parameter +import numpy as np +import torch.nn.functional as F + + +class Identity(nn.Module): + + def __init__(self): + super(Identity, self).__init__() + + def forward(self, x): + return x + + +class GatedConv2d(nn.Module): + + def __init__(self, input_channels, output_channels, kernel_size, stride, padding, dilation=1, activation=None): + super(GatedConv2d, self).__init__() + + self.activation = activation + self.sigmoid = nn.Sigmoid() + + self.h = nn.Conv2d(input_channels, output_channels, kernel_size, stride, padding, dilation) + self.g = nn.Conv2d(input_channels, output_channels, kernel_size, stride, padding, dilation) + + def forward(self, x): + if self.activation is None: + h = self.h(x) + else: + h = self.activation(self.h(x)) + + g = self.sigmoid(self.g(x)) + + return h * g + + +class GatedConvTranspose2d(nn.Module): + + def __init__( + self, input_channels, output_channels, kernel_size, stride, padding, output_padding=0, dilation=1, + activation=None + ): + super(GatedConvTranspose2d, self).__init__() + + self.activation = activation + self.sigmoid = nn.Sigmoid() + + self.h = nn.ConvTranspose2d( + input_channels, output_channels, kernel_size, stride, padding, output_padding, dilation=dilation + ) + self.g = nn.ConvTranspose2d( + input_channels, output_channels, kernel_size, stride, padding, output_padding, dilation=dilation + ) + + def forward(self, x): + if self.activation is None: + h = self.h(x) + else: + h = self.activation(self.h(x)) + + g = self.sigmoid(self.g(x)) + + return h * g + + +class MaskedLinear(nn.Module): + """ + Creates masked linear layer for MLP MADE. + For input (x) to hidden (h) or hidden to hidden layers choose diagonal_zeros = False. + For hidden to output (y) layers: + If output depends on input through y_i = f(x_{= n_in: + k = n_out // n_in + for i in range(n_in): + mask[i + 1:, i * k:(i + 1) * k] = 0 + if self.diagonal_zeros: + mask[i:i + 1, i * k:(i + 1) * k] = 0 + else: + k = n_in // n_out + for i in range(n_out): + mask[(i + 1) * k:, i:i + 1] = 0 + if self.diagonal_zeros: + mask[i * k:(i + 1) * k:, i:i + 1] = 0 + return mask + + def forward(self, x): + output = x.mm(self.mask * self.weight) + + if self.bias is not None: + return output.add(self.bias.expand_as(output)) + else: + return output + + def __repr__(self): + if self.bias is not None: + bias = True + else: + bias = False + return self.__class__.__name__ + ' (' \ + + str(self.in_features) + ' -> ' \ + + str(self.out_features) + ', diagonal_zeros=' \ + + str(self.diagonal_zeros) + ', bias=' \ + + str(bias) + ')' + + +class MaskedConv2d(nn.Module): + """ + Creates masked convolutional autoregressive layer for pixelCNN. + For input (x) to hidden (h) or hidden to hidden layers choose diagonal_zeros = False. + For hidden to output (y) layers: + If output depends on input through y_i = f(x_{= n_in: + k = n_out // n_in + for i in range(n_in): + mask[i * k:(i + 1) * k, i + 1:, l, m] = 0 + if self.diagonal_zeros: + mask[i * k:(i + 1) * k, i:i + 1, l, m] = 0 + else: + k = n_in // n_out + for i in range(n_out): + mask[i:i + 1, (i + 1) * k:, l, m] = 0 + if self.diagonal_zeros: + mask[i:i + 1, i * k:(i + 1) * k:, l, m] = 0 + + return mask + + def forward(self, x): + output = F.conv2d(x, self.mask * self.weight, bias=self.bias, padding=(1, 1)) + return output + + def __repr__(self): + if self.bias is not None: + bias = True + else: + bias = False + return self.__class__.__name__ + ' (' \ + + str(self.in_features) + ' -> ' \ + + str(self.out_features) + ', diagonal_zeros=' \ + + str(self.diagonal_zeros) + ', bias=' \ + + str(bias) + ', size_kernel=' \ + + str(self.size_kernel) + ')' diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/__init__.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/loss.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/loss.py new file mode 100644 index 0000000..4e56712 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/loss.py @@ -0,0 +1,271 @@ +from __future__ import print_function + +import numpy as np +import torch +import torch.nn as nn +from vae_lib.utils.distributions import log_normal_diag, log_normal_standard, log_bernoulli +import torch.nn.functional as F + + +def binary_loss_function(recon_x, x, z_mu, z_var, z_0, z_k, ldj, beta=1.): + """ + Computes the binary loss function while summing over batch dimension, not averaged! + :param recon_x: shape: (batch_size, num_channels, pixel_width, pixel_height), bernoulli parameters p(x=1) + :param x: shape (batchsize, num_channels, pixel_width, pixel_height), pixel values rescaled between [0, 1]. + :param z_mu: mean of z_0 + :param z_var: variance of z_0 + :param z_0: first stochastic latent variable + :param z_k: last stochastic latent variable + :param ldj: log det jacobian + :param beta: beta for kl loss + :return: loss, ce, kl + """ + + reconstruction_function = nn.BCELoss(size_average=False) + + batch_size = x.size(0) + + # - N E_q0 [ ln p(x|z_k) ] + bce = reconstruction_function(recon_x, x) + + # ln p(z_k) (not averaged) + log_p_zk = log_normal_standard(z_k, dim=1) + # ln q(z_0) (not averaged) + log_q_z0 = log_normal_diag(z_0, mean=z_mu, log_var=z_var.log(), dim=1) + # N E_q0[ ln q(z_0) - ln p(z_k) ] + summed_logs = torch.sum(log_q_z0 - log_p_zk) + + # sum over batches + summed_ldj = torch.sum(ldj) + + # ldj = N E_q_z0[\sum_k log |det dz_k/dz_k-1| ] + kl = (summed_logs - summed_ldj) + loss = bce + beta * kl + + loss /= float(batch_size) + bce /= float(batch_size) + kl /= float(batch_size) + + return loss, bce, kl + + +def multinomial_loss_function(x_logit, x, z_mu, z_var, z_0, z_k, ldj, args, beta=1.): + """ + Computes the cross entropy loss function while summing over batch dimension, not averaged! + :param x_logit: shape: (batch_size, num_classes * num_channels, pixel_width, pixel_height), real valued logits + :param x: shape (batchsize, num_channels, pixel_width, pixel_height), pixel values rescaled between [0, 1]. + :param z_mu: mean of z_0 + :param z_var: variance of z_0 + :param z_0: first stochastic latent variable + :param z_k: last stochastic latent variable + :param ldj: log det jacobian + :param args: global parameter settings + :param beta: beta for kl loss + :return: loss, ce, kl + """ + + num_classes = 256 + batch_size = x.size(0) + + x_logit = x_logit.view(batch_size, num_classes, args.input_size[0], args.input_size[1], args.input_size[2]) + + # make integer class labels + target = (x * (num_classes - 1)).long() + + # - N E_q0 [ ln p(x|z_k) ] + # sums over batch dimension (and feature dimension) + ce = cross_entropy(x_logit, target, size_average=False) + + # ln p(z_k) (not averaged) + log_p_zk = log_normal_standard(z_k, dim=1) + # ln q(z_0) (not averaged) + log_q_z0 = log_normal_diag(z_0, mean=z_mu, log_var=z_var.log(), dim=1) + # N E_q0[ ln q(z_0) - ln p(z_k) ] + summed_logs = torch.sum(log_q_z0 - log_p_zk) + + # sum over batches + summed_ldj = torch.sum(ldj) + + # ldj = N E_q_z0[\sum_k log |det dz_k/dz_k-1| ] + kl = (summed_logs - summed_ldj) + loss = ce + beta * kl + + loss /= float(batch_size) + ce /= float(batch_size) + kl /= float(batch_size) + + return loss, ce, kl + + +def binary_loss_array(recon_x, x, z_mu, z_var, z_0, z_k, ldj, beta=1.): + """ + Computes the binary loss without averaging or summing over the batch dimension. + """ + + batch_size = x.size(0) + + # if not summed over batch_dimension + if len(ldj.size()) > 1: + ldj = ldj.view(ldj.size(0), -1).sum(-1) + + # TODO: upgrade to newest pytorch version on master branch, there the nn.BCELoss comes with the option + # reduce, which when set to False, does no sum over batch dimension. + bce = -log_bernoulli(x.view(batch_size, -1), recon_x.view(batch_size, -1), dim=1) + # ln p(z_k) (not averaged) + log_p_zk = log_normal_standard(z_k, dim=1) + # ln q(z_0) (not averaged) + log_q_z0 = log_normal_diag(z_0, mean=z_mu, log_var=z_var.log(), dim=1) + # ln q(z_0) - ln p(z_k) ] + logs = log_q_z0 - log_p_zk + + loss = bce + beta * (logs - ldj) + + return loss + + +def multinomial_loss_array(x_logit, x, z_mu, z_var, z_0, z_k, ldj, args, beta=1.): + """ + Computes the discritezed logistic loss without averaging or summing over the batch dimension. + """ + + num_classes = 256 + batch_size = x.size(0) + + x_logit = x_logit.view(batch_size, num_classes, args.input_size[0], args.input_size[1], args.input_size[2]) + + # make integer class labels + target = (x * (num_classes - 1)).long() + + # - N E_q0 [ ln p(x|z_k) ] + # computes cross entropy over all dimensions separately: + ce = cross_entropy(x_logit, target, size_average=False, reduce=False) + # sum over feature dimension + ce = ce.view(batch_size, -1).sum(dim=1) + + # ln p(z_k) (not averaged) + log_p_zk = log_normal_standard(z_k.view(batch_size, -1), dim=1) + # ln q(z_0) (not averaged) + log_q_z0 = log_normal_diag( + z_0.view(batch_size, -1), mean=z_mu.view(batch_size, -1), log_var=z_var.log().view(batch_size, -1), dim=1 + ) + + # ln q(z_0) - ln p(z_k) ] + logs = log_q_z0 - log_p_zk + + loss = ce + beta * (logs - ldj) + + return loss + + +def cross_entropy(input, target, weight=None, size_average=True, ignore_index=-100, reduce=True): + r""" + Taken from the master branch of pytorch, accepts (N, C, d_1, d_2, ..., d_K) input shapes + instead of only (N, C, d_1, d_2) or (N, C). + This criterion combines `log_softmax` and `nll_loss` in a single + function. + See :class:`~torch.nn.CrossEntropyLoss` for details. + Args: + input: Variable :math:`(N, C)` where `C = number of classes` + target: Variable :math:`(N)` where each value is + `0 <= targets[i] <= C-1` + weight (Tensor, optional): a manual rescaling weight given to each + class. If given, has to be a Tensor of size `C` + size_average (bool, optional): By default, the losses are averaged + over observations for each minibatch. However, if the field + sizeAverage is set to False, the losses are instead summed + for each minibatch. Ignored if reduce is False. Default: ``True`` + ignore_index (int, optional): Specifies a target value that is ignored + and does not contribute to the input gradient. When size_average is + True, the loss is averaged over non-ignored targets. Default: -100 + reduce (bool, optional): By default, the losses are averaged or summed over + observations for each minibatch depending on size_average. When reduce + is False, returns a loss per batch element instead and ignores + size_average. Default: ``True`` + """ + return nll_loss(F.log_softmax(input, 1), target, weight, size_average, ignore_index, reduce) + + +def nll_loss(input, target, weight=None, size_average=True, ignore_index=-100, reduce=True): + r""" + Taken from the master branch of pytorch, accepts (N, C, d_1, d_2, ..., d_K) input shapes + instead of only (N, C, d_1, d_2) or (N, C). + The negative log likelihood loss. + See :class:`~torch.nn.NLLLoss` for details. + Args: + input: :math:`(N, C)` where `C = number of classes` or :math:`(N, C, H, W)` + in case of 2D Loss, or :math:`(N, C, d_1, d_2, ..., d_K)` where :math:`K > 1` + in the case of K-dimensional loss. + target: :math:`(N)` where each value is `0 <= targets[i] <= C-1`, + or :math:`(N, C, d_1, d_2, ..., d_K)` where :math:`K >= 1` for + K-dimensional loss. + weight (Tensor, optional): a manual rescaling weight given to each + class. If given, has to be a Tensor of size `C` + size_average (bool, optional): By default, the losses are averaged + over observations for each minibatch. If size_average + is False, the losses are summed for each minibatch. Default: ``True`` + ignore_index (int, optional): Specifies a target value that is ignored + and does not contribute to the input gradient. When size_average is + True, the loss is averaged over non-ignored targets. Default: -100 + """ + dim = input.dim() + if dim == 2: + return F.nll_loss( + input, target, weight=weight, size_average=size_average, ignore_index=ignore_index, reduce=reduce + ) + elif dim == 4: + return F.nll_loss( + input, target, weight=weight, size_average=size_average, ignore_index=ignore_index, reduce=reduce + ) + elif dim == 3 or dim > 4: + n = input.size(0) + c = input.size(1) + out_size = (n,) + input.size()[2:] + if target.size()[1:] != input.size()[2:]: + raise ValueError('Expected target size {}, got {}'.format(out_size, input.size())) + input = input.contiguous().view(n, c, 1, -1) + target = target.contiguous().view(n, 1, -1) + if reduce: + _loss = nn.NLLLoss2d(weight=weight, size_average=size_average, ignore_index=ignore_index, reduce=reduce) + return _loss(input, target) + out = F.nll_loss( + input, target, weight=weight, size_average=size_average, ignore_index=ignore_index, reduce=reduce + ) + return out.view(out_size) + else: + raise ValueError('Expected 2 or more dimensions (got {})'.format(dim)) + + +def calculate_loss(x_mean, x, z_mu, z_var, z_0, z_k, ldj, args, beta=1.): + """ + Picks the correct loss depending on the input type. + """ + + if args.input_type == 'binary': + loss, rec, kl = binary_loss_function(x_mean, x, z_mu, z_var, z_0, z_k, ldj, beta=beta) + bpd = 0. + + elif args.input_type == 'multinomial': + loss, rec, kl = multinomial_loss_function(x_mean, x, z_mu, z_var, z_0, z_k, ldj, args, beta=beta) + bpd = loss.data[0] / (np.prod(args.input_size) * np.log(2.)) + + else: + raise ValueError('Invalid input type for calculate loss: %s.' % args.input_type) + + return loss, rec, kl, bpd + + +def calculate_loss_array(x_mean, x, z_mu, z_var, z_0, z_k, ldj, args): + """ + Picks the correct loss depending on the input type. + """ + + if args.input_type == 'binary': + loss = binary_loss_array(x_mean, x, z_mu, z_var, z_0, z_k, ldj) + + elif args.input_type == 'multinomial': + loss = multinomial_loss_array(x_mean, x, z_mu, z_var, z_0, z_k, ldj, args) + + else: + raise ValueError('Invalid input type for calculate loss: %s.' % args.input_type) + + return loss diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/training.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/training.py new file mode 100644 index 0000000..e6f4b37 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/optimization/training.py @@ -0,0 +1,171 @@ +from __future__ import print_function +import time +import torch + +from vae_lib.optimization.loss import calculate_loss +from vae_lib.utils.visual_evaluation import plot_reconstructions +from vae_lib.utils.log_likelihood import calculate_likelihood + +import numpy as np +from train_misc import count_nfe, override_divergence_fn + + +def train(epoch, train_loader, model, opt, args, logger): + + model.train() + train_loss = np.zeros(len(train_loader)) + train_bpd = np.zeros(len(train_loader)) + + num_data = 0 + + # set warmup coefficient + beta = min([(epoch * 1.) / max([args.warmup, 1.]), args.max_beta]) + logger.info('beta = {:5.4f}'.format(beta)) + end = time.time() + for batch_idx, (data, _) in enumerate(train_loader): + if args.cuda: + data = data.cuda() + + if args.dynamic_binarization: + data = torch.bernoulli(data) + + data = data.view(-1, *args.input_size) + + opt.zero_grad() + x_mean, z_mu, z_var, ldj, z0, zk = model(data) + + if 'cnf' in args.flow: + f_nfe = count_nfe(model) + + loss, rec, kl, bpd = calculate_loss(x_mean, data, z_mu, z_var, z0, zk, ldj, args, beta=beta) + + loss.backward() + + if 'cnf' in args.flow: + t_nfe = count_nfe(model) + b_nfe = t_nfe - f_nfe + + train_loss[batch_idx] = loss.item() + train_bpd[batch_idx] = bpd + + opt.step() + + rec = rec.item() + kl = kl.item() + + num_data += len(data) + + batch_time = time.time() - end + end = time.time() + + if batch_idx % args.log_interval == 0: + if args.input_type == 'binary': + perc = 100. * batch_idx / len(train_loader) + log_msg = ( + 'Epoch {:3d} [{:5d}/{:5d} ({:2.0f}%)] | Time {:.3f} | Loss {:11.6f} | ' + 'Rec {:11.6f} | KL {:11.6f}'.format( + epoch, num_data, len(train_loader.sampler), perc, batch_time, loss.item(), rec, kl + ) + ) + else: + perc = 100. * batch_idx / len(train_loader) + tmp = 'Epoch {:3d} [{:5d}/{:5d} ({:2.0f}%)] | Time {:.3f} | Loss {:11.6f} | Bits/dim {:8.6f}' + log_msg = tmp.format(epoch, num_data, len(train_loader.sampler), perc, batch_time, loss.item(), + bpd), '\trec: {:11.3f}\tkl: {:11.6f}'.format(rec, kl) + log_msg = "".join(log_msg) + if 'cnf' in args.flow: + log_msg += ' | NFE Forward {} | NFE Backward {}'.format(f_nfe, b_nfe) + logger.info(log_msg) + + if args.input_type == 'binary': + logger.info('====> Epoch: {:3d} Average train loss: {:.4f}'.format(epoch, train_loss.sum() / len(train_loader))) + else: + logger.info( + '====> Epoch: {:3d} Average train loss: {:.4f}, average bpd: {:.4f}'. + format(epoch, train_loss.sum() / len(train_loader), train_bpd.sum() / len(train_loader)) + ) + + return train_loss + + +def evaluate(data_loader, model, args, logger, testing=False, epoch=0): + model.eval() + loss = 0. + batch_idx = 0 + bpd = 0. + + if args.input_type == 'binary': + loss_type = 'elbo' + else: + loss_type = 'bpd' + + if testing and 'cnf' in args.flow: + override_divergence_fn(model, "brute_force") + + for data, _ in data_loader: + batch_idx += 1 + + if args.cuda: + data = data.cuda() + + with torch.no_grad(): + data = data.view(-1, *args.input_size) + + x_mean, z_mu, z_var, ldj, z0, zk = model(data) + + batch_loss, rec, kl, batch_bpd = calculate_loss(x_mean, data, z_mu, z_var, z0, zk, ldj, args) + + bpd += batch_bpd + loss += batch_loss.item() + + # PRINT RECONSTRUCTIONS + if batch_idx == 1 and testing is False: + plot_reconstructions(data, x_mean, batch_loss, loss_type, epoch, args) + + loss /= len(data_loader) + bpd /= len(data_loader) + + if testing: + logger.info('====> Test set loss: {:.4f}'.format(loss)) + + # Compute log-likelihood + if testing and not ("cnf" in args.flow): # don't compute log-likelihood for cnf models + + with torch.no_grad(): + test_data = data_loader.dataset.tensors[0] + + if args.cuda: + test_data = test_data.cuda() + + logger.info('Computing log-likelihood on test set') + + model.eval() + + if args.dataset == 'caltech': + log_likelihood, nll_bpd = calculate_likelihood(test_data, model, args, logger, S=2000, MB=500) + else: + log_likelihood, nll_bpd = calculate_likelihood(test_data, model, args, logger, S=5000, MB=500) + + if 'cnf' in args.flow: + override_divergence_fn(model, args.divergence_fn) + else: + log_likelihood = None + nll_bpd = None + + if args.input_type in ['multinomial']: + bpd = loss / (np.prod(args.input_size) * np.log(2.)) + + if testing and not ("cnf" in args.flow): + logger.info('====> Test set log-likelihood: {:.4f}'.format(log_likelihood)) + + if args.input_type != 'binary': + logger.info('====> Test set bpd (elbo): {:.4f}'.format(bpd)) + logger.info( + '====> Test set bpd (log-likelihood): {:.4f}'. + format(log_likelihood / (np.prod(args.input_size) * np.log(2.))) + ) + + if not testing: + return loss, bpd + else: + return log_likelihood, nll_bpd diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/__init__.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/distributions.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/distributions.py new file mode 100644 index 0000000..c58e4bc --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/distributions.py @@ -0,0 +1,65 @@ +from __future__ import print_function +import torch +import torch.utils.data + +import math + +MIN_EPSILON = 1e-5 +MAX_EPSILON = 1. - 1e-5 + +PI = torch.FloatTensor([math.pi]) +if torch.cuda.is_available(): + PI = PI.cuda() + +# N(x | mu, var) = 1/sqrt{2pi var} exp[-1/(2 var) (x-mean)(x-mean)] +# log N(x| mu, var) = -log sqrt(2pi) -0.5 log var - 0.5 (x-mean)(x-mean)/var + + +def log_normal_diag(x, mean, log_var, average=False, reduce=True, dim=None): + log_norm = -0.5 * (log_var + (x - mean) * (x - mean) * log_var.exp().reciprocal()) + if reduce: + if average: + return torch.mean(log_norm, dim) + else: + return torch.sum(log_norm, dim) + else: + return log_norm + + +def log_normal_normalized(x, mean, log_var, average=False, reduce=True, dim=None): + log_norm = -(x - mean) * (x - mean) + log_norm *= torch.reciprocal(2. * log_var.exp()) + log_norm += -0.5 * log_var + log_norm += -0.5 * torch.log(2. * PI) + + if reduce: + if average: + return torch.mean(log_norm, dim) + else: + return torch.sum(log_norm, dim) + else: + return log_norm + + +def log_normal_standard(x, average=False, reduce=True, dim=None): + log_norm = -0.5 * x * x + + if reduce: + if average: + return torch.mean(log_norm, dim) + else: + return torch.sum(log_norm, dim) + else: + return log_norm + + +def log_bernoulli(x, mean, average=False, reduce=True, dim=None): + probs = torch.clamp(mean, min=MIN_EPSILON, max=MAX_EPSILON) + log_bern = x * torch.log(probs) + (1. - x) * torch.log(1. - probs) + if reduce: + if average: + return torch.mean(log_bern, dim) + else: + return torch.sum(log_bern, dim) + else: + return log_bern diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/load_data.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/load_data.py new file mode 100644 index 0000000..ad1a836 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/load_data.py @@ -0,0 +1,205 @@ +from __future__ import print_function + +import torch +import torch.utils.data as data_utils +import pickle +from scipy.io import loadmat + +import numpy as np + +import os + + +def load_static_mnist(args, **kwargs): + """ + Dataloading function for static mnist. Outputs image data in vectorized form: each image is a vector of size 784 + """ + args.dynamic_binarization = False + args.input_type = 'binary' + + args.input_size = [1, 28, 28] + + # start processing + def lines_to_np_array(lines): + return np.array([[int(i) for i in line.split()] for line in lines]) + + with open(os.path.join('data', 'MNIST_static', 'binarized_mnist_train.amat')) as f: + lines = f.readlines() + x_train = lines_to_np_array(lines).astype('float32') + with open(os.path.join('data', 'MNIST_static', 'binarized_mnist_valid.amat')) as f: + lines = f.readlines() + x_val = lines_to_np_array(lines).astype('float32') + with open(os.path.join('data', 'MNIST_static', 'binarized_mnist_test.amat')) as f: + lines = f.readlines() + x_test = lines_to_np_array(lines).astype('float32') + + # shuffle train data + np.random.shuffle(x_train) + + # idle y's + y_train = np.zeros((x_train.shape[0], 1)) + y_val = np.zeros((x_val.shape[0], 1)) + y_test = np.zeros((x_test.shape[0], 1)) + + # pytorch data loader + train = data_utils.TensorDataset(torch.from_numpy(x_train), torch.from_numpy(y_train)) + train_loader = data_utils.DataLoader(train, batch_size=args.batch_size, shuffle=True, **kwargs) + + validation = data_utils.TensorDataset(torch.from_numpy(x_val).float(), torch.from_numpy(y_val)) + val_loader = data_utils.DataLoader(validation, batch_size=args.batch_size, shuffle=False, **kwargs) + + test = data_utils.TensorDataset(torch.from_numpy(x_test).float(), torch.from_numpy(y_test)) + test_loader = data_utils.DataLoader(test, batch_size=args.batch_size, shuffle=False, **kwargs) + + return train_loader, val_loader, test_loader, args + + +def load_freyfaces(args, **kwargs): + # set args + args.input_size = [1, 28, 20] + args.input_type = 'multinomial' + args.dynamic_binarization = False + + TRAIN = 1565 + VAL = 200 + TEST = 200 + + # start processing + with open('data/Freyfaces/freyfaces.pkl', 'rb') as f: + data = pickle.load(f, encoding="latin1")[0] + + data = data / 255. + + # NOTE: shuffling is done before splitting into train and test set, so test set is different for every run! + # shuffle data: + np.random.seed(args.freyseed) + + np.random.shuffle(data) + + # train images + x_train = data[0:TRAIN].reshape(-1, 28 * 20) + # validation images + x_val = data[TRAIN:(TRAIN + VAL)].reshape(-1, 28 * 20) + # test images + x_test = data[(TRAIN + VAL):(TRAIN + VAL + TEST)].reshape(-1, 28 * 20) + + # idle y's + y_train = np.zeros((x_train.shape[0], 1)) + y_val = np.zeros((x_val.shape[0], 1)) + y_test = np.zeros((x_test.shape[0], 1)) + + # pytorch data loader + train = data_utils.TensorDataset(torch.from_numpy(x_train).float(), torch.from_numpy(y_train)) + train_loader = data_utils.DataLoader(train, batch_size=args.batch_size, shuffle=True, **kwargs) + + validation = data_utils.TensorDataset(torch.from_numpy(x_val).float(), torch.from_numpy(y_val)) + val_loader = data_utils.DataLoader(validation, batch_size=args.batch_size, shuffle=False, **kwargs) + + test = data_utils.TensorDataset(torch.from_numpy(x_test).float(), torch.from_numpy(y_test)) + test_loader = data_utils.DataLoader(test, batch_size=args.batch_size, shuffle=False, **kwargs) + return train_loader, val_loader, test_loader, args + + +def load_omniglot(args, **kwargs): + n_validation = 1345 + + # set args + args.input_size = [1, 28, 28] + args.input_type = 'binary' + args.dynamic_binarization = True + + # start processing + def reshape_data(data): + return data.reshape((-1, 28, 28)).reshape((-1, 28 * 28), order='F') + + omni_raw = loadmat(os.path.join('data', 'OMNIGLOT', 'chardata.mat')) + + # train and test data + train_data = reshape_data(omni_raw['data'].T.astype('float32')) + x_test = reshape_data(omni_raw['testdata'].T.astype('float32')) + + # shuffle train data + np.random.shuffle(train_data) + + # set train and validation data + x_train = train_data[:-n_validation] + x_val = train_data[-n_validation:] + + # binarize + if args.dynamic_binarization: + args.input_type = 'binary' + np.random.seed(777) + x_val = np.random.binomial(1, x_val) + x_test = np.random.binomial(1, x_test) + else: + args.input_type = 'gray' + + # idle y's + y_train = np.zeros((x_train.shape[0], 1)) + y_val = np.zeros((x_val.shape[0], 1)) + y_test = np.zeros((x_test.shape[0], 1)) + + # pytorch data loader + train = data_utils.TensorDataset(torch.from_numpy(x_train), torch.from_numpy(y_train)) + train_loader = data_utils.DataLoader(train, batch_size=args.batch_size, shuffle=True, **kwargs) + + validation = data_utils.TensorDataset(torch.from_numpy(x_val).float(), torch.from_numpy(y_val)) + val_loader = data_utils.DataLoader(validation, batch_size=args.batch_size, shuffle=False, **kwargs) + + test = data_utils.TensorDataset(torch.from_numpy(x_test).float(), torch.from_numpy(y_test)) + test_loader = data_utils.DataLoader(test, batch_size=args.batch_size, shuffle=False, **kwargs) + + return train_loader, val_loader, test_loader, args + + +def load_caltech101silhouettes(args, **kwargs): + # set args + args.input_size = [1, 28, 28] + args.input_type = 'binary' + args.dynamic_binarization = False + + # start processing + def reshape_data(data): + return data.reshape((-1, 28, 28)).reshape((-1, 28 * 28), order='F') + + caltech_raw = loadmat(os.path.join('data', 'Caltech101Silhouettes', 'caltech101_silhouettes_28_split1.mat')) + + # train, validation and test data + x_train = 1. - reshape_data(caltech_raw['train_data'].astype('float32')) + np.random.shuffle(x_train) + x_val = 1. - reshape_data(caltech_raw['val_data'].astype('float32')) + np.random.shuffle(x_val) + x_test = 1. - reshape_data(caltech_raw['test_data'].astype('float32')) + + y_train = caltech_raw['train_labels'] + y_val = caltech_raw['val_labels'] + y_test = caltech_raw['test_labels'] + + # pytorch data loader + train = data_utils.TensorDataset(torch.from_numpy(x_train), torch.from_numpy(y_train)) + train_loader = data_utils.DataLoader(train, batch_size=args.batch_size, shuffle=True, **kwargs) + + validation = data_utils.TensorDataset(torch.from_numpy(x_val).float(), torch.from_numpy(y_val)) + val_loader = data_utils.DataLoader(validation, batch_size=args.batch_size, shuffle=False, **kwargs) + + test = data_utils.TensorDataset(torch.from_numpy(x_test).float(), torch.from_numpy(y_test)) + test_loader = data_utils.DataLoader(test, batch_size=args.batch_size, shuffle=False, **kwargs) + + return train_loader, val_loader, test_loader, args + + +def load_dataset(args, **kwargs): + + if args.dataset == 'mnist': + train_loader, val_loader, test_loader, args = load_static_mnist(args, **kwargs) + elif args.dataset == 'caltech': + train_loader, val_loader, test_loader, args = load_caltech101silhouettes(args, **kwargs) + + elif args.dataset == 'freyfaces': + train_loader, val_loader, test_loader, args = load_freyfaces(args, **kwargs) + elif args.dataset == 'omniglot': + train_loader, val_loader, test_loader, args = load_omniglot(args, **kwargs) + else: + raise Exception('Wrong name of the dataset!') + + return train_loader, val_loader, test_loader, args diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/log_likelihood.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/log_likelihood.py new file mode 100644 index 0000000..b5461b4 --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/log_likelihood.py @@ -0,0 +1,60 @@ +from __future__ import print_function +import time +import numpy as np +from scipy.misc import logsumexp +from vae_lib.optimization.loss import calculate_loss_array + + +def calculate_likelihood(X, model, args, logger, S=5000, MB=500): + + # set auxiliary variables for number of training and test sets + N_test = X.size(0) + + X = X.view(-1, *args.input_size) + + likelihood_test = [] + + if S <= MB: + R = 1 + else: + R = S // MB + S = MB + + end = time.time() + for j in range(N_test): + + x_single = X[j].unsqueeze(0) + + a = [] + for r in range(0, R): + # Repeat it for all training points + x = x_single.expand(S, *x_single.size()[1:]).contiguous() + + x_mean, z_mu, z_var, ldj, z0, zk = model(x) + + a_tmp = calculate_loss_array(x_mean, x, z_mu, z_var, z0, zk, ldj, args) + + a.append(-a_tmp.cpu().data.numpy()) + + # calculate max + a = np.asarray(a) + a = np.reshape(a, (a.shape[0] * a.shape[1], 1)) + likelihood_x = logsumexp(a) + likelihood_test.append(likelihood_x - np.log(len(a))) + + if j % 1 == 0: + logger.info('Progress: {:.2f}% | Time: {:.4f}'.format(j / (1. * N_test) * 100, time.time() - end)) + end = time.time() + + likelihood_test = np.array(likelihood_test) + + nll = -np.mean(likelihood_test) + + if args.input_type == 'multinomial': + bpd = nll / (np.prod(args.input_size) * np.log(2.)) + elif args.input_type == 'binary': + bpd = 0. + else: + raise ValueError('invalid input type!') + + return nll, bpd diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/plotting.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/plotting.py new file mode 100644 index 0000000..e5c614f --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/plotting.py @@ -0,0 +1,104 @@ +from __future__ import division +from __future__ import print_function + +import numpy as np +import matplotlib +# noninteractive background +matplotlib.use('Agg') +import matplotlib.pyplot as plt + + +def plot_training_curve(train_loss, validation_loss, fname='training_curve.pdf', labels=None): + """ + Plots train_loss and validation loss as a function of optimization iteration + :param train_loss: np.array of train_loss (1D or 2D) + :param validation_loss: np.array of validation loss (1D or 2D) + :param fname: output file name + :param labels: if train_loss and validation loss are 2D, then labels indicate which variable is varied + accross training curves. + :return: None + """ + + plt.close() + + matplotlib.rcParams.update({'font.size': 14}) + matplotlib.rcParams['mathtext.fontset'] = 'stix' + matplotlib.rcParams['font.family'] = 'STIXGeneral' + + if len(train_loss.shape) == 1: + # Single training curve + fig, ax = plt.subplots(nrows=1, ncols=1) + figsize = (6, 4) + + if train_loss.shape[0] == validation_loss.shape[0]: + # validation score evaluated every iteration + x = np.arange(train_loss.shape[0]) + ax.plot(x, train_loss, '-', lw=2., color='black', label='train') + ax.plot(x, validation_loss, '-', lw=2., color='blue', label='val') + + elif train_loss.shape[0] % validation_loss.shape[0] == 0: + # validation score evaluated every epoch + x = np.arange(train_loss.shape[0]) + ax.plot(x, train_loss, '-', lw=2., color='black', label='train') + + x = np.arange(validation_loss.shape[0]) + x = (x + 1) * train_loss.shape[0] / validation_loss.shape[0] + ax.plot(x, validation_loss, '-', lw=2., color='blue', label='val') + else: + raise ValueError('Length of train_loss and validation_loss must be equal or divisible') + + miny = np.minimum(validation_loss.min(), train_loss.min()) - 20. + maxy = np.maximum(validation_loss.max(), train_loss.max()) + 30. + ax.set_ylim([miny, maxy]) + + elif len(train_loss.shape) == 2: + # Multiple training curves + + cmap = plt.cm.brg + + cNorm = matplotlib.colors.Normalize(vmin=0, vmax=train_loss.shape[0]) + scalarMap = matplotlib.cm.ScalarMappable(norm=cNorm, cmap=cmap) + + fig, ax = plt.subplots(nrows=1, ncols=1) + figsize = (6, 4) + + if labels is None: + labels = ['%d' % i for i in range(train_loss.shape[0])] + + if train_loss.shape[1] == validation_loss.shape[1]: + for i in range(train_loss.shape[0]): + color_val = scalarMap.to_rgba(i) + + # validation score evaluated every iteration + x = np.arange(train_loss.shape[0]) + ax.plot(x, train_loss[i], '-', lw=2., color=color_val, label=labels[i]) + ax.plot(x, validation_loss[i], '--', lw=2., color=color_val) + + elif train_loss.shape[1] % validation_loss.shape[1] == 0: + for i in range(train_loss.shape[0]): + color_val = scalarMap.to_rgba(i) + + # validation score evaluated every epoch + x = np.arange(train_loss.shape[1]) + ax.plot(x, train_loss[i], '-', lw=2., color=color_val, label=labels[i]) + + x = np.arange(validation_loss.shape[1]) + x = (x + 1) * train_loss.shape[1] / validation_loss.shape[1] + ax.plot(x, validation_loss[i], '-', lw=2., color=color_val) + + miny = np.minimum(validation_loss.min(), train_loss.min()) - 20. + maxy = np.maximum(validation_loss.max(), train_loss.max()) + 30. + ax.set_ylim([miny, maxy]) + + else: + raise ValueError('train_loss and validation_loss must be 1D or 2D arrays') + + ax.set_xlabel('iteration') + ax.set_ylabel('loss') + plt.title('Training and validation loss') + + fig.set_size_inches(figsize) + fig.subplots_adjust(hspace=0.1) + plt.savefig(fname, bbox_inches='tight') + + plt.close() diff --git a/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/visual_evaluation.py b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/visual_evaluation.py new file mode 100644 index 0000000..1281dea --- /dev/null +++ b/src/torchprune/torchprune/util/external/ffjord/vae_lib/utils/visual_evaluation.py @@ -0,0 +1,53 @@ +from __future__ import print_function +import os +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt +import matplotlib.gridspec as gridspec + + +def plot_reconstructions(data, recon_mean, loss, loss_type, epoch, args): + + if args.input_type == 'multinomial': + # data is already between 0 and 1 + num_classes = 256 + # Find largest class logit + tmp = recon_mean.view(-1, num_classes, *args.input_size).max(dim=1)[1] + recon_mean = tmp.float() / (num_classes - 1.) + if epoch == 1: + if not os.path.exists(args.snap_dir + 'reconstruction/'): + os.makedirs(args.snap_dir + 'reconstruction/') + # VISUALIZATION: plot real images + plot_images(args, data.data.cpu().numpy()[0:9], args.snap_dir + 'reconstruction/', 'real', size_x=3, size_y=3) + # VISUALIZATION: plot reconstructions + if loss_type == 'bpd': + fname = str(epoch) + '_bpd_%5.3f' % loss + elif loss_type == 'elbo': + fname = str(epoch) + '_elbo_%6.4f' % loss + plot_images(args, recon_mean.data.cpu().numpy()[0:9], args.snap_dir + 'reconstruction/', fname, size_x=3, size_y=3) + + +def plot_images(args, x_sample, dir, file_name, size_x=3, size_y=3): + + fig = plt.figure(figsize=(size_x, size_y)) + # fig = plt.figure(1) + gs = gridspec.GridSpec(size_x, size_y) + gs.update(wspace=0.05, hspace=0.05) + + for i, sample in enumerate(x_sample): + ax = plt.subplot(gs[i]) + plt.axis('off') + ax.set_xticklabels([]) + ax.set_yticklabels([]) + ax.set_aspect('equal') + sample = sample.reshape((args.input_size[0], args.input_size[1], args.input_size[2])) + sample = sample.swapaxes(0, 2) + sample = sample.swapaxes(0, 1) + if (args.input_type == 'binary') or (args.input_type in ['multinomial'] and args.input_size[0] == 1): + sample = sample[:, :, 0] + plt.imshow(sample, cmap='gray', vmin=0, vmax=1) + else: + plt.imshow(sample) + + plt.savefig(dir + file_name + '.png', bbox_inches='tight') + plt.close(fig) diff --git a/src/torchprune/torchprune/util/metrics.py b/src/torchprune/torchprune/util/metrics.py index 8349f3b..39f2b5f 100644 --- a/src/torchprune/torchprune/util/metrics.py +++ b/src/torchprune/torchprune/util/metrics.py @@ -4,6 +4,8 @@ from scipy import stats import torch +from .nn_loss import NLLPriorLoss, NLLNatsLoss, NLLBitsLoss + class AbstractMetric(ABC): """Functor template for metric.""" @@ -29,7 +31,7 @@ def __call__(self, output, target): # check if output is dict if isinstance(output, dict): if "out" in output: - # Segmentation networks + # Segmentation networks and ffjord networks output = output["out"] elif "logits" in output: # BERT @@ -263,3 +265,60 @@ def short_name(self): def _get_metric(self, output, target): """Compute metric and return as 0d tensor.""" return torch.tensor(0.0) + + +class NLLPrior(AbstractMetric): + """A wrapper for the NLLPriorLoss as metric.""" + + @property + def name(self): + """Get the display name of this metric.""" + return "Negative Log Likelihood" + + @property + def short_name(self): + """Get the short name of this metric.""" + return "NLL" + + def _get_metric(self, output, target): + """Compute metric and return as 0d tensor.""" + # since for the metric higher is better we negate the loss + return -(NLLPriorLoss()(output["output"], target)) + + def __call__(self, output, target): + """Call metric like output but wrap output so we keep dictionary.""" + return super().__call__({"output": output}, target) + + +class NLLNats(NLLPrior): + """A wrapper for the NLLNatsLoss as metric.""" + + @property + def name(self): + """Get the display name of this metric.""" + return "Negative Log Probability (nats)" + + @property + def short_name(self): + """Get the short name of this metric.""" + return "Nats" + + def _get_metric(self, output, target): + return -(NLLNatsLoss()(output["output"], target)) + + +class NLLBits(NLLPrior): + """A wrapper for the NLLBitsLoss as metric.""" + + @property + def name(self): + """Get the display name of this metric.""" + return "Negative Log Probability (bits/dim)" + + @property + def short_name(self): + """Get the short name of this metric.""" + return "Bits" + + def _get_metric(self, output, target): + return -(NLLBitsLoss()(output["output"], target)) diff --git a/src/torchprune/torchprune/util/models/__init__.py b/src/torchprune/torchprune/util/models/__init__.py index 94d9b5b..fb86d1b 100644 --- a/src/torchprune/torchprune/util/models/__init__.py +++ b/src/torchprune/torchprune/util/models/__init__.py @@ -1,13 +1,18 @@ # flake8: noqa: F401, F403 """Package with all custom net implementation and CIFAR nets.""" # import custom nets -from .fcnet import FCNet, lenet300_100, lenet500_300_100 +from .fcnet import FCNet, lenet300_100, lenet500_300_100, fcnet_nettrim from .lenet5 import lenet5 from .deepknight import deepknight from .deeplab import * from .cnn60k import cnn60k from .cnn5 import cnn5 from .bert import bert +from .node import * +from .cnf import * +from .ffjord import * +from .ffjord_tabular import * +from .ffjord_cnf import * # import cifar nets from ..external.cnn.models.cifar import * diff --git a/src/torchprune/torchprune/util/models/cnf.py b/src/torchprune/torchprune/util/models/cnf.py new file mode 100644 index 0000000..1e8cbfa --- /dev/null +++ b/src/torchprune/torchprune/util/models/cnf.py @@ -0,0 +1,452 @@ +"""Module containing various FFjord NODE configurations with torchdyn lib.""" + +import torch +import torch.nn as nn +from torchdyn.models import autograd_trace + +from .ffjord import Ffjord + + +class VanillaCNF(Ffjord): + """Neural ODEs for CNFs via brute-force trace estimator.""" + + @property + def trace_estimator(self): + """Return the desired trace estimator.""" + return autograd_trace + + +def cnf_l4_h64_sigmoid(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Sigmoid, + ) + + +def cnf_l4_h64_softplus(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and softplus.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Softplus, + ) + + +def cnf_l4_h64_tanh(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and tanh.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Tanh, + ) + + +def cnf_l4_h64_relu(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and relu.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.ReLU, + ) + + +def cnf_l8_h64_sigmoid(num_classes): + """Return a brute-force CNF with 8 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=8, + hidden_size=64, + module_activate=nn.Sigmoid, + ) + + +def cnf_l2_h128_sigmoid(num_classes): + """Return a brute-force CNF with 2 layers, 128 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=2, + hidden_size=128, + module_activate=nn.Sigmoid, + ) + + +def cnf_l2_h64_sigmoid(num_classes): + """Return a brute-force CNF with 2 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=2, + hidden_size=64, + module_activate=nn.Sigmoid, + ) + + +def cnf_l4_h64_sigmoid_dopri_adjoint(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l4_h64_sigmoid_dopri_autograd(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="autograd", + solver="dopri5", + ) + + +def cnf_l4_h64_sigmoid_rk4_autograd(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 20), + sensitivity="autograd", + solver="rk4", + ) + + +def cnf_l4_h64_sigmoid_rk4_adjoint(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 20), + sensitivity="adjoint", + solver="rk4", + ) + + +def cnf_l4_h64_sigmoid_euler_autograd(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 100), + sensitivity="autograd", + solver="euler", + ) + + +def cnf_l4_h64_sigmoid_euler_adjoint(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 100), + sensitivity="adjoint", + solver="euler", + ) + + +def cnf_l4_h64_sigmoid_da(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l4_h64_softplus_da(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and softplus.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Softplus, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l4_h64_tanh_da(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and tanh.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Tanh, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l4_h64_relu_da(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and relu.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.ReLU, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l8_h64_sigmoid_da(num_classes): + """Return a brute-force CNF with 8 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=8, + hidden_size=64, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l8_h37_sigmoid_da(num_classes): + """Return a brute-force CNF with 8 layers, 37 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=8, + hidden_size=37, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l8_h18_sigmoid_da(num_classes): + """Return a brute-force CNF with 8 layers, 18 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=8, + hidden_size=18, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l8_h10_sigmoid_da(num_classes): + """Return a brute-force CNF with 8 layers, 10 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=8, + hidden_size=10, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l6_h45_sigmoid_da(num_classes): + """Return a brute-force CNF with 6 layers, 45 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=6, + hidden_size=45, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l6_h22_sigmoid_da(num_classes): + """Return a brute-force CNF with 6 layers, 22 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=6, + hidden_size=22, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l6_h12_sigmoid_da(num_classes): + """Return a brute-force CNF with 6 layers, 12 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=6, + hidden_size=12, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l4_h128_sigmoid_da(num_classes): + """Return a brute-force CNF with 4 layers, 128 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=128, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l4_h30_sigmoid_da(num_classes): + """Return a brute-force CNF with 4 layers, 30 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=30, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l4_h17_sigmoid_da(num_classes): + """Return a brute-force CNF with 4 layers, 17 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=17, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l3_h90_sigmoid_da(num_classes): + """Return a brute-force CNF with 3 layers, 90 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=3, + hidden_size=90, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l3_h43_sigmoid_da(num_classes): + """Return a brute-force CNF with 3 layers, 43 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=3, + hidden_size=43, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l3_h23_sigmoid_da(num_classes): + """Return a brute-force CNF with 3 layers, 23 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=3, + hidden_size=23, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l2_h1700_sigmoid_da(num_classes): + """Return a brute-force CNF with 2 layers, 1700 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=2, + hidden_size=1700, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l2_h400_sigmoid_da(num_classes): + """Return a brute-force CNF with 2 layers, 400 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=2, + hidden_size=400, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l2_h128_sigmoid_da(num_classes): + """Return a brute-force CNF with 2 layers, 128 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=2, + hidden_size=128, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l2_h64_sigmoid_da(num_classes): + """Return a brute-force CNF with 2 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=2, + hidden_size=64, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + ) + + +def cnf_l4_h64_sigmoid_da_high_tol(num_classes): + """Return a brute-force CNF with 4 layers, 64 neurons, and sigmoid.""" + return VanillaCNF( + num_in=num_classes, + num_layers=4, + hidden_size=64, + module_activate=nn.Sigmoid, + s_span=torch.linspace(0, 1, 2), + sensitivity="adjoint", + solver="dopri5", + atol=1e-4, + rtol=1e-4, + ) diff --git a/src/torchprune/torchprune/util/models/cnn/README.md b/src/torchprune/torchprune/util/models/cnn/README.md deleted file mode 100644 index 707c6fd..0000000 --- a/src/torchprune/torchprune/util/models/cnn/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# pytorch-classification -Classification on CIFAR-10/100 and ImageNet with PyTorch. - -## Features -* Unified interface for different network architectures -* Multi-GPU support -* Training progress bar with rich info -* Training log and training curve visualization code (see `./utils/logger.py`) - -## Install -* Install [PyTorch](http://pytorch.org/) -* Clone recursively - ``` - git clone --recursive https://github.com/bearpaw/pytorch-classification.git - ``` - -## Training -Please see the [Training recipes](TRAINING.md) for how to train the models. - -## Results - -### CIFAR -Top1 error rate on the CIFAR-10/100 benchmarks are reported. You may get different results when training your models with different random seed. -Note that the number of parameters are computed on the CIFAR-10 dataset. - -| Model | Params (M) | CIFAR-10 (%) | CIFAR-100 (%) | -| ------------------- | ------------------ | ------------------ | ------------------ | -| alexnet | 2.47 | 22.78 | 56.13 | -| vgg19_bn | 20.04 | 6.66 | 28.05 | -| ResNet-110 | 1.70 | 6.11 | 28.86 | -| PreResNet-110 | 1.70 | 4.94 | 23.65 | -| WRN-28-10 (drop 0.3) | 36.48 | 3.79 | 18.14 | -| ResNeXt-29, 8x64 | 34.43 | 3.69 | 17.38 | -| ResNeXt-29, 16x64 | 68.16 | 3.53 | 17.30 | -| DenseNet-BC (L=100, k=12) | 0.77 | 4.54 | 22.88 | -| DenseNet-BC (L=190, k=40) | 25.62 | 3.32 | 17.17 | - - -![cifar](utils/images/cifar.png) - -### ImageNet -Single-crop (224x224) validation error rate is reported. - - -| Model | Params (M) | Top-1 Error (%) | Top-5 Error (%) | -| ------------------- | ------------------ | ------------------ | ------------------ | -| ResNet-18 | 11.69 | 30.09 | 10.78 | -| ResNeXt-50 (32x4d) | 25.03 | 22.6 | 6.29 | - -![Validation curve](utils/images/imagenet.png) - -## Pretrained models -Our trained models and training logs are downloadable at [OneDrive](https://mycuhk-my.sharepoint.com/personal/1155056070_link_cuhk_edu_hk/_layouts/15/guestaccess.aspx?folderid=0a380d1fece1443f0a2831b761df31905&authkey=Ac5yBC-FSE4oUJZ2Lsx7I5c). - -## Supported Architectures - -### CIFAR-10 / CIFAR-100 -Since the size of images in CIFAR dataset is `32x32`, popular network structures for ImageNet need some modifications to adapt this input size. The modified models is in the package `models.cifar`: -- [x] [AlexNet](https://arxiv.org/abs/1404.5997) -- [x] [VGG](https://arxiv.org/abs/1409.1556) (Imported from [pytorch-cifar](https://github.com/kuangliu/pytorch-cifar)) -- [x] [ResNet](https://arxiv.org/abs/1512.03385) -- [x] [Pre-act-ResNet](https://arxiv.org/abs/1603.05027) -- [x] [ResNeXt](https://arxiv.org/abs/1611.05431) (Imported from [ResNeXt.pytorch](https://github.com/prlz77/ResNeXt.pytorch)) -- [x] [Wide Residual Networks](http://arxiv.org/abs/1605.07146) (Imported from [WideResNet-pytorch](https://github.com/xternalz/WideResNet-pytorch)) -- [x] [DenseNet](https://arxiv.org/abs/1608.06993) - -### ImageNet -- [x] All models in `torchvision.models` (alexnet, vgg, resnet, densenet, inception_v3, squeezenet) -- [x] [ResNeXt](https://arxiv.org/abs/1611.05431) -- [ ] [Wide Residual Networks](http://arxiv.org/abs/1605.07146) - - -## Contribute -Feel free to create a pull request if you find any bugs or you want to contribute (e.g., more datasets and more network structures). diff --git a/src/torchprune/torchprune/util/models/cnn/TRAINING.md b/src/torchprune/torchprune/util/models/cnn/TRAINING.md deleted file mode 100644 index ff140ab..0000000 --- a/src/torchprune/torchprune/util/models/cnn/TRAINING.md +++ /dev/null @@ -1,119 +0,0 @@ - -## CIFAR-10 - -#### AlexNet -``` -python cifar.py -a alexnet --epochs 164 --schedule 81 122 --gamma 0.1 --checkpoint checkpoints/cifar10/alexnet -``` - - -#### VGG19 (BN) -``` -python cifar.py -a vgg19_bn --epochs 164 --schedule 81 122 --gamma 0.1 --checkpoint checkpoints/cifar10/vgg19_bn -``` - -#### ResNet-110 -``` -python cifar.py -a resnet --depth 110 --epochs 164 --schedule 81 122 --gamma 0.1 --wd 1e-4 --checkpoint checkpoints/cifar10/resnet-110 -``` - -#### ResNet-1202 -``` -python cifar.py -a resnet --depth 1202 --epochs 164 --schedule 81 122 --gamma 0.1 --wd 1e-4 --checkpoint checkpoints/cifar10/resnet-1202 -``` - -#### PreResNet-110 -``` -python cifar.py -a preresnet --depth 110 --epochs 164 --schedule 81 122 --gamma 0.1 --wd 1e-4 --checkpoint checkpoints/cifar10/preresnet-110 -``` - -#### ResNeXt-29, 8x64d -``` -python cifar.py -a resnext --depth 29 --cardinality 8 --widen-factor 4 --schedule 150 225 --wd 5e-4 --gamma 0.1 --checkpoint checkpoints/cifar10/resnext-8x64d -``` -#### ResNeXt-29, 16x64d -``` -python cifar.py -a resnext --depth 29 --cardinality 16 --widen-factor 4 --schedule 150 225 --wd 5e-4 --gamma 0.1 --checkpoint checkpoints/cifar10/resnext-16x64d -``` - -#### WRN-28-10-drop -``` -python cifar.py -a wrn --depth 28 --depth 28 --widen-factor 10 --drop 0.3 --epochs 200 --schedule 60 120 160 --wd 5e-4 --gamma 0.2 --checkpoint checkpoints/cifar10/WRN-28-10-drop -``` - -#### DenseNet-BC (L=100, k=12) -**Note**: -* DenseNet use weight decay value `1e-4`. Larger weight decay (`5e-4`) if harmful for the accuracy (95.46 vs. 94.05) -* Official batch size is 64. But there is no big difference using batchsize 64 or 128 (95.46 vs 95.11). - -``` -python cifar.py -a densenet --depth 100 --growthRate 12 --train-batch 64 --epochs 300 --schedule 150 225 --wd 1e-4 --gamma 0.1 --checkpoint checkpoints/cifar10/densenet-bc-100-12 -``` - -#### DenseNet-BC (L=190, k=40) -``` -python cifar.py -a densenet --depth 190 --growthRate 40 --train-batch 64 --epochs 300 --schedule 150 225 --wd 1e-4 --gamma 0.1 --checkpoint checkpoints/cifar10/densenet-bc-L190-k40 -``` - -## CIFAR-100 - -#### AlexNet -``` -python cifar.py -a alexnet --dataset cifar100 --checkpoint checkpoints/cifar100/alexnet --epochs 164 --schedule 81 122 --gamma 0.1 -``` - -#### VGG19 (BN) -``` -python cifar.py -a vgg19_bn --dataset cifar100 --checkpoint checkpoints/cifar100/vgg19_bn --epochs 164 --schedule 81 122 --gamma 0.1 -``` - -#### ResNet-110 -``` -python cifar.py -a resnet --dataset cifar100 --depth 110 --epochs 164 --schedule 81 122 --gamma 0.1 --wd 1e-4 --checkpoint checkpoints/cifar100/resnet-110 -``` - -#### ResNet-1202 -``` -python cifar.py -a resnet --dataset cifar100 --depth 1202 --epochs 164 --schedule 81 122 --gamma 0.1 --wd 1e-4 --checkpoint checkpoints/cifar100/resnet-1202 -``` - -#### PreResNet-110 -``` -python cifar.py -a preresnet --dataset cifar100 --depth 110 --epochs 164 --schedule 81 122 --gamma 0.1 --wd 1e-4 --checkpoint checkpoints/cifar100/preresnet-110 -``` - -#### ResNeXt-29, 8x64d -``` -python cifar.py -a resnext --dataset cifar100 --depth 29 --cardinality 8 --widen-factor 4 --checkpoint checkpoints/cifar100/resnext-8x64d --schedule 150 225 --wd 5e-4 --gamma 0.1 -``` -#### ResNeXt-29, 16x64d -``` -python cifar.py -a resnext --dataset cifar100 --depth 29 --cardinality 16 --widen-factor 4 --checkpoint checkpoints/cifar100/resnext-16x64d --schedule 150 225 --wd 5e-4 --gamma 0.1 -``` - -#### WRN-28-10-drop -``` -python cifar.py -a wrn --dataset cifar100 --depth 28 --depth 28 --widen-factor 10 --drop 0.3 --epochs 200 --schedule 60 120 160 --wd 5e-4 --gamma 0.2 --checkpoint checkpoints/cifar100/WRN-28-10-drop -``` - -#### DenseNet-BC (L=100, k=12) -``` -python cifar.py -a densenet --dataset cifar100 --depth 100 --growthRate 12 --train-batch 64 --epochs 300 --schedule 150 225 --wd 1e-4 --gamma 0.1 --checkpoint checkpoints/cifar100/densenet-bc-100-12 -``` - -#### DenseNet-BC (L=190, k=40) -``` -python cifar.py -a densenet --dataset cifar100 --depth 190 --growthRate 40 --train-batch 64 --epochs 300 --schedule 150 225 --wd 1e-4 --gamma 0.1 --checkpoint checkpoints/cifar100/densenet-bc-L190-k40 -``` - -## ImageNet -### ResNet-18 -``` -python imagenet.py -a resnet18 --data ~/dataset/ILSVRC2012/ --epochs 90 --schedule 31 61 --gamma 0.1 -c checkpoints/imagenet/resnet18 -``` - -### ResNeXt-50 (32x4d) -*(Originally trained on 8xGPUs)* -``` -python imagenet.py -a resnext50 --base-width 4 --cardinality 32 --data ~/dataset/ILSVRC2012/ --epochs 90 --schedule 31 61 --gamma 0.1 -c checkpoints/imagenet/resnext50-32x4d -``` \ No newline at end of file diff --git a/src/torchprune/torchprune/util/models/cnn/cifar.py b/src/torchprune/torchprune/util/models/cnn/cifar.py deleted file mode 100644 index 510e474..0000000 --- a/src/torchprune/torchprune/util/models/cnn/cifar.py +++ /dev/null @@ -1,350 +0,0 @@ -''' -Training script for CIFAR-10/100 -Copyright (c) Wei YANG, 2017 -''' -from __future__ import print_function - -import argparse -import os -import shutil -import time -import random - -import torch -import torch.nn as nn -import torch.nn.parallel -import torch.backends.cudnn as cudnn -import torch.optim as optim -import torch.utils.data as data -import torchvision.transforms as transforms -import torchvision.datasets as datasets -import models.cifar as models - -from utils import Bar, Logger, AverageMeter, accuracy, mkdir_p, savefig - - -model_names = sorted(name for name in models.__dict__ - if name.islower() and not name.startswith("__") - and callable(models.__dict__[name])) - -parser = argparse.ArgumentParser(description='PyTorch CIFAR10/100 Training') -# Datasets -parser.add_argument('-d', '--dataset', default='cifar10', type=str) -parser.add_argument('-j', '--workers', default=4, type=int, metavar='N', - help='number of data loading workers (default: 4)') -# Optimization options -parser.add_argument('--epochs', default=300, type=int, metavar='N', - help='number of total epochs to run') -parser.add_argument('--start-epoch', default=0, type=int, metavar='N', - help='manual epoch number (useful on restarts)') -parser.add_argument('--train-batch', default=128, type=int, metavar='N', - help='train batchsize') -parser.add_argument('--test-batch', default=100, type=int, metavar='N', - help='test batchsize') -parser.add_argument('--lr', '--learning-rate', default=0.1, type=float, - metavar='LR', help='initial learning rate') -parser.add_argument('--drop', '--dropout', default=0, type=float, - metavar='Dropout', help='Dropout ratio') -parser.add_argument('--schedule', type=int, nargs='+', default=[150, 225], - help='Decrease learning rate at these epochs.') -parser.add_argument('--gamma', type=float, default=0.1, help='LR is multiplied by gamma on schedule.') -parser.add_argument('--momentum', default=0.9, type=float, metavar='M', - help='momentum') -parser.add_argument('--weight-decay', '--wd', default=5e-4, type=float, - metavar='W', help='weight decay (default: 1e-4)') -# Checkpoints -parser.add_argument('-c', '--checkpoint', default='checkpoint', type=str, metavar='PATH', - help='path to save checkpoint (default: checkpoint)') -parser.add_argument('--resume', default='', type=str, metavar='PATH', - help='path to latest checkpoint (default: none)') -# Architecture -parser.add_argument('--arch', '-a', metavar='ARCH', default='resnet20', - choices=model_names, - help='model architecture: ' + - ' | '.join(model_names) + - ' (default: resnet18)') -parser.add_argument('--depth', type=int, default=29, help='Model depth.') -parser.add_argument('--cardinality', type=int, default=8, help='Model cardinality (group).') -parser.add_argument('--widen-factor', type=int, default=4, help='Widen factor. 4 -> 64, 8 -> 128, ...') -parser.add_argument('--growthRate', type=int, default=12, help='Growth rate for DenseNet.') -parser.add_argument('--compressionRate', type=int, default=2, help='Compression Rate (theta) for DenseNet.') -# Miscs -parser.add_argument('--manualSeed', type=int, help='manual seed') -parser.add_argument('-e', '--evaluate', dest='evaluate', action='store_true', - help='evaluate model on validation set') -#Device options -parser.add_argument('--gpu-id', default='0', type=str, - help='id(s) for CUDA_VISIBLE_DEVICES') - -args = parser.parse_args() -state = {k: v for k, v in args._get_kwargs()} - -# Validate dataset -assert args.dataset == 'cifar10' or args.dataset == 'cifar100', 'Dataset can only be cifar10 or cifar100.' - -# Use CUDA -os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu_id -use_cuda = torch.cuda.is_available() - -# Random seed -if args.manualSeed is None: - args.manualSeed = random.randint(1, 10000) -random.seed(args.manualSeed) -torch.manual_seed(args.manualSeed) -if use_cuda: - torch.cuda.manual_seed_all(args.manualSeed) - -best_acc = 0 # best test accuracy - -def main(): - global best_acc - start_epoch = args.start_epoch # start from epoch 0 or last checkpoint epoch - - if not os.path.isdir(args.checkpoint): - mkdir_p(args.checkpoint) - - - - # Data - print('==> Preparing dataset %s' % args.dataset) - transform_train = transforms.Compose([ - transforms.RandomCrop(32, padding=4), - transforms.RandomHorizontalFlip(), - transforms.ToTensor(), - transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)), - ]) - - transform_test = transforms.Compose([ - transforms.ToTensor(), - transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)), - ]) - if args.dataset == 'cifar10': - dataloader = datasets.CIFAR10 - num_classes = 10 - else: - dataloader = datasets.CIFAR100 - num_classes = 100 - - - trainset = dataloader(root='./data', train=True, download=True, transform=transform_train) - trainloader = data.DataLoader(trainset, batch_size=args.train_batch, shuffle=True, num_workers=args.workers) - - testset = dataloader(root='./data', train=False, download=False, transform=transform_test) - testloader = data.DataLoader(testset, batch_size=args.test_batch, shuffle=False, num_workers=args.workers) - - # Model - print("==> creating model '{}'".format(args.arch)) - if args.arch.startswith('resnext'): - model = models.__dict__[args.arch]( - cardinality=args.cardinality, - num_classes=num_classes, - depth=args.depth, - widen_factor=args.widen_factor, - dropRate=args.drop, - ) - elif args.arch.startswith('densenet'): - model = models.__dict__[args.arch]( - num_classes=num_classes, - depth=args.depth, - growthRate=args.growthRate, - compressionRate=args.compressionRate, - dropRate=args.drop, - ) - elif args.arch.startswith('wrn'): - model = models.__dict__[args.arch]( - num_classes=num_classes, - depth=args.depth, - widen_factor=args.widen_factor, - dropRate=args.drop, - ) - elif args.arch.endswith('resnet'): - model = models.__dict__[args.arch]( - num_classes=num_classes, - depth=args.depth, - ) - else: - model = models.__dict__[args.arch](num_classes=num_classes) - - model = torch.nn.DataParallel(model).cuda() - cudnn.benchmark = True - print(' Total params: %.2fM' % (sum(p.numel() for p in model.parameters())/1000000.0)) - - criterion = nn.CrossEntropyLoss() - optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum, weight_decay=args.weight_decay) - - # Resume - title = 'cifar-10-' + args.arch - if args.resume: - # Load checkpoint. - print('==> Resuming from checkpoint..') - assert os.path.isfile(args.resume), 'Error: no checkpoint directory found!' - args.checkpoint = os.path.dirname(args.resume) - checkpoint = torch.load(args.resume) - best_acc = checkpoint['best_acc'] - start_epoch = checkpoint['epoch'] - model.load_state_dict(checkpoint['state_dict']) - optimizer.load_state_dict(checkpoint['optimizer']) - logger = Logger(os.path.join(args.checkpoint, 'log.txt'), title=title, resume=True) - else: - logger = Logger(os.path.join(args.checkpoint, 'log.txt'), title=title) - logger.set_names(['Learning Rate', 'Train Loss', 'Valid Loss', 'Train Acc.', 'Valid Acc.']) - - - if args.evaluate: - print('\nEvaluation only') - test_loss, test_acc = test(testloader, model, criterion, start_epoch, use_cuda) - print(' Test Loss: %.8f, Test Acc: %.2f' % (test_loss, test_acc)) - return - - # Train and val - for epoch in range(start_epoch, args.epochs): - adjust_learning_rate(optimizer, epoch) - - print('\nEpoch: [%d | %d] LR: %f' % (epoch + 1, args.epochs, state['lr'])) - - train_loss, train_acc = train(trainloader, model, criterion, optimizer, epoch, use_cuda) - test_loss, test_acc = test(testloader, model, criterion, epoch, use_cuda) - - # append logger file - logger.append([state['lr'], train_loss, test_loss, train_acc, test_acc]) - - # save model - is_best = test_acc > best_acc - best_acc = max(test_acc, best_acc) - save_checkpoint({ - 'epoch': epoch + 1, - 'state_dict': model.state_dict(), - 'acc': test_acc, - 'best_acc': best_acc, - 'optimizer' : optimizer.state_dict(), - }, is_best, checkpoint=args.checkpoint) - - logger.close() - logger.plot() - savefig(os.path.join(args.checkpoint, 'log.eps')) - - print('Best acc:') - print(best_acc) - -def train(trainloader, model, criterion, optimizer, epoch, use_cuda): - # switch to train mode - model.train() - - batch_time = AverageMeter() - data_time = AverageMeter() - losses = AverageMeter() - top1 = AverageMeter() - top5 = AverageMeter() - end = time.time() - - bar = Bar('Processing', max=len(trainloader)) - for batch_idx, (inputs, targets) in enumerate(trainloader): - # measure data loading time - data_time.update(time.time() - end) - - if use_cuda: - inputs, targets = inputs.cuda(), targets.cuda(async=True) - inputs, targets = torch.autograd.Variable(inputs), torch.autograd.Variable(targets) - - # compute output - outputs = model(inputs) - loss = criterion(outputs, targets) - - # measure accuracy and record loss - prec1, prec5 = accuracy(outputs.data, targets.data, topk=(1, 5)) - losses.update(loss.data[0], inputs.size(0)) - top1.update(prec1[0], inputs.size(0)) - top5.update(prec5[0], inputs.size(0)) - - # compute gradient and do SGD step - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # measure elapsed time - batch_time.update(time.time() - end) - end = time.time() - - # plot progress - bar.suffix = '({batch}/{size}) Data: {data:.3f}s | Batch: {bt:.3f}s | Total: {total:} | ETA: {eta:} | Loss: {loss:.4f} | top1: {top1: .4f} | top5: {top5: .4f}'.format( - batch=batch_idx + 1, - size=len(trainloader), - data=data_time.avg, - bt=batch_time.avg, - total=bar.elapsed_td, - eta=bar.eta_td, - loss=losses.avg, - top1=top1.avg, - top5=top5.avg, - ) - bar.next() - bar.finish() - return (losses.avg, top1.avg) - -def test(testloader, model, criterion, epoch, use_cuda): - global best_acc - - batch_time = AverageMeter() - data_time = AverageMeter() - losses = AverageMeter() - top1 = AverageMeter() - top5 = AverageMeter() - - # switch to evaluate mode - model.eval() - - end = time.time() - bar = Bar('Processing', max=len(testloader)) - for batch_idx, (inputs, targets) in enumerate(testloader): - # measure data loading time - data_time.update(time.time() - end) - - if use_cuda: - inputs, targets = inputs.cuda(), targets.cuda() - inputs, targets = torch.autograd.Variable(inputs, volatile=True), torch.autograd.Variable(targets) - - # compute output - outputs = model(inputs) - loss = criterion(outputs, targets) - - # measure accuracy and record loss - prec1, prec5 = accuracy(outputs.data, targets.data, topk=(1, 5)) - losses.update(loss.data[0], inputs.size(0)) - top1.update(prec1[0], inputs.size(0)) - top5.update(prec5[0], inputs.size(0)) - - # measure elapsed time - batch_time.update(time.time() - end) - end = time.time() - - # plot progress - bar.suffix = '({batch}/{size}) Data: {data:.3f}s | Batch: {bt:.3f}s | Total: {total:} | ETA: {eta:} | Loss: {loss:.4f} | top1: {top1: .4f} | top5: {top5: .4f}'.format( - batch=batch_idx + 1, - size=len(testloader), - data=data_time.avg, - bt=batch_time.avg, - total=bar.elapsed_td, - eta=bar.eta_td, - loss=losses.avg, - top1=top1.avg, - top5=top5.avg, - ) - bar.next() - bar.finish() - return (losses.avg, top1.avg) - -def save_checkpoint(state, is_best, checkpoint='checkpoint', filename='checkpoint.pth.tar'): - filepath = os.path.join(checkpoint, filename) - torch.save(state, filepath) - if is_best: - shutil.copyfile(filepath, os.path.join(checkpoint, 'model_best.pth.tar')) - -def adjust_learning_rate(optimizer, epoch): - global state - if epoch in args.schedule: - state['lr'] *= args.gamma - for param_group in optimizer.param_groups: - param_group['lr'] = state['lr'] - -if __name__ == '__main__': - main() diff --git a/src/torchprune/torchprune/util/models/cnn/imagenet.py b/src/torchprune/torchprune/util/models/cnn/imagenet.py deleted file mode 100644 index b1dace6..0000000 --- a/src/torchprune/torchprune/util/models/cnn/imagenet.py +++ /dev/null @@ -1,344 +0,0 @@ -''' -Training script for ImageNet -Copyright (c) Wei YANG, 2017 -''' -from __future__ import print_function - -import argparse -import os -import shutil -import time -import random - -import torch -import torch.nn as nn -import torch.nn.parallel -import torch.backends.cudnn as cudnn -import torch.optim as optim -import torch.utils.data as data -import torchvision.transforms as transforms -import torchvision.datasets as datasets -import torchvision.models as models -import models.imagenet as customized_models - -from utils import Bar, Logger, AverageMeter, accuracy, mkdir_p, savefig - -# Models -default_model_names = sorted(name for name in models.__dict__ - if name.islower() and not name.startswith("__") - and callable(models.__dict__[name])) - -customized_models_names = sorted(name for name in customized_models.__dict__ - if name.islower() and not name.startswith("__") - and callable(customized_models.__dict__[name])) - -for name in customized_models.__dict__: - if name.islower() and not name.startswith("__") and callable(customized_models.__dict__[name]): - models.__dict__[name] = customized_models.__dict__[name] - -model_names = default_model_names + customized_models_names - -# Parse arguments -parser = argparse.ArgumentParser(description='PyTorch ImageNet Training') - -# Datasets -parser.add_argument('-d', '--data', default='path to dataset', type=str) -parser.add_argument('-j', '--workers', default=4, type=int, metavar='N', - help='number of data loading workers (default: 4)') -# Optimization options -parser.add_argument('--epochs', default=90, type=int, metavar='N', - help='number of total epochs to run') -parser.add_argument('--start-epoch', default=0, type=int, metavar='N', - help='manual epoch number (useful on restarts)') -parser.add_argument('--train-batch', default=256, type=int, metavar='N', - help='train batchsize (default: 256)') -parser.add_argument('--test-batch', default=200, type=int, metavar='N', - help='test batchsize (default: 200)') -parser.add_argument('--lr', '--learning-rate', default=0.1, type=float, - metavar='LR', help='initial learning rate') -parser.add_argument('--drop', '--dropout', default=0, type=float, - metavar='Dropout', help='Dropout ratio') -parser.add_argument('--schedule', type=int, nargs='+', default=[150, 225], - help='Decrease learning rate at these epochs.') -parser.add_argument('--gamma', type=float, default=0.1, help='LR is multiplied by gamma on schedule.') -parser.add_argument('--momentum', default=0.9, type=float, metavar='M', - help='momentum') -parser.add_argument('--weight-decay', '--wd', default=1e-4, type=float, - metavar='W', help='weight decay (default: 1e-4)') -# Checkpoints -parser.add_argument('-c', '--checkpoint', default='checkpoint', type=str, metavar='PATH', - help='path to save checkpoint (default: checkpoint)') -parser.add_argument('--resume', default='', type=str, metavar='PATH', - help='path to latest checkpoint (default: none)') -# Architecture -parser.add_argument('--arch', '-a', metavar='ARCH', default='resnet18', - choices=model_names, - help='model architecture: ' + - ' | '.join(model_names) + - ' (default: resnet18)') -parser.add_argument('--depth', type=int, default=29, help='Model depth.') -parser.add_argument('--cardinality', type=int, default=32, help='ResNet cardinality (group).') -parser.add_argument('--base-width', type=int, default=4, help='ResNet base width.') -parser.add_argument('--widen-factor', type=int, default=4, help='Widen factor. 4 -> 64, 8 -> 128, ...') -# Miscs -parser.add_argument('--manualSeed', type=int, help='manual seed') -parser.add_argument('-e', '--evaluate', dest='evaluate', action='store_true', - help='evaluate model on validation set') -parser.add_argument('--pretrained', dest='pretrained', action='store_true', - help='use pre-trained model') -#Device options -parser.add_argument('--gpu-id', default='0', type=str, - help='id(s) for CUDA_VISIBLE_DEVICES') - -args = parser.parse_args() -state = {k: v for k, v in args._get_kwargs()} - -# Use CUDA -os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu_id -use_cuda = torch.cuda.is_available() - -# Random seed -if args.manualSeed is None: - args.manualSeed = random.randint(1, 10000) -random.seed(args.manualSeed) -torch.manual_seed(args.manualSeed) -if use_cuda: - torch.cuda.manual_seed_all(args.manualSeed) - -best_acc = 0 # best test accuracy - -def main(): - global best_acc - start_epoch = args.start_epoch # start from epoch 0 or last checkpoint epoch - - if not os.path.isdir(args.checkpoint): - mkdir_p(args.checkpoint) - - # Data loading code - traindir = os.path.join(args.data, 'train') - valdir = os.path.join(args.data, 'val') - normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], - std=[0.229, 0.224, 0.225]) - - train_loader = torch.utils.data.DataLoader( - datasets.ImageFolder(traindir, transforms.Compose([ - transforms.RandomSizedCrop(224), - transforms.RandomHorizontalFlip(), - transforms.ToTensor(), - normalize, - ])), - batch_size=args.train_batch, shuffle=True, - num_workers=args.workers, pin_memory=True) - - val_loader = torch.utils.data.DataLoader( - datasets.ImageFolder(valdir, transforms.Compose([ - transforms.Scale(256), - transforms.CenterCrop(224), - transforms.ToTensor(), - normalize, - ])), - batch_size=args.test_batch, shuffle=False, - num_workers=args.workers, pin_memory=True) - - # create model - if args.pretrained: - print("=> using pre-trained model '{}'".format(args.arch)) - model = models.__dict__[args.arch](pretrained=True) - elif args.arch.startswith('resnext'): - model = models.__dict__[args.arch]( - baseWidth=args.base_width, - cardinality=args.cardinality, - ) - else: - print("=> creating model '{}'".format(args.arch)) - model = models.__dict__[args.arch]() - - if args.arch.startswith('alexnet') or args.arch.startswith('vgg'): - model.features = torch.nn.DataParallel(model.features) - model.cuda() - else: - model = torch.nn.DataParallel(model).cuda() - - cudnn.benchmark = True - print(' Total params: %.2fM' % (sum(p.numel() for p in model.parameters())/1000000.0)) - - # define loss function (criterion) and optimizer - criterion = nn.CrossEntropyLoss().cuda() - optimizer = optim.SGD(model.parameters(), lr=args.lr, momentum=args.momentum, weight_decay=args.weight_decay) - - # Resume - title = 'ImageNet-' + args.arch - if args.resume: - # Load checkpoint. - print('==> Resuming from checkpoint..') - assert os.path.isfile(args.resume), 'Error: no checkpoint directory found!' - args.checkpoint = os.path.dirname(args.resume) - checkpoint = torch.load(args.resume) - best_acc = checkpoint['best_acc'] - start_epoch = checkpoint['epoch'] - model.load_state_dict(checkpoint['state_dict']) - optimizer.load_state_dict(checkpoint['optimizer']) - logger = Logger(os.path.join(args.checkpoint, 'log.txt'), title=title, resume=True) - else: - logger = Logger(os.path.join(args.checkpoint, 'log.txt'), title=title) - logger.set_names(['Learning Rate', 'Train Loss', 'Valid Loss', 'Train Acc.', 'Valid Acc.']) - - - if args.evaluate: - print('\nEvaluation only') - test_loss, test_acc = test(val_loader, model, criterion, start_epoch, use_cuda) - print(' Test Loss: %.8f, Test Acc: %.2f' % (test_loss, test_acc)) - return - - # Train and val - for epoch in range(start_epoch, args.epochs): - adjust_learning_rate(optimizer, epoch) - - print('\nEpoch: [%d | %d] LR: %f' % (epoch + 1, args.epochs, state['lr'])) - - train_loss, train_acc = train(train_loader, model, criterion, optimizer, epoch, use_cuda) - test_loss, test_acc = test(val_loader, model, criterion, epoch, use_cuda) - - # append logger file - logger.append([state['lr'], train_loss, test_loss, train_acc, test_acc]) - - # save model - is_best = test_acc > best_acc - best_acc = max(test_acc, best_acc) - save_checkpoint({ - 'epoch': epoch + 1, - 'state_dict': model.state_dict(), - 'acc': test_acc, - 'best_acc': best_acc, - 'optimizer' : optimizer.state_dict(), - }, is_best, checkpoint=args.checkpoint) - - logger.close() - logger.plot() - savefig(os.path.join(args.checkpoint, 'log.eps')) - - print('Best acc:') - print(best_acc) - -def train(train_loader, model, criterion, optimizer, epoch, use_cuda): - # switch to train mode - model.train() - - batch_time = AverageMeter() - data_time = AverageMeter() - losses = AverageMeter() - top1 = AverageMeter() - top5 = AverageMeter() - end = time.time() - - bar = Bar('Processing', max=len(train_loader)) - for batch_idx, (inputs, targets) in enumerate(train_loader): - # measure data loading time - data_time.update(time.time() - end) - - if use_cuda: - inputs, targets = inputs.cuda(), targets.cuda(async=True) - inputs, targets = torch.autograd.Variable(inputs), torch.autograd.Variable(targets) - - # compute output - outputs = model(inputs) - loss = criterion(outputs, targets) - - # measure accuracy and record loss - prec1, prec5 = accuracy(outputs.data, targets.data, topk=(1, 5)) - losses.update(loss.data[0], inputs.size(0)) - top1.update(prec1[0], inputs.size(0)) - top5.update(prec5[0], inputs.size(0)) - - # compute gradient and do SGD step - optimizer.zero_grad() - loss.backward() - optimizer.step() - - # measure elapsed time - batch_time.update(time.time() - end) - end = time.time() - - # plot progress - bar.suffix = '({batch}/{size}) Data: {data:.3f}s | Batch: {bt:.3f}s | Total: {total:} | ETA: {eta:} | Loss: {loss:.4f} | top1: {top1: .4f} | top5: {top5: .4f}'.format( - batch=batch_idx + 1, - size=len(train_loader), - data=data_time.val, - bt=batch_time.val, - total=bar.elapsed_td, - eta=bar.eta_td, - loss=losses.avg, - top1=top1.avg, - top5=top5.avg, - ) - bar.next() - bar.finish() - return (losses.avg, top1.avg) - -def test(val_loader, model, criterion, epoch, use_cuda): - global best_acc - - batch_time = AverageMeter() - data_time = AverageMeter() - losses = AverageMeter() - top1 = AverageMeter() - top5 = AverageMeter() - - # switch to evaluate mode - model.eval() - - end = time.time() - bar = Bar('Processing', max=len(val_loader)) - for batch_idx, (inputs, targets) in enumerate(val_loader): - # measure data loading time - data_time.update(time.time() - end) - - if use_cuda: - inputs, targets = inputs.cuda(), targets.cuda() - inputs, targets = torch.autograd.Variable(inputs, volatile=True), torch.autograd.Variable(targets) - - # compute output - outputs = model(inputs) - loss = criterion(outputs, targets) - - # measure accuracy and record loss - prec1, prec5 = accuracy(outputs.data, targets.data, topk=(1, 5)) - losses.update(loss.data[0], inputs.size(0)) - top1.update(prec1[0], inputs.size(0)) - top5.update(prec5[0], inputs.size(0)) - - # measure elapsed time - batch_time.update(time.time() - end) - end = time.time() - - # plot progress - bar.suffix = '({batch}/{size}) Data: {data:.3f}s | Batch: {bt:.3f}s | Total: {total:} | ETA: {eta:} | Loss: {loss:.4f} | top1: {top1: .4f} | top5: {top5: .4f}'.format( - batch=batch_idx + 1, - size=len(val_loader), - data=data_time.avg, - bt=batch_time.avg, - total=bar.elapsed_td, - eta=bar.eta_td, - loss=losses.avg, - top1=top1.avg, - top5=top5.avg, - ) - bar.next() - bar.finish() - return (losses.avg, top1.avg) - -def save_checkpoint(state, is_best, checkpoint='checkpoint', filename='checkpoint.pth.tar'): - filepath = os.path.join(checkpoint, filename) - torch.save(state, filepath) - if is_best: - shutil.copyfile(filepath, os.path.join(checkpoint, 'model_best.pth.tar')) - -def adjust_learning_rate(optimizer, epoch): - global state - if epoch in args.schedule: - state['lr'] *= args.gamma - for param_group in optimizer.param_groups: - param_group['lr'] = state['lr'] - -if __name__ == '__main__': - main() diff --git a/src/torchprune/torchprune/util/models/cnn/models/cifar/__init__.py b/src/torchprune/torchprune/util/models/cnn/models/cifar/__init__.py deleted file mode 100644 index 3011b7a..0000000 --- a/src/torchprune/torchprune/util/models/cnn/models/cifar/__init__.py +++ /dev/null @@ -1,70 +0,0 @@ -from __future__ import absolute_import - -"""The models subpackage contains definitions for the following model for CIFAR10/CIFAR100 -architectures: - -- `AlexNet`_ -- `VGG`_ -- `ResNet`_ -- `SqueezeNet`_ -- `DenseNet`_ - -You can construct a model with random weights by calling its constructor: - -.. code:: python - - import torchvision.models as models - resnet18 = models.resnet18() - alexnet = models.alexnet() - squeezenet = models.squeezenet1_0() - densenet = models.densenet_161() - -We provide pre-trained models for the ResNet variants and AlexNet, using the -PyTorch :mod:`torch.utils.model_zoo`. These can constructed by passing -``pretrained=True``: - -.. code:: python - - import torchvision.models as models - resnet18 = models.resnet18(pretrained=True) - alexnet = models.alexnet(pretrained=True) - -ImageNet 1-crop error rates (224x224) - -======================== ============= ============= -Network Top-1 error Top-5 error -======================== ============= ============= -ResNet-18 30.24 10.92 -ResNet-34 26.70 8.58 -ResNet-50 23.85 7.13 -ResNet-101 22.63 6.44 -ResNet-152 21.69 5.94 -Inception v3 22.55 6.44 -AlexNet 43.45 20.91 -VGG-11 30.98 11.37 -VGG-13 30.07 10.75 -VGG-16 28.41 9.62 -VGG-19 27.62 9.12 -SqueezeNet 1.0 41.90 19.58 -SqueezeNet 1.1 41.81 19.38 -Densenet-121 25.35 7.83 -Densenet-169 24.00 7.00 -Densenet-201 22.80 6.43 -Densenet-161 22.35 6.20 -======================== ============= ============= - - -.. _AlexNet: https://arxiv.org/abs/1404.5997 -.. _VGG: https://arxiv.org/abs/1409.1556 -.. _ResNet: https://arxiv.org/abs/1512.03385 -.. _SqueezeNet: https://arxiv.org/abs/1602.07360 -.. _DenseNet: https://arxiv.org/abs/1608.06993 -""" - -from .alexnet import * -from .vgg import * -from .resnet import * -from .resnext import * -from .wrn import * -from .preresnet import * -from .densenet import * diff --git a/src/torchprune/torchprune/util/models/cnn/models/cifar/alexnet.py b/src/torchprune/torchprune/util/models/cnn/models/cifar/alexnet.py deleted file mode 100644 index 8c9407d..0000000 --- a/src/torchprune/torchprune/util/models/cnn/models/cifar/alexnet.py +++ /dev/null @@ -1,44 +0,0 @@ -'''AlexNet for CIFAR10. FC layers are removed. Paddings are adjusted. -Without BN, the start learning rate should be 0.01 -(c) YANG, Wei -''' -import torch.nn as nn - - -__all__ = ['alexnet'] - - -class AlexNet(nn.Module): - - def __init__(self, num_classes=10): - super(AlexNet, self).__init__() - self.features = nn.Sequential( - nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=5), - nn.ReLU(inplace=True), - nn.MaxPool2d(kernel_size=2, stride=2), - nn.Conv2d(64, 192, kernel_size=5, padding=2), - nn.ReLU(inplace=True), - nn.MaxPool2d(kernel_size=2, stride=2), - nn.Conv2d(192, 384, kernel_size=3, padding=1), - nn.ReLU(inplace=True), - nn.Conv2d(384, 256, kernel_size=3, padding=1), - nn.ReLU(inplace=True), - nn.Conv2d(256, 256, kernel_size=3, padding=1), - nn.ReLU(inplace=True), - nn.MaxPool2d(kernel_size=2, stride=2), - ) - self.classifier = nn.Linear(256, num_classes) - - def forward(self, x): - x = self.features(x) - x = x.view(x.size(0), -1) - x = self.classifier(x) - return x - - -def alexnet(**kwargs): - r"""AlexNet model architecture from the - `"One weird trick..." `_ paper. - """ - model = AlexNet(**kwargs) - return model diff --git a/src/torchprune/torchprune/util/models/cnn/models/cifar/densenet.py b/src/torchprune/torchprune/util/models/cnn/models/cifar/densenet.py deleted file mode 100644 index cf35774..0000000 --- a/src/torchprune/torchprune/util/models/cnn/models/cifar/densenet.py +++ /dev/null @@ -1,171 +0,0 @@ -import torch -import torch.nn as nn -import torch.nn.functional as F -import math - - -__all__ = ['densenet', 'densenet22', 'densenet100', 'densenet190'] - - -from torch.autograd import Variable - -class Bottleneck(nn.Module): - def __init__(self, inplanes, expansion=4, growthRate=12, dropRate=0): - super(Bottleneck, self).__init__() - planes = expansion * growthRate - self.bn1 = nn.BatchNorm2d(inplanes) - self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.conv2 = nn.Conv2d(planes, growthRate, kernel_size=3, - padding=1, bias=False) - self.relu = nn.ReLU(inplace=True) - self.dropRate = dropRate - - def forward(self, x): - out = self.bn1(x) - out = self.relu(out) - out = self.conv1(out) - out = self.bn2(out) - out = self.relu(out) - out = self.conv2(out) - if self.dropRate > 0: - out = F.dropout(out, p=self.dropRate, training=self.training) - - out = torch.cat((x, out), 1) - - return out - - -class BasicBlock(nn.Module): - def __init__(self, inplanes, expansion=1, growthRate=12, dropRate=0): - super(BasicBlock, self).__init__() - planes = expansion * growthRate - self.bn1 = nn.BatchNorm2d(inplanes) - self.conv1 = nn.Conv2d(inplanes, growthRate, kernel_size=3, - padding=1, bias=False) - self.relu = nn.ReLU(inplace=True) - self.dropRate = dropRate - - def forward(self, x): - out = self.bn1(x) - out = self.relu(out) - out = self.conv1(out) - if self.dropRate > 0: - out = F.dropout(out, p=self.dropRate, training=self.training) - - out = torch.cat((x, out), 1) - - return out - - -class Transition(nn.Module): - def __init__(self, inplanes, outplanes): - super(Transition, self).__init__() - self.bn1 = nn.BatchNorm2d(inplanes) - self.conv1 = nn.Conv2d(inplanes, outplanes, kernel_size=1, - bias=False) - self.relu = nn.ReLU(inplace=True) - - def forward(self, x): - out = self.bn1(x) - out = self.relu(out) - out = self.conv1(out) - out = F.avg_pool2d(out, 2) - return out - - -class DenseNet(nn.Module): - - def __init__(self, depth=22, block=Bottleneck, - dropRate=0, num_classes=10, growthRate=12, compressionRate=2): - super(DenseNet, self).__init__() - - assert (depth - 4) % 3 == 0, 'depth should be 3n+4' - n = (depth - 4) / 3 if block == BasicBlock else (depth - 4) // 6 - - self.growthRate = growthRate - self.dropRate = dropRate - - # self.inplanes is a global variable used across multiple - # helper functions - self.inplanes = growthRate * 2 - self.conv1 = nn.Conv2d(3, self.inplanes, kernel_size=3, padding=1, - bias=False) - self.dense1 = self._make_denseblock(block, n) - self.trans1 = self._make_transition(compressionRate) - self.dense2 = self._make_denseblock(block, n) - self.trans2 = self._make_transition(compressionRate) - self.dense3 = self._make_denseblock(block, n) - self.bn = nn.BatchNorm2d(self.inplanes) - self.relu = nn.ReLU(inplace=True) - self.avgpool = nn.AvgPool2d(8) - self.fc = nn.Linear(self.inplanes, num_classes) - - # Weight initialization - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - - def _make_denseblock(self, block, blocks): - layers = [] - for i in range(blocks): - # Currently we fix the expansion ratio as the default value - layers.append(block(self.inplanes, growthRate=self.growthRate, dropRate=self.dropRate)) - self.inplanes += self.growthRate - - return nn.Sequential(*layers) - - def _make_transition(self, compressionRate): - inplanes = self.inplanes - outplanes = int(math.floor(self.inplanes // compressionRate)) - self.inplanes = outplanes - return Transition(inplanes, outplanes) - - - def forward(self, x): - x = self.conv1(x) - - x = self.trans1(self.dense1(x)) - x = self.trans2(self.dense2(x)) - x = self.dense3(x) - x = self.bn(x) - x = self.relu(x) - - x = self.avgpool(x) - x = x.view(x.size(0), -1) - x = self.fc(x) - - return x - - -def densenet(**kwargs): - """ - Constructs a ResNet model. - """ - return DenseNet(**kwargs) - -def densenet22(**kwargs): - """ - DenseNet-BC (L=22, k=12) - https://github.com/bearpaw/pytorch-classification/blob/master/TRAINING.md - """ - return densenet(**kwargs) - -def densenet100(**kwargs): - """ - DenseNet-BC (L=100, k=12) - https://github.com/bearpaw/pytorch-classification/blob/master/TRAINING.md - """ - return densenet(depth=100, growthRate=12, **kwargs) - - -def densenet190(**kwargs): - """ - DenseNet-BC (L=190, k=40) - https://github.com/bearpaw/pytorch-classification/blob/master/TRAINING.md - """ - return densenet(depth=190, growthRate=40, **kwargs) \ No newline at end of file diff --git a/src/torchprune/torchprune/util/models/cnn/models/cifar/preresnet.py b/src/torchprune/torchprune/util/models/cnn/models/cifar/preresnet.py deleted file mode 100644 index b69aeb6..0000000 --- a/src/torchprune/torchprune/util/models/cnn/models/cifar/preresnet.py +++ /dev/null @@ -1,158 +0,0 @@ -from __future__ import absolute_import - -'''Resnet for cifar dataset. -Ported form -https://github.com/facebook/fb.resnet.torch -and -https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py -(c) YANG, Wei -''' -import torch.nn as nn -import math - - -__all__ = ['preresnet'] - -def conv3x3(in_planes, out_planes, stride=1): - "3x3 convolution with padding" - return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, - padding=1, bias=False) - - -class BasicBlock(nn.Module): - expansion = 1 - - def __init__(self, inplanes, planes, stride=1, downsample=None): - super(BasicBlock, self).__init__() - self.bn1 = nn.BatchNorm2d(inplanes) - self.relu = nn.ReLU(inplace=True) - self.conv1 = conv3x3(inplanes, planes, stride) - self.bn2 = nn.BatchNorm2d(planes) - self.conv2 = conv3x3(planes, planes) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.bn1(x) - out = self.relu(out) - out = self.conv1(out) - - out = self.bn2(out) - out = self.relu(out) - out = self.conv2(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - - return out - - -class Bottleneck(nn.Module): - expansion = 4 - - def __init__(self, inplanes, planes, stride=1, downsample=None): - super(Bottleneck, self).__init__() - self.bn1 = nn.BatchNorm2d(inplanes) - self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, - padding=1, bias=False) - self.bn3 = nn.BatchNorm2d(planes) - self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False) - self.relu = nn.ReLU(inplace=True) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.bn1(x) - out = self.relu(out) - out = self.conv1(out) - - out = self.bn2(out) - out = self.relu(out) - out = self.conv2(out) - - out = self.bn3(out) - out = self.relu(out) - out = self.conv3(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - - return out - - -class PreResNet(nn.Module): - - def __init__(self, depth, num_classes=1000): - super(PreResNet, self).__init__() - # Model type specifies number of layers for CIFAR-10 model - assert (depth - 2) % 6 == 0, 'depth should be 6n+2' - n = (depth - 2) // 6 - - block = Bottleneck if depth >=44 else BasicBlock - - self.inplanes = 16 - self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1, - bias=False) - self.layer1 = self._make_layer(block, 16, n) - self.layer2 = self._make_layer(block, 32, n, stride=2) - self.layer3 = self._make_layer(block, 64, n, stride=2) - self.bn = nn.BatchNorm2d(64 * block.expansion) - self.relu = nn.ReLU(inplace=True) - self.avgpool = nn.AvgPool2d(8) - self.fc = nn.Linear(64 * block.expansion, num_classes) - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - - def _make_layer(self, block, planes, blocks, stride=1): - downsample = None - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - nn.Conv2d(self.inplanes, planes * block.expansion, - kernel_size=1, stride=stride, bias=False), - ) - - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample)) - self.inplanes = planes * block.expansion - for i in range(1, blocks): - layers.append(block(self.inplanes, planes)) - - return nn.Sequential(*layers) - - def forward(self, x): - x = self.conv1(x) - - x = self.layer1(x) # 32x32 - x = self.layer2(x) # 16x16 - x = self.layer3(x) # 8x8 - x = self.bn(x) - x = self.relu(x) - - x = self.avgpool(x) - x = x.view(x.size(0), -1) - x = self.fc(x) - - return x - - -def preresnet(**kwargs): - """ - Constructs a ResNet model. - """ - return PreResNet(**kwargs) diff --git a/src/torchprune/torchprune/util/models/cnn/models/cifar/resnet.py b/src/torchprune/torchprune/util/models/cnn/models/cifar/resnet.py deleted file mode 100644 index 294b590..0000000 --- a/src/torchprune/torchprune/util/models/cnn/models/cifar/resnet.py +++ /dev/null @@ -1,180 +0,0 @@ -from __future__ import absolute_import - -'''Resnet for cifar dataset. -Ported form -https://github.com/facebook/fb.resnet.torch -and -https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py -(c) YANG, Wei -''' -import torch.nn as nn -import math - - -__all__ = ['resnet', 'resnet20', 'resnet32', 'resnet44', 'resnet56', - 'resnet110'] - -def conv3x3(in_planes, out_planes, stride=1): - "3x3 convolution with padding" - return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, - padding=1, bias=False) - - -class BasicBlock(nn.Module): - expansion = 1 - - def __init__(self, inplanes, planes, stride=1, downsample=None): - super(BasicBlock, self).__init__() - self.conv1 = conv3x3(inplanes, planes, stride) - self.bn1 = nn.BatchNorm2d(planes) - self.relu = nn.ReLU(inplace=True) - self.conv2 = conv3x3(planes, planes) - self.bn2 = nn.BatchNorm2d(planes) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - -class Bottleneck(nn.Module): - expansion = 4 - - def __init__(self, inplanes, planes, stride=1, downsample=None): - super(Bottleneck, self).__init__() - self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) - self.bn1 = nn.BatchNorm2d(planes) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, - padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(planes) - self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False) - self.bn3 = nn.BatchNorm2d(planes * 4) - self.relu = nn.ReLU(inplace=True) - self.downsample = downsample - self.stride = stride - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - out = self.relu(out) - - out = self.conv3(out) - out = self.bn3(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - -class ResNet(nn.Module): - - def __init__(self, depth, num_classes=1000): - super(ResNet, self).__init__() - # Model type specifies number of layers for CIFAR-10 model - assert (depth - 2) % 6 == 0, 'depth should be 6n+2' - n = (depth - 2) // 6 - - block = Bottleneck if depth >=44 else BasicBlock - - self.inplanes = 16 - self.conv1 = nn.Conv2d(3, 16, kernel_size=3, padding=1, - bias=False) - self.bn1 = nn.BatchNorm2d(16) - self.relu = nn.ReLU(inplace=True) - self.layer1 = self._make_layer(block, 16, n) - self.layer2 = self._make_layer(block, 32, n, stride=2) - self.layer3 = self._make_layer(block, 64, n, stride=2) - self.avgpool = nn.AvgPool2d(8) - self.fc = nn.Linear(64 * block.expansion, num_classes) - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - - def _make_layer(self, block, planes, blocks, stride=1): - downsample = None - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - nn.Conv2d(self.inplanes, planes * block.expansion, - kernel_size=1, stride=stride, bias=False), - nn.BatchNorm2d(planes * block.expansion), - ) - - layers = [] - layers.append(block(self.inplanes, planes, stride, downsample)) - self.inplanes = planes * block.expansion - for i in range(1, blocks): - layers.append(block(self.inplanes, planes)) - - return nn.Sequential(*layers) - - def forward(self, x): - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) # 32x32 - - x = self.layer1(x) # 32x32 - x = self.layer2(x) # 16x16 - x = self.layer3(x) # 8x8 - - x = self.avgpool(x) - x = x.view(x.size(0), -1) - x = self.fc(x) - - return x - - -def resnet(**kwargs): - """ - Constructs a ResNet model. - """ - return ResNet(**kwargs) - - -def resnet20(**kwargs): - return ResNet(20, **kwargs) - - -def resnet32(**kwargs): - return ResNet(32, **kwargs) - - -def resnet44(**kwargs): - return ResNet(44, **kwargs) - - -def resnet56(**kwargs): - return ResNet(56, **kwargs) - - -def resnet110(**kwargs): - return ResNet(110, **kwargs) \ No newline at end of file diff --git a/src/torchprune/torchprune/util/models/cnn/models/cifar/resnext.py b/src/torchprune/torchprune/util/models/cnn/models/cifar/resnext.py deleted file mode 100644 index 50040ed..0000000 --- a/src/torchprune/torchprune/util/models/cnn/models/cifar/resnext.py +++ /dev/null @@ -1,126 +0,0 @@ -from __future__ import division -""" -Creates a ResNeXt Model as defined in: -Xie, S., Girshick, R., Dollar, P., Tu, Z., & He, K. (2016). -Aggregated residual transformations for deep neural networks. -arXiv preprint arXiv:1611.05431. -import from https://github.com/prlz77/ResNeXt.pytorch/blob/master/models/model.py -""" -import torch.nn as nn -import torch.nn.functional as F -from torch.nn import init - -__all__ = ['resnext'] - -class ResNeXtBottleneck(nn.Module): - """ - RexNeXt bottleneck type C (https://github.com/facebookresearch/ResNeXt/blob/master/models/resnext.lua) - """ - def __init__(self, in_channels, out_channels, stride, cardinality, widen_factor): - """ Constructor - Args: - in_channels: input channel dimensionality - out_channels: output channel dimensionality - stride: conv stride. Replaces pooling layer. - cardinality: num of convolution groups. - widen_factor: factor to reduce the input dimensionality before convolution. - """ - super(ResNeXtBottleneck, self).__init__() - D = cardinality * out_channels // widen_factor - self.conv_reduce = nn.Conv2d(in_channels, D, kernel_size=1, stride=1, padding=0, bias=False) - self.bn_reduce = nn.BatchNorm2d(D) - self.conv_conv = nn.Conv2d(D, D, kernel_size=3, stride=stride, padding=1, groups=cardinality, bias=False) - self.bn = nn.BatchNorm2d(D) - self.conv_expand = nn.Conv2d(D, out_channels, kernel_size=1, stride=1, padding=0, bias=False) - self.bn_expand = nn.BatchNorm2d(out_channels) - - self.shortcut = nn.Sequential() - if in_channels != out_channels: - self.shortcut.add_module('shortcut_conv', nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=stride, padding=0, bias=False)) - self.shortcut.add_module('shortcut_bn', nn.BatchNorm2d(out_channels)) - - def forward(self, x): - bottleneck = self.conv_reduce.forward(x) - bottleneck = F.relu(self.bn_reduce.forward(bottleneck), inplace=True) - bottleneck = self.conv_conv.forward(bottleneck) - bottleneck = F.relu(self.bn.forward(bottleneck), inplace=True) - bottleneck = self.conv_expand.forward(bottleneck) - bottleneck = self.bn_expand.forward(bottleneck) - residual = self.shortcut.forward(x) - return F.relu(residual + bottleneck, inplace=True) - - -class CifarResNeXt(nn.Module): - """ - ResNext optimized for the Cifar dataset, as specified in - https://arxiv.org/pdf/1611.05431.pdf - """ - def __init__(self, cardinality, depth, num_classes, widen_factor=4, dropRate=0): - """ Constructor - Args: - cardinality: number of convolution groups. - depth: number of layers. - num_classes: number of classes - widen_factor: factor to adjust the channel dimensionality - """ - super(CifarResNeXt, self).__init__() - self.cardinality = cardinality - self.depth = depth - self.block_depth = (self.depth - 2) // 9 - self.widen_factor = widen_factor - self.num_classes = num_classes - self.output_size = 64 - self.stages = [64, 64 * self.widen_factor, 128 * self.widen_factor, 256 * self.widen_factor] - - self.conv_1_3x3 = nn.Conv2d(3, 64, 3, 1, 1, bias=False) - self.bn_1 = nn.BatchNorm2d(64) - self.stage_1 = self.block('stage_1', self.stages[0], self.stages[1], 1) - self.stage_2 = self.block('stage_2', self.stages[1], self.stages[2], 2) - self.stage_3 = self.block('stage_3', self.stages[2], self.stages[3], 2) - self.classifier = nn.Linear(1024, num_classes) - init.kaiming_normal(self.classifier.weight) - - for key in self.state_dict(): - if key.split('.')[-1] == 'weight': - if 'conv' in key: - init.kaiming_normal(self.state_dict()[key], mode='fan_out') - if 'bn' in key: - self.state_dict()[key][...] = 1 - elif key.split('.')[-1] == 'bias': - self.state_dict()[key][...] = 0 - - def block(self, name, in_channels, out_channels, pool_stride=2): - """ Stack n bottleneck modules where n is inferred from the depth of the network. - Args: - name: string name of the current block. - in_channels: number of input channels - out_channels: number of output channels - pool_stride: factor to reduce the spatial dimensionality in the first bottleneck of the block. - Returns: a Module consisting of n sequential bottlenecks. - """ - block = nn.Sequential() - for bottleneck in range(self.block_depth): - name_ = '%s_bottleneck_%d' % (name, bottleneck) - if bottleneck == 0: - block.add_module(name_, ResNeXtBottleneck(in_channels, out_channels, pool_stride, self.cardinality, - self.widen_factor)) - else: - block.add_module(name_, - ResNeXtBottleneck(out_channels, out_channels, 1, self.cardinality, self.widen_factor)) - return block - - def forward(self, x): - x = self.conv_1_3x3.forward(x) - x = F.relu(self.bn_1.forward(x), inplace=True) - x = self.stage_1.forward(x) - x = self.stage_2.forward(x) - x = self.stage_3.forward(x) - x = F.avg_pool2d(x, 8, 1) - x = x.view(-1, 1024) - return self.classifier(x) - -def resnext(**kwargs): - """Constructs a ResNeXt. - """ - model = CifarResNeXt(**kwargs) - return model \ No newline at end of file diff --git a/src/torchprune/torchprune/util/models/cnn/models/cifar/vgg.py b/src/torchprune/torchprune/util/models/cnn/models/cifar/vgg.py deleted file mode 100644 index 89b1785..0000000 --- a/src/torchprune/torchprune/util/models/cnn/models/cifar/vgg.py +++ /dev/null @@ -1,138 +0,0 @@ -'''VGG for CIFAR10. FC layers are removed. -(c) YANG, Wei -''' -import torch.nn as nn -import torch.utils.model_zoo as model_zoo -import math - - -__all__ = [ - 'VGG', 'vgg11', 'vgg11_bn', 'vgg13', 'vgg13_bn', 'vgg16', 'vgg16_bn', - 'vgg19_bn', 'vgg19', -] - - -model_urls = { - 'vgg11': 'https://download.pytorch.org/models/vgg11-bbd30ac9.pth', - 'vgg13': 'https://download.pytorch.org/models/vgg13-c768596a.pth', - 'vgg16': 'https://download.pytorch.org/models/vgg16-397923af.pth', - 'vgg19': 'https://download.pytorch.org/models/vgg19-dcbb9e9d.pth', -} - - -class VGG(nn.Module): - - def __init__(self, features, num_classes=1000): - super(VGG, self).__init__() - self.features = features - self.classifier = nn.Linear(512, num_classes) - self._initialize_weights() - - def forward(self, x): - x = self.features(x) - x = x.view(x.size(0), -1) - x = self.classifier(x) - return x - - def _initialize_weights(self): - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - if m.bias is not None: - m.bias.data.zero_() - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - elif isinstance(m, nn.Linear): - n = m.weight.size(1) - m.weight.data.normal_(0, 0.01) - m.bias.data.zero_() - - -def make_layers(cfg, batch_norm=False): - layers = [] - in_channels = 3 - for v in cfg: - if v == 'M': - layers += [nn.MaxPool2d(kernel_size=2, stride=2)] - else: - conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1) - if batch_norm: - layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)] - else: - layers += [conv2d, nn.ReLU(inplace=True)] - in_channels = v - return nn.Sequential(*layers) - - -cfg = { - 'A': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], - 'B': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], - 'D': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'], - 'E': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'], -} - - -def vgg11(**kwargs): - """VGG 11-layer model (configuration "A") - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - """ - model = VGG(make_layers(cfg['A']), **kwargs) - return model - - -def vgg11_bn(**kwargs): - """VGG 11-layer model (configuration "A") with batch normalization""" - model = VGG(make_layers(cfg['A'], batch_norm=True), **kwargs) - return model - - -def vgg13(**kwargs): - """VGG 13-layer model (configuration "B") - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - """ - model = VGG(make_layers(cfg['B']), **kwargs) - return model - - -def vgg13_bn(**kwargs): - """VGG 13-layer model (configuration "B") with batch normalization""" - model = VGG(make_layers(cfg['B'], batch_norm=True), **kwargs) - return model - - -def vgg16(**kwargs): - """VGG 16-layer model (configuration "D") - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - """ - model = VGG(make_layers(cfg['D']), **kwargs) - return model - - -def vgg16_bn(**kwargs): - """VGG 16-layer model (configuration "D") with batch normalization""" - model = VGG(make_layers(cfg['D'], batch_norm=True), **kwargs) - return model - - -def vgg19(**kwargs): - """VGG 19-layer model (configuration "E") - - Args: - pretrained (bool): If True, returns a model pre-trained on ImageNet - """ - model = VGG(make_layers(cfg['E']), **kwargs) - return model - - -def vgg19_bn(**kwargs): - """VGG 19-layer model (configuration 'E') with batch normalization""" - model = VGG(make_layers(cfg['E'], batch_norm=True), **kwargs) - return model diff --git a/src/torchprune/torchprune/util/models/cnn/models/cifar/wrn.py b/src/torchprune/torchprune/util/models/cnn/models/cifar/wrn.py deleted file mode 100644 index 49eff18..0000000 --- a/src/torchprune/torchprune/util/models/cnn/models/cifar/wrn.py +++ /dev/null @@ -1,128 +0,0 @@ -import math -import torch -import torch.nn as nn -import torch.nn.functional as F - -__all__ = ['wrn', 'wrn16_8', 'wrn28_10', 'wrn40_1', 'wrn40_4'] - -class BasicBlock(nn.Module): - def __init__(self, in_planes, out_planes, stride, dropRate=0.0): - super(BasicBlock, self).__init__() - self.bn1 = nn.BatchNorm2d(in_planes) - self.relu1 = nn.ReLU(inplace=True) - self.conv1 = nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, - padding=1, bias=False) - self.bn2 = nn.BatchNorm2d(out_planes) - self.relu2 = nn.ReLU(inplace=True) - self.conv2 = nn.Conv2d(out_planes, out_planes, kernel_size=3, stride=1, - padding=1, bias=False) - self.droprate = dropRate - self.equalInOut = (in_planes == out_planes) - self.downsample = (not self.equalInOut) and nn.Conv2d(in_planes, out_planes, kernel_size=1, stride=stride, - padding=0, bias=False) or None - if self.downsample is not None: - self.downsample = nn.Sequential(*[self.downsample]) - - def forward(self, x): - if not self.equalInOut: - x = self.relu1(self.bn1(x)) - else: - out = self.relu1(self.bn1(x)) - out = self.relu2(self.bn2(self.conv1(out if self.equalInOut else x))) - if self.droprate > 0: - out = F.dropout(out, p=self.droprate, training=self.training) - out = self.conv2(out) - return torch.add(x if self.equalInOut else self.downsample(x), out) - -class NetworkBlock(nn.Module): - def __init__(self, nb_layers, in_planes, out_planes, block, stride, dropRate=0.0): - super(NetworkBlock, self).__init__() - self.layer = self._make_layer(block, in_planes, out_planes, nb_layers, stride, dropRate) - def _make_layer(self, block, in_planes, out_planes, nb_layers, stride, dropRate): - layers = [] - for i in range(nb_layers): - layers.append(block(i == 0 and in_planes or out_planes, out_planes, i == 0 and stride or 1, dropRate)) - return nn.Sequential(*layers) - def forward(self, x): - return self.layer(x) - -class WideResNet(nn.Module): - def __init__(self, depth, num_classes, widen_factor=1, dropRate=0.0): - super(WideResNet, self).__init__() - nChannels = [16, 16*widen_factor, 32*widen_factor, 64*widen_factor] - assert (depth - 4) % 6 == 0, 'depth should be 6n+4' - n = (depth - 4) // 6 - block = BasicBlock - # 1st conv before any network block - self.conv1 = nn.Conv2d(3, nChannels[0], kernel_size=3, stride=1, - padding=1, bias=False) - # 1st block - self.layer1 = NetworkBlock(n, nChannels[0], nChannels[1], block, 1, - dropRate).layer - # 2nd block - self.layer2 = NetworkBlock(n, nChannels[1], nChannels[2], block, 2, - dropRate).layer - # 3rd block - self.layer3 = NetworkBlock(n, nChannels[2], nChannels[3], block, 2, - dropRate).layer - # global average pooling and classifier - self.bn1 = nn.BatchNorm2d(nChannels[3]) - self.relu = nn.ReLU(inplace=True) - self.fc = nn.Linear(nChannels[3], num_classes) - self.nChannels = nChannels[3] - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - elif isinstance(m, nn.Linear): - m.bias.data.zero_() - - def forward(self, x): - out = self.conv1(x) - out = self.layer1(out) - out = self.layer2(out) - out = self.layer3(out) - out = self.relu(self.bn1(out)) - out = F.avg_pool2d(out, 8) - out = out.view(-1, self.nChannels) - return self.fc(out) - - -def wrn(**kwargs): - """ - Constructs a Wide Residual Networks. - """ - model = WideResNet(**kwargs) - return model - - -def wrn40_1(**kwargs): - """ - WRN, depth 40, widening factor 1 - """ - return WideResNet(depth=40, widen_factor=1, **kwargs) - - -def wrn40_4(**kwargs): - """ - WRN, depth 40, widening factor 4 - """ - return WideResNet(depth=40, widen_factor=4, **kwargs) - - -def wrn16_8(**kwargs): - """ - WRN, depth 16, widening factor 8 - """ - return WideResNet(depth=16, widen_factor=8, **kwargs) - - -def wrn28_10(**kwargs): - """ - WRN, depth 28, widening factor 10 - """ - return WideResNet(depth=28, widen_factor=10, **kwargs) diff --git a/src/torchprune/torchprune/util/models/cnn/models/imagenet/__init__.py b/src/torchprune/torchprune/util/models/cnn/models/imagenet/__init__.py deleted file mode 100644 index 5c0978e..0000000 --- a/src/torchprune/torchprune/util/models/cnn/models/imagenet/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from __future__ import absolute_import - -from .resnext import * diff --git a/src/torchprune/torchprune/util/models/cnn/models/imagenet/resnext.py b/src/torchprune/torchprune/util/models/cnn/models/imagenet/resnext.py deleted file mode 100644 index 181b9bf..0000000 --- a/src/torchprune/torchprune/util/models/cnn/models/imagenet/resnext.py +++ /dev/null @@ -1,173 +0,0 @@ -from __future__ import division -""" -Creates a ResNeXt Model as defined in: -Xie, S., Girshick, R., Dollar, P., Tu, Z., & He, K. (2016). -Aggregated residual transformations for deep neural networks. -arXiv preprint arXiv:1611.05431. -import from https://github.com/facebookresearch/ResNeXt/blob/master/models/resnext.lua -""" -import math -import torch.nn as nn -import torch.nn.functional as F -from torch.nn import init -import torch - -__all__ = ['resnext50', 'resnext101', 'resnext152'] - -class Bottleneck(nn.Module): - """ - RexNeXt bottleneck type C - """ - expansion = 4 - - def __init__(self, inplanes, planes, baseWidth, cardinality, stride=1, downsample=None): - """ Constructor - Args: - inplanes: input channel dimensionality - planes: output channel dimensionality - baseWidth: base width. - cardinality: num of convolution groups. - stride: conv stride. Replaces pooling layer. - """ - super(Bottleneck, self).__init__() - - D = int(math.floor(planes * (baseWidth / 64))) - C = cardinality - - self.conv1 = nn.Conv2d(inplanes, D*C, kernel_size=1, stride=1, padding=0, bias=False) - self.bn1 = nn.BatchNorm2d(D*C) - self.conv2 = nn.Conv2d(D*C, D*C, kernel_size=3, stride=stride, padding=1, groups=C, bias=False) - self.bn2 = nn.BatchNorm2d(D*C) - self.conv3 = nn.Conv2d(D*C, planes * 4, kernel_size=1, stride=1, padding=0, bias=False) - self.bn3 = nn.BatchNorm2d(planes * 4) - self.relu = nn.ReLU(inplace=True) - - self.downsample = downsample - - def forward(self, x): - residual = x - - out = self.conv1(x) - out = self.bn1(out) - out = self.relu(out) - - out = self.conv2(out) - out = self.bn2(out) - out = self.relu(out) - - out = self.conv3(out) - out = self.bn3(out) - - if self.downsample is not None: - residual = self.downsample(x) - - out += residual - out = self.relu(out) - - return out - - -class ResNeXt(nn.Module): - """ - ResNext optimized for the ImageNet dataset, as specified in - https://arxiv.org/pdf/1611.05431.pdf - """ - def __init__(self, baseWidth, cardinality, layers, num_classes): - """ Constructor - Args: - baseWidth: baseWidth for ResNeXt. - cardinality: number of convolution groups. - layers: config of layers, e.g., [3, 4, 6, 3] - num_classes: number of classes - """ - super(ResNeXt, self).__init__() - block = Bottleneck - - self.cardinality = cardinality - self.baseWidth = baseWidth - self.num_classes = num_classes - self.inplanes = 64 - self.output_size = 64 - - self.conv1 = nn.Conv2d(3, 64, 7, 2, 3, bias=False) - self.bn1 = nn.BatchNorm2d(64) - self.relu = nn.ReLU(inplace=True) - self.maxpool1 = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) - self.layer1 = self._make_layer(block, 64, layers[0]) - self.layer2 = self._make_layer(block, 128, layers[1], 2) - self.layer3 = self._make_layer(block, 256, layers[2], 2) - self.layer4 = self._make_layer(block, 512, layers[3], 2) - self.avgpool = nn.AvgPool2d(7) - self.fc = nn.Linear(512 * block.expansion, num_classes) - - for m in self.modules(): - if isinstance(m, nn.Conv2d): - n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) - elif isinstance(m, nn.BatchNorm2d): - m.weight.data.fill_(1) - m.bias.data.zero_() - - def _make_layer(self, block, planes, blocks, stride=1): - """ Stack n bottleneck modules where n is inferred from the depth of the network. - Args: - block: block type used to construct ResNext - planes: number of output channels (need to multiply by block.expansion) - blocks: number of blocks to be built - stride: factor to reduce the spatial dimensionality in the first bottleneck of the block. - Returns: a Module consisting of n sequential bottlenecks. - """ - downsample = None - if stride != 1 or self.inplanes != planes * block.expansion: - downsample = nn.Sequential( - nn.Conv2d(self.inplanes, planes * block.expansion, - kernel_size=1, stride=stride, bias=False), - nn.BatchNorm2d(planes * block.expansion), - ) - - layers = [] - layers.append(block(self.inplanes, planes, self.baseWidth, self.cardinality, stride, downsample)) - self.inplanes = planes * block.expansion - for i in range(1, blocks): - layers.append(block(self.inplanes, planes, self.baseWidth, self.cardinality)) - - return nn.Sequential(*layers) - - def forward(self, x): - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - x = self.maxpool1(x) - x = self.layer1(x) - x = self.layer2(x) - x = self.layer3(x) - x = self.layer4(x) - x = self.avgpool(x) - x = x.view(x.size(0), -1) - x = self.fc(x) - - return x - - -def resnext50(baseWidth, cardinality): - """ - Construct ResNeXt-50. - """ - model = ResNeXt(baseWidth, cardinality, [3, 4, 6, 3], 1000) - return model - - -def resnext101(baseWidth, cardinality): - """ - Construct ResNeXt-101. - """ - model = ResNeXt(baseWidth, cardinality, [3, 4, 23, 3], 1000) - return model - - -def resnext152(baseWidth, cardinality): - """ - Construct ResNeXt-152. - """ - model = ResNeXt(baseWidth, cardinality, [3, 8, 36, 3], 1000) - return model diff --git a/src/torchprune/torchprune/util/models/cnn/utils/__init__.py b/src/torchprune/torchprune/util/models/cnn/utils/__init__.py deleted file mode 100644 index 848436b..0000000 --- a/src/torchprune/torchprune/util/models/cnn/utils/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -"""Useful utils -""" -from .misc import * -from .logger import * -from .visualize import * -from .eval import * - -# progress bar -import os, sys -sys.path.append(os.path.join(os.path.dirname(__file__), "progress")) -from progress.bar import Bar as Bar \ No newline at end of file diff --git a/src/torchprune/torchprune/util/models/cnn/utils/eval.py b/src/torchprune/torchprune/util/models/cnn/utils/eval.py deleted file mode 100644 index 5051350..0000000 --- a/src/torchprune/torchprune/util/models/cnn/utils/eval.py +++ /dev/null @@ -1,18 +0,0 @@ -from __future__ import print_function, absolute_import - -__all__ = ['accuracy'] - -def accuracy(output, target, topk=(1,)): - """Computes the precision@k for the specified values of k""" - maxk = max(topk) - batch_size = target.size(0) - - _, pred = output.topk(maxk, 1, True, True) - pred = pred.t() - correct = pred.eq(target.view(1, -1).expand_as(pred)) - - res = [] - for k in topk: - correct_k = correct[:k].view(-1).float().sum(0) - res.append(correct_k.mul_(100.0 / batch_size)) - return res \ No newline at end of file diff --git a/src/torchprune/torchprune/util/models/cnn/utils/images/cifar.png b/src/torchprune/torchprune/util/models/cnn/utils/images/cifar.png deleted file mode 100644 index 752409a301ce0b33da5125f3fe757027f563f0cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344825 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�YF+FutW)*E5n7WyQ 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

cCkKb-B#HIX96?1z=HHAiDeNJx_UY5*FeSIT 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 z z`)7j0s|URH0J<}T+&PsBN&)pki1$iSu>gRv%b;?8?3oO4r~qa$BTXrqPwA7iGzsDy zVV3^|ICIq$))%1-!rNQRVK*Y8)Tyy<+SCYDy5H)pgd2O%)L{7gnwoFEzTdjksJ^7! zPim%^zV;$^G!=@2wsQK*O5zsrS?!fjPc}MD+`m?si9&MCx#Wo2A;mosDVYNTpx^XW zgf)sS!Q&f)-yCL zCI;RZct@k7rH+BIc5S?)MY>YQ{?jm69Ooh30%nV9UtZN8g(BomPDt?Bv~gnrlI4yn zKti4<6|BUBa}0OsBY}`T=U)FkkmtI!5SFbCUqhV$;W0WHq!1#u0p%cL4;m~7APM@a#%!4i{+4fmp{?s(p+eA0Gg)lm#zo@tka26l-txtEy2B+?U zJ3atL=t2kzpO~<)hl|u$$H42G%L);3ibwuLn0ZG&9D*m=KS31`kBor{tOvnu8xpKu zetv$1TV)??7ZVZj)GhH>2jy3qR<&d7iOXF7VP=j`Qwn1o={bMm!7e$4t``w6k_jV! pu01|G)0{+p-g55$;peZ@3k)ohTodlD$|N5wcku9mn0;q&{C^Eq+`9k( diff --git a/src/torchprune/torchprune/util/models/cnn/utils/images/imagenet.png b/src/torchprune/torchprune/util/models/cnn/utils/images/imagenet.png deleted file mode 100644 index eb63b7014aca03768640219ba182d965a6ba7687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46471 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

=1<@@9n6li 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