🚀 Getting Started - 📚 Documentation - 💻 User guide
Caution
Alpha software: PyC is currently under active development. Public APIs may change and be unstable between releases.
PyC is a library built upon
PyTorch and
PyTorch Lightning to easily implement interpretable and causally transparent deep learning models.
The library provides primitives for annotated tensors, interpretable layers, interventions, interpretable probabilistic graphical models, and APIs for running experiments at scale.
The name of the library stands for both
- PyTorch Concepts: as concepts are essential building blocks for interpretable deep learning.
-
$P(y|C)$ : as the main purpose of the library is to support sound probabilistic modeling of the conditional distribution of targets$y$ given concepts$C$ .
Install PyC from PyPI:
pip install --pre "pytorch-concepts[data]"Use pip install --pre pytorch-concepts for core-only (no data dependencies), or see full installation options for conda setup.
A few basic elements let you name concepts, compute them, train them and act on them. Here is what each one lets you do:
|
Annotations name the concepts, with their type and size. |
Annotated tensors bind values to concept names. |
import torch_concepts as pyc
ann = pyc.Annotations(
labels=["red", "shape", "size"],
types=[
"binary",
"categorical",
"continuous",
],
cardinalities=[1, 3, 1],
) |
x = torch.randn(8, 5)
c = pyc.AnnotatedTensor(x, ann)
c["red"] # slice by concept
c.binary() # slice by type |
|
Concept layers map embeddings and/or concepts to concepts. |
Concept losses score each concept with the loss of its type. |
from torch_concepts.nn import (
LinearEmbeddingToConcept,
)
layer = LinearEmbeddingToConcept(
in_embeddings=16,
out_concepts=ann,
)
emb = torch.randn(8, 16)
out = layer.annotate(layer(emb)) |
from torch import nn
from torch_concepts.nn import ConceptLoss
loss_fn = ConceptLoss(
binary=nn.BCEWithLogitsLoss(),
categorical=nn.CrossEntropyLoss(),
continuous=nn.MSELoss(),
)
loss = loss_fn(out, target) |
|
Interventions edit concepts inside a |
|
from torch_concepts.nn import DoIntervention, UniformPolicy, intervention
with intervention(layer, DoIntervention(1.0), UniformPolicy(), ["red"]):
out = layer(emb) # "red" is set to 1.0 |
|
The quickstart trains a first model end to end, and the user guide covers the rest of PyC.
The library is organized to be modular and accessible at different levels of abstraction:
Conceptarium (No-code API): applications and benchmarking. These APIs allow to easily run large-scale experiments by interfacing only with configuration files. Built on top of
Hydra and
WandB.
- High-level APIs: use out-of-the-box models. These APIs allow to instantiate models with 1 line of code. Models are available both as plain
PyTorch modules (implementing
forward, allowing custom training loops) and asPyTorch Lightning modules.
- Mid-level APIs: interpretable probabilistic graphical models. These APIs allow to define variables (concepts and embeddings), connect them via conditional distributions parametrized by interpretable layers, and perform probabilistic inference on the resulting graphical model.
- Low-level APIs: interpretable layers. These APIs allow to build architectures from basic interpretable layers in a plain
PyTorch-like interface. These APIs also include annotated tensors, interventions, metrics, losses, and datasets.
Contributions are welcome! Please check our contributing guidelines to get started.
Thanks to all contributors! 🧡
- Sonia Laguna, ETH Zurich (CH).
- Moritz Vandenhirtz, ETH Zurich (CH).
If you found this library useful for your research article, blog post, or product, we would be grateful if you would cite it using the following bibtex entry:
@software{pycteam2025concept,
author = {De Felice, Giovanni and Barbiero, Pietro and De Santis, Francesco and Gabrielli, Edoardo and Casanova Flores, Arianna and Ciravegna, Gabriele and Debot, David and Espinosa Zarlenga, Mateo and Jamnik, Mateja and Marra, Giuseppe},
license = {Apache 2.0},
month = {3},
title = {{PyTorch Concepts}},
url = {https://github.com/pyc-team/pytorch_concepts},
year = {2025}
}
Reference authors: Giovanni De Felice, Pietro Barbiero, and Mateo Espinosa Zarlenga.
This project is supported by the following organizations:




