Configure an explanation run
The recommended pattern is the from_training_task_config factory — it copies the dataset and model pipeline config from a completed training run and adds the explanation-specific settings:
from atria_insights.configs.explanation_task_config import ExplanationTaskConfig
from atria_insights.explainers._torchxai import IntegratedGradientsExplainerConfig
from atria_insights.explanation_pipelines._common import ExplainabilityMetrics
from atria_insights.explainability_metrics._torchxai._faithfulness import AOPCConfig
from atria_insights.explainability_metrics._torchxai._complexity import ComplexityEntropyConfig
config = ExplanationTaskConfig.from_training_task_config(
explanation_pipeline_name="image_classification",
training_task_config=training_config, # from a completed training run
exp_name="img_cls_ig_00",
output_dir="./outputs",
explainer=IntegratedGradientsExplainerConfig(n_steps=50),
explainability_metrics=ExplainabilityMetrics(
aopc=AOPCConfig(enabled=True, total_feature_bins=100),
complexity_entropy=ComplexityEntropyConfig(enabled=True),
),
)
For text/document tasks use "sequence_classification", "token_classification", "layout_token_classification", or their _attn variants as the pipeline name.
Run the explainer
from atria_insights.model_explainer import ModelExplainer
explainer = ModelExplainer(
config=config,
checkpoint_path="./outputs/exp1/checkpoints/best.pt",
)
explainer.run()
# Attributions stored to: {run_dir}/attributions.h5
# Metrics stored to: {run_dir}/metrics.h5
Run via the CLI
atria explain --config explanation_config.yaml
Load stored attributions
import h5py
with h5py.File("./outputs/explanations/attributions.h5", "r") as f:
for sample_id in f.keys():
attribution = f[sample_id]["attribution"][:]
# attribution shape: (C, H, W) for image attribution
Compare two explainers
Run two explanation configs differing only in explainer, both pointing to the same checkpoint and dataset. Load both metric HDF5 files and compare per-sample metric values:
import h5py, numpy as np
with h5py.File("runs/ig/metrics.h5") as f_ig, \
h5py.File("runs/deeplift/metrics.h5") as f_dl:
aopc_ig = np.array([f_ig[sid]["aopc"][()] for sid in f_ig])
aopc_dl = np.array([f_dl[sid]["aopc"][()] for sid in f_dl])
print(f"IG AOPC: {aopc_ig.mean():.4f} DeepLIFT AOPC: {aopc_dl.mean():.4f}")