Skip to main content

torchsom: The Reference PyTorch Library for Self-Organizing Maps

Project description

torchsom: The Reference PyTorch Library for Self-Organizing Maps

PyPI version Python versions PyTorch versions License: Apache 2.0

Quality Gate Status Reliability Rating Security Rating Maintainability Rating Coverage

Tests Code Quality Downloads GitHub stars

Code style: black Imports: isort Ruff

TorchSOM_logo

A modern, comprehensive and GPU-accelerated PyTorch implementation of Self-Organizing Maps for scalable ML workflows

๐Ÿ“š Documentation | ๐Ÿš€ Quick Start | ๐Ÿ“Š Examples | ๐Ÿค Contributing

โญ If you find torchsom valuable, please consider starring this repository โญ


๐ŸŽฏ Overview

Self-Organizing Maps (SOMs) remain highly relevant in modern machine learning (ML) due to their interpretability, topology preservation, and computational efficiency. They excel and are widely used in domains such as energy systems, biology, internet of things (IoT), environmental science, and industrial applications.

Despite their utility, the SOM ecosystem is fragmented. Existing implementations are often outdated, unmaintained, and lack GPU acceleration or modern deep learning (DL) framework integration, limiting adoption and scalability.

torchsom addresses these gaps as a reference PyTorch library for SOMs. It provides:

  • GPU-accelerated training
  • Advanced clustering capabilities
  • A scikit-learn-style API for ease of use
  • Rich visualization tools
  • Robust software engineering practices

torchsom enables researchers and practitioners to integrate SOMs seamlessly into workflows, from exploratory data analysis to advanced model architectures.

This library accompanies the paper: torchsom: The Reference PyTorch Library for Self-Organizing Maps. If you use torchsom in academic or industrial work, please cite both the paper and the software (see CITATION).

Note: See the comparison table below to understand how torchsom differs from other SOM libraries, and explore our Visualization Gallery for example outputs.

โšก Why torchsom?

Unlike legacy implementations, torchsom is engineered from the ground up for modern ML workflows:

torchsom MiniSom SimpSOM SOMPY somoclu som-pbc
Architecture Section
Framework PyTorch NumPy NumPy NumPy C++/CUDA NumPy
GPU Acceleration โœ… CUDA โŒ โœ… CuPy/CUML โŒ โœ… CUDA โŒ
API Design scikit-learn Custom Custom MATLAB Custom custom
Development Quality Section
Maintenance โœ… Active โœ… Active โš ๏ธ Minimal โš ๏ธ Minimal โš ๏ธ Minimal โŒ
Documentation โœ… Rich โŒ โš ๏ธ Basic โŒ โš ๏ธ Basic โš ๏ธ Basic
Test Coverage โœ… ~86% โŒ ๐ŸŸ  ~53% โŒ โš ๏ธ Minimal โŒ
PyPI Distribution โœ… โœ… โœ… โŒ โœ… โŒ
Functionality Section
Visualization โœ… Advanced โŒ ๐ŸŸ  Moderate ๐ŸŸ  Moderate โš ๏ธ Basic โš ๏ธ Basic
Clustering โœ… Advanced โŒ โŒ โŒ โŒ โŒ
JITL support โœ… Built-in โŒ โŒ โŒ โŒ โŒ
SOM Variants ๐Ÿšง In development โŒ ๐ŸŸ  PBC โŒ ๐ŸŸ  PBC ๐ŸŸ  PBC
Extensibility โœ… High ๐ŸŸ  Moderate โš ๏ธ Low โš ๏ธ Low โš ๏ธ Low โš ๏ธ Low

Note: torchsom supports Just-In-Time Learning (JITL). Given an online query, JITL collects relevant datapoints to form a local buffer (selected first by topology, then by distance). A lightweight local model is then trained on this buffer, enabling efficient supervised learning (regression or classification).


๐Ÿ“‘ Table of Contents


๐Ÿš€ Quick Start

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_hit_map(data=X, batch_size=256, save_path=None)
visualizer.plot_distance_map(
  save_path=None,
  distance_metric=som.distance_fn_name,
  neighborhood_order=som.neighborhood_order,
  scaling="sum"
)

๐Ÿ““ Tutorials

Explore our comprehensive collection of Jupyter notebooks:

๐ŸŽจ Visualization Gallery

๐Ÿ—บ๏ธ D-Matrix Visualization

Michelin production line (regression)

U-Matrix
๐Ÿ“ Hit Map Visualization

Michelin production line (regression)

Hit Map
๐Ÿ“Š Mean Map Visualization

Michelin production line (regression)

Mean Map
๐Ÿ—บ๏ธ Component Planes Visualization

Another Michelin line (regression)

Component Plane 1 Component Plane 2
๐Ÿท๏ธ Classification Map

Wine dataset (multi-classification)

Classification Map
๐Ÿ“Š Cluster Metrics

Clustering analysis

Cluster Metrics
๐Ÿ“ˆ K-Means Elbow

Optimal cluster selection

K-Means Elbow
๐ŸŽฏ HDBSCAN Cluster Map

Cluster visualization

HDBSCAN Cluster Map


๐Ÿ’พ Installation

๐Ÿ“ฆ PyPI

pip install torchsom

๐Ÿ”ง Development Version

git clone https://github.com/michelin/TorchSOM.git
cd TorchSOM
python3.9 -m venv .torchsom_env
source .torchsom_env/bin/activate
pip install -e ".[all]"

๐Ÿ“š Documentation

Comprehensive documentation is available at opensource.michelin.io/TorchSOM


๐Ÿ“ Citation

If you use torchsom in your academic, research or industrial work, 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.


๐Ÿค Contributing

We welcome contributions from the community! See our Contributing Guide and Code of Conduct for details.


๐Ÿ™ Acknowledgments


๐Ÿ“„ License

torchsom is licensed under the Apache License 2.0. See the LICENSE file for details.


๐Ÿ“š Related Work and References

๐Ÿ“– Foundational Literature Papers

๐Ÿ”— Related Softwares

  • 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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

torchsom-1.1.1.tar.gz (56.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torchsom-1.1.1-py3-none-any.whl (58.8 kB view details)

Uploaded Python 3

File details

Details for the file torchsom-1.1.1.tar.gz.

File metadata

  • Download URL: torchsom-1.1.1.tar.gz
  • Upload date:
  • Size: 56.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for torchsom-1.1.1.tar.gz
Algorithm Hash digest
SHA256 2aa021f8b8e615f5869d2266d64f1fba7ef8e7a4acde76e3576c4da7c1bae1e2
MD5 93859caf2f30eafeb2fc440a3d012ce2
BLAKE2b-256 5a54ffa54acde666cd2033bf2aef91d274ea96b863e6ce2f81655c11dc464dff

See more details on using hashes here.

File details

Details for the file torchsom-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: torchsom-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 58.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for torchsom-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3b640671ebc114193bed418729ef5243a70c55b6627100ae3c1ce48cd4e59d1d
MD5 88c9f33df41094995900f6c0b20e5872
BLAKE2b-256 c8223b863869e9109ca4da2dc078355bdd4ee8c96f959d84a9ff44d49ae704ae

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page