Ἀνατομή is a PyTorch library to analyze internal representation of neural networks
This project is under active development and the codebase is subject to change.
Note the name of the pypi package is ultimate-anatome
but the python import is done with
the original name import anatome
.
Test via:
python -c "import anatome.my_utils as my_utils;my_utils.hello()"
python -c "import anatome.my_utils as my_utils;my_utils.my_anatome_test()"
Credit to original library: https://github.com/moskomule/anatome and consider citing both of us! Citation at the end of readme.
If you are going to use a gpu the do this first before continuing (or check the offical website: https://pytorch.org/get-started/locally/):
pip3 install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html
Otherwise, just doing the follwoing should work.
pip install ultimate-anatome
To use code first get the code from this repo (e.g. fork it on github):
git clone git@github.com:brando90/ultimate-anatome.git
Then install it in development mode in your python env with python >=3.9. E.g. create your env with conda:
conda create -n ultimate_anatome_env python=3.9
conda activate ultimate_anatome_env
Then install code in edibable mode and all it's depedencies with pip in the currently activated conda environment:
pip install -e ~/ultimate-anatome
To measure the similarity of learned representation, anatome.SimilarityHook
is a useful tool. Currently, the following
methods are implemented.
import torch
from torchvision.models import resnet18
from anatome import DistanceHook
from anatome.my_utils import remove_hook
model = resnet18()
hook1 = DistanceHook(model, "layer3.0.conv1")
hook2 = DistanceHook(model, "layer3.0.conv2")
model.eval()
with torch.no_grad():
model(torch.randn(128, 3, 224, 224))
# downsampling to (size, size) may be helpful
hook1.distance(hook2, size=8)
hook1.clear()
hook2.clear()
remove_hook(model, hook1)
remove_hook(model, hook2)
or to test do:
from anatome.my_utils import my_anatome_test
my_anatome_test()
from anatome import landscape2d
x, y, z = landscape2d(resnet18(),
data,
F.cross_entropy,
x_range=(-1, 1),
y_range=(-1, 1),
step_size=0.1)
imshow(z)
from anatome import fourier_map
map = fourier_map(resnet18(),
data,
F.cross_entropy,
norm=4)
imshow(map)
If you use this implementation in your research, please conser citing my version of anatome:
@software{miranda2021ultimate_anatome,
author={Brando Miranda},
title={Ultimate Anatome, the ultimate PyTorch library to analyze internal representation of neural networks},
url={https://github.com/brando90/ultimate-anatome},
year={2021}
}
A permanent link lives here: https://www.ideals.illinois.edu/handle/2142/112796
Also consider citing the original version where we took good inspiration:
@software{hataya2020anatome,
author={Ryuichiro Hataya},
title={anatome, a PyTorch library to analyze internal representation of neural networks},
url={https://github.com/moskomule/anatome},
year={2020}
}