The most comprehensive, scalable, and PyTorch-native implementation of Self-Organizing Maps
π Documentation | π Quick Start | π Examples | π€ Contributing
β If you find torchsom
valuable, please consider starring this repository β
torchsom
is the reference PyTorch library for Self-Organizing Maps (SOMs), purpose-built for seamless integration with modern deep learning and scientific workflows.
Unlike legacy SOM packages, torchsom
is engineered from the ground up to fully leverage PyTorchβs ecosystemβoffering native GPU acceleration, scalable performance, and compatibility with neural network pipelines.
Whether you are a researcher or practitioner, torchsom
empowers you to efficiently incorporate SOMs into your machine learning projects, from exploratory data analysis to advanced model architectures.
torchsom
is the official implementation accompanying the paper: torchsom
: The Reference PyTorch Library for Self-Organizing Maps.
If you use torchsom
in academic or industrial work, please cite the paper and the software (see CITATION
).
Note: Check the table below for a comprehensive comparison of how
torchsom
differs from existing SOM libraries, and explore our Visualization Gallery for examples of the rich visual outputs available.
Aspect | torchsom | MiniSom | SimpSOM | SOMPY | somoclu | som-pbc |
---|---|---|---|---|---|---|
Framework | PyTorch | NumPy | NumPy | NumPy | C++/CUDA | NumPy |
GPU Acceleration | CUDA | β | CuPy/CUML | β | CUDA | β |
API Design | scikit-learn | Custom | Custom | MATLAB | Custom | custom |
Maintenance | Active | Active | Minimal | Minimal | Minimal | β |
Documentation | Rich | β | Basic | β | Basic | Basic |
Test Coverage | ~86% | β | ~53% | β | Minimal | β |
PyPI Distribution | β | β | β | β | β | β |
SOM Variants | Multiple | β | PBC | β | PBC | PBC (only) |
Visualization | Advanced | β | Moderate | Moderate | Basic | Basic |
Extensibility | High | Moderate | Low | Low | Low | Low |
- Quick Start
- Tutorials
- Installation
- Documentation
- Citation
- Contributing
- Acknowledgments
- License
- References
Get started with torchsom
in just a few lines of code:
import torch
from torchsom.core import SOM
from torchsom.visualization import SOMVisualizer
# Create a 10x10 map for 3D input
som = SOM(x=10, y=10, num_features=3, epochs=50)
# Train SOM for 50 epochs on 1000 samples
X = torch.randn(1000, 3)
som.initialize_weights(data=X, mode="pca")
QE, TE = som.fit(data=X)
# Visualize results
visualizer = SOMVisualizer(som=som, config=None)
visualizer.plot_training_errors(quantization_errors=QE, topographic_errors=TE, save_path=None)
visualizer.plot_distance_map(save_path=None)
visualizer.plot_hit_map(data=X, save_path=None)
Explore our comprehensive collection of Jupyter notebooks:
- π
iris.ipynb
: Multiclass classification - π·
wine.ipynb
: Multiclass classification - π
boston_housing.ipynb
: Regression - β‘
energy_efficiency.ipynb
: Multi-output regression - π―
clustering.ipynb
: SOM-based clustering analysis
pip install torchsom
git clone https://github.com/michelin/TorchSOM.git
cd TorchSOM
python3.9 -m venv .torchsom_env
source .torchsom_env/bin/activate
pip install -e ".[dev]"
Comprehensive documentation is available at opensource.michelin.io/TorchSOM
If you use torchsom
in your research, please cite both the paper and software:
@inproceedings{Berthier2025TorchSOM,
title={torchsom: The Reference PyTorch Library for Self-Organizing Maps},
author={Berthier, Louis},
booktitle={Conference Name},
year={2025}
}
@software{Berthier_TorchSOM_The_Reference_2025,
author={Berthier, Louis},
title={torchsom: The Reference PyTorch Library for Self-Organizing Maps},
url={https://github.com/michelin/TorchSOM},
version={1.0.0},
year={2025}
}
For more details, please refer to the CITATION file.
We welcome contributions from the community! See our Contributing Guide and Code of Conduct for details.
- GitHub Issues: Report bugs or request features
- Centre de MathΓ©matiques AppliquΓ©es (CMAP) at Γcole Polytechnique
- Manufacture FranΓ§aise des Pneumatiques Michelin for collaboration
- Giuseppe Vettigli for MiniSom inspiration
- The PyTorch team for the amazing framework
- Logo created using DALL-E
torchsom
is licensed under the Apache License 2.0. See the LICENSE file for details.
- Kohonen, T. (2001). Self-Organizing Maps. Springer.
- MiniSom: Minimalistic Python SOM
- SimpSOM:Simple Self-Organizing Maps
- SOMPY: Python SOM library
- somoclu: Massively Parallel Self-Organizing Maps
- som-pbc: A simple self-organizing map implementation in Python with periodic boundary conditions
- SOM Toolbox: MATLAB implementation