Dense and fastfood transform wrappers to reproduce "Intrinsic dimensionality of objective landscapes" by Li et al. (2018)
Project description
About
This package includes fastfood and dense transformation wrappers for pytorch modules, primarily to reproduce results from Li, Chunyuan, et al. "Measuring the intrinsic dimension of objective landscapes." arXiv preprint arXiv:1804.08838 (2018) - see below for info.
-
All contributions are welcome! Please raise an issue for a bug, feature or pull request!
-
Give this repo a star! :star:
Install
pip install intrinsic-dimensionality
Quick start on your classification task!
import os
os.environ["CUDA_VISIBLE_DEVICES"] = DEVICE_NUM
import torch
from torch import nn
import torchvision.models as models
from intrinsic import FastFoodWrap
class Classifier(nn.Module):
def __init__(self, input_dim, n_classes):
super(Classifier, self).__init__()
self.fc = nn.Linear(input_dim, n_classes)
self.maxpool = nn.AdaptiveMaxPool2d(1)
def forward(self, x):
x = self.maxpool(x)
x = x.reshape(x.size(0), -1)
x = self.fc(x)
return x
def get_resnet(encoder_name, num_classes, pretrained=False):
assert encoder_name in ["resnet18", "resnet50"], "{} is a wrong encoder name!".format(encoder_name)
if encoder_name == "resnet18":
model = models.resnet18(pretrained=pretrained)
latent_dim = 512
else:
model = models.resnet50(pretrained=pretrained)
latent_dim = 2048
children = (list(model.children())[:-2] + [Classifier(latent_dim, num_classes)])
model = torch.nn.Sequential(*children)
return model
# Get model and wrap it in fastfood
model = get_resnet("resnet18", num_classes=YOUR_NUMBER_OF_CLASSES).cuda()
model = FastFoodWrap(model, intrinsic_dimension=100, device=DEVICE_NUM)
Reproducing experiments from the paper
Full thread about reproducibility results is available here. Note that some hyper-parameters were not listed in the paper - I raised issues on Uber's Github repo here.
I am able to reproduce their MNIST results with LR=0.0003, batch size 32 for both dense and fastfood transformations using FCN (fcn-dense, fcn-fastfood). However, not for LeNet (cnn-dense, cnn-fastfood).
For CIFAR-10, with far larger resnet (Resnet-18 11mil param) vs 280k 20-layer resnet used in the paper, results appear to be similar. FCN results in appendix (Fig S7) suggest some variation is to be expected.
Cite
@misc{jgamper2020intrinsic,
title = "Intrinsic-dimensionality Pytorch",
author = "Gamper, Jevgenij",
year = "2020",
url = "https://github.com/jgamper/intrinsic-dimensionality"
}
@article{li2018measuring,
title={Measuring the intrinsic dimension of objective landscapes},
author={Li, Chunyuan and Farkhoor, Heerad and Liu, Rosanne and Yosinski, Jason},
journal={arXiv preprint arXiv:1804.08838},
year={2018}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for intrinsic-dimensionality-0.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a505b1ee17aa31426ccff647f8f76b3b36a4c50bd43cea27804fc7176e8ec3f |
|
MD5 | 0fe7b09cb000f165ac235b085f5c1834 |
|
BLAKE2b-256 | 773409adedea4cb869bbbc8c0281a381680bf93962f31d128d2dc3e473b09886 |
Hashes for intrinsic_dimensionality-0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 98ab2452ba11506647e1772673c33142058b1944e85fb9c62fcca12d3c81fd3d |
|
MD5 | 2c061b9abece10154e6a58f9bec66fd4 |
|
BLAKE2b-256 | 80e1ac4f57158703ccfd3b94d90bd6d76ac621fa84ddc25aaf69c0a7f9d1d34b |