Integrated Gradients#
This notebook demonstrates how to use Integrated Gradients for attribution [1].
Setup#
[1]:
import importlib.util
IN_COLAB = importlib.util.find_spec("google.colab") is not None
[2]:
if IN_COLAB:
%pip install -q tdhook
Usage#
Load model and prepare image
[3]:
import torch
import timm
from PIL import Image
from tensordict import TensorDict
from tdhook.attribution import IntegratedGradients
[4]:
model = timm.create_model("vgg16.tv_in1k", pretrained=True)
data_config = timm.data.resolve_model_data_config(model)
transforms = timm.data.create_transform(**data_config, is_training=False)
image = Image.open("../assets/zebra_1.jpg").convert("RGB")
image_tensor = transforms(image)
Define attribution target (zebra class = 340)
[5]:
def init_attr_targets(targets, _):
zebra_logit = targets["output"][..., 340]
return TensorDict(out=zebra_logit, batch_size=targets.batch_size)
Compute attribution
[6]:
with IntegratedGradients(init_attr_targets=init_attr_targets).prepare(model) as hooked_model:
td = TensorDict({"input": image_tensor, ("baseline", "input"): torch.zeros_like(image_tensor)}).unsqueeze(0)
td = hooked_model(td)
Access attribution:
[7]:
td.get(("attr", "input")).shape
[7]:
torch.Size([1, 3, 224, 224])