torchsom


Nametorchsom JSON
Version 1.0.0 PyPI version JSON
download
home_pageNone
Summarytorchsom: The Reference PyTorch Library for Self-Organizing Maps
upload_time2025-08-20 13:35:52
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseNone
keywords self-organizing-maps som pytorch machine-learning unsupervised-learning dimensionality-reduction clustering data-visualization just-in-time-learning
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # `torchsom`: The Reference PyTorch Library for Self-Organizing Maps

<div align="center">

<!-- Global Package information -->
[![PyPI version](https://img.shields.io/pypi/v/torchsom.svg?color=blue)](https://pypi.org/project/torchsom/)
[![Python versions](https://img.shields.io/pypi/pyversions/torchsom.svg?color=blue)](https://pypi.org/project/torchsom/)
[![PyTorch versions](https://img.shields.io/badge/PyTorch-2.7-EE4C2C.svg)](https://pytorch.org/)
[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/license/apache-2-0)

<!-- Sonar Qube badges -->
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=michelin_TorchSOM&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM)
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=michelin_TorchSOM&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM)
[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=michelin_TorchSOM&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM)
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=michelin_TorchSOM&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=michelin_TorchSOM&metric=coverage)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM)

<!-- [![SonarQube Cloud](https://sonarcloud.io/images/project_badges/sonarcloud-light.svg)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM) -->

<!-- GitHub Workflows -->
[![Tests](https://github.com/michelin/TorchSOM/workflows/Tests/badge.svg)](https://github.com/michelin/TorchSOM/actions/workflows/test.yml)
[![Code Quality](https://github.com/michelin/TorchSOM/workflows/Code%20Quality/badge.svg)](https://github.com/michelin/TorchSOM/actions/workflows/code-quality.yml)
[![Downloads](https://static.pepy.tech/badge/torchsom)](https://pepy.tech/project/torchsom)
[![GitHub stars](https://img.shields.io/github/stars/michelin/TorchSOM.svg?style=social&label=Star)](https://github.com/michelin/TorchSOM)
<!-- [![Security](https://github.com/michelin/TorchSOM/workflows/Security%20Scanning/badge.svg)](https://github.com/michelin/TorchSOM/actions/workflows/security.yml) -->

<!-- Code Style and Tools -->
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Imports: isort](https://img.shields.io/badge/imports-isort-6c757d.svg?color=blue)](https://pycqa.github.io/isort/)
[![Ruff](https://img.shields.io/badge/linter-ruff-6c757d.svg?color=blue)](https://github.com/astral-sh/ruff)

<p align="center">
    <img src="assets/logo.jpg" alt="TorchSOM_logo" width="400"/>
</p>

**The most comprehensive, scalable, and PyTorch-native implementation of Self-Organizing Maps**

[📚 Documentation](https://opensource.michelin.io/TorchSOM/)
| [🚀 Quick Start](#-quick-start)
| [📊 Examples](notebooks/)
| [🤝 Contributing](CONTRIBUTING.md)
<!-- | [📄 Paper (PDF)](assets/torchsom_jmlr.pdf) -->

**⭐ If you find [`torchsom`](https://github.com/michelin/TorchSOM) valuable, please consider starring this repository ⭐**

</div>

---

## 🎯 Why `torchsom`?

**`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](assets/torchsom_jmlr.pdf).
If you use `torchsom` in academic or industrial work, please cite the paper and the software (see [`CITATION`](CITATION.cff)).

> **Note**: Check the table below for a comprehensive comparison of how `torchsom` differs from existing SOM libraries, and explore our [Visualization Gallery](#-visualization-gallery) for examples of the rich visual outputs available.

### ⚡ Key Advantages

| Aspect | [torchsom](https://github.com/michelin/TorchSOM) | [MiniSom](https://github.com/JustGlowing/minisom) | [SimpSOM](https://github.com/fcomitani/simpsom) | [SOMPY](https://github.com/sevamoo/SOMPY) | [somoclu](https://github.com/peterwittek/somoclu) | [som-pbc](https://github.com/alexarnimueller/som) |
|---|---|---|---|---|---|---|
| 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 |

---

## 📑 Table of Contents

- [Quick Start](#-quick-start)
- [Tutorials](#-tutorials)
- [Installation](#-installation)
- [Documentation](#-documentation)
- [Citation](#-citation)
- [Contributing](#-contributing)
- [Acknowledgments](#-acknowledgments)
- [License](#-license)
- [References](#-references)
<!-- - [Reproducibility](#-reproducibility) -->
<!-- - [Performance Benchmarks](#-performance-benchmarks) -->

---

## 🚀 Quick Start

Get started with `torchsom` in just a few lines of code:

```python
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)
```

## 📓 Tutorials

Explore our comprehensive collection of Jupyter notebooks:

- 📊 [`iris.ipynb`](notebooks/iris.ipynb): Multiclass classification
- 🍷 [`wine.ipynb`](notebooks/wine.ipynb): Multiclass classification
- 🏠 [`boston_housing.ipynb`](notebooks/boston_housing.ipynb): Regression
- ⚡ [`energy_efficiency.ipynb`](notebooks/energy_efficiency.ipynb): Multi-output regression
- 🎯 [`clustering.ipynb`](notebooks/clustering.ipynb): SOM-based clustering analysis

### 🎨 Visualization Gallery

<p align="center">
  <table>
    <tr>
      <td align="center">
        <b>🗺️ D-Matrix Visualization</b><br>
        <p>Michelin production line (regression)</p>
        <img src="assets/michelin_dmatrix.png" alt="U-Matrix" width="220"/>
      </td>
      <td align="center">
        <b>📍 Hit Map Visualization</b><br>
        <p>Michelin production line (regression)</p>
        <img src="assets/michelin_hitmap.png" alt="Hit Map" width="220"/>
      </td>
      <td align="center">
        <b>📊 Mean Map Visualization</b><br>
        <p>Michelin production line (regression)</p>
        <img src="assets/michelin_meanmap.png" alt="Mean Map" width="220"/>
      </td>
    </tr>
    <tr>
      <td align="center" colspan="2">
        <b>🗺️ Component Planes Visualization</b><br>
        <p>Another Michelin line (regression)</p>
        <table>
          <tr>
            <td align="center">
              <img src="assets/michelin_cp12.png" alt="Component Plane 1" width="220"/>
            </td>
            <td align="center">
              <img src="assets/michelin_cp21.png" alt="Component Plane 2" width="220"/>
            </td>
          </tr>
        </table>
      </td>
      <td align="center">
        <b>🏷️ Classification Map</b><br>
        <p>Wine dataset (multi-classification)</p>
        <img src="assets/wine_classificationmap.png" alt="Classification Map" width="220"/>
      </td>
    </tr>
    <tr>
      <td align="center">
        <b>📊 Cluster Metrics</b><br>
        <p>Clustering analysis</p>
        <img src="assets/cluster_metrics.png" alt="Cluster Metrics" width="220"/>
      </td>
      <td align="center">
        <b>📈 K-Means Elbow</b><br>
        <p>Optimal cluster selection</p>
        <img src="assets/kmeans_elbow.png" alt="K-Means Elbow" width="220"/>
      </td>
      <td align="center">
        <b>🎯 HDBSCAN Cluster Map</b><br>
        <p>Cluster visualization</p>
        <img src="assets/hdbscan_cluster_map.png" alt="HDBSCAN Cluster Map" width="220"/>
      </td>
    </tr>
  </table>
</p>

---

## 💾 Installation

### 📦 PyPI

```bash
pip install torchsom
```

### 🔧 Development Version

```bash
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]"
```

---

## 📚 Documentation

Comprehensive documentation is available at [opensource.michelin.io/TorchSOM](https://opensource.michelin.io/TorchSOM/)

---

## 📝 Citation

If you use `torchsom` in your research, please cite both the paper and software:

```bibtex
@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](CITATION.cff) file.

---

## 🤝 Contributing

We welcome contributions from the community! See our [Contributing Guide](CONTRIBUTING.md) and [Code of Conduct](CODE_OF_CONDUCT.md) for details.

- **GitHub Issues**: [Report bugs or request features](https://github.com/michelin/TorchSOM/issues)
<!-- - **GitHub Discussions**: [Ask questions and share ideas](https://github.com/michelin/TorchSOM/discussions) -->

---

## 🙏 Acknowledgments

- [Centre de Mathématiques Appliquées (CMAP)](https://cmap.ip-paris.fr/) at École Polytechnique
- [Manufacture Française des Pneumatiques Michelin](https://www.michelin.com/) for collaboration
- [Giuseppe Vettigli](https://github.com/JustGlowing) for [MiniSom](https://github.com/JustGlowing/minisom) inspiration
- The [PyTorch](https://pytorch.org/) team for the amazing framework
- Logo created using [DALL-E](https://openai.com/index/dall-e-3/)

---

## 📄 License

`torchsom` is licensed under the [Apache License 2.0](LICENSE). See the [LICENSE](LICENSE) file for details.

---

## 📚 References

### 📖 Core Papers

- Kohonen, T. (2001). [Self-Organizing Maps](https://link.springer.com/book/10.1007/978-3-642-56927-2). Springer.

### 🔗 Related Projects

- [MiniSom](https://github.com/JustGlowing/minisom): Minimalistic Python SOM
- [SimpSOM](https://github.com/fcomitani/simpsom):Simple Self-Organizing Maps
- [SOMPY](https://github.com/sevamoo/SOMPY): Python SOM library
- [somoclu](https://github.com/peterwittek/somoclu): Massively Parallel Self-Organizing Maps
- [som-pbc](https://github.com/alexarnimueller/som): A simple self-organizing map implementation in Python with periodic boundary conditions
- [SOM Toolbox](http://www.cis.hut.fi/projects/somtoolbox/): MATLAB implementation

---

<!-- ### 🎨 Core Capabilities

- **🏗️ Multiple SOM Variants**: Batch SOM, Growing SOM, Hierarchical SOM, and other variants
- **⚡ GPU Acceleration**: Full CUDA support with automatic device management
- **🔄 PyTorch Native**: Seamless integration with existing PyTorch workflows
- **📊 Rich Visualizations**: 10+ visualization types including U-Matrix, Component Planes, Hit Maps
- **🎯 Flexible Training**: Online and batch learning modes with customizable schedules

### 🧪 Advanced Features

- **🌐 Deep Learning Integration**: Use SOMs as layers, with autograd support
- **📈 Scalable Architecture**: Handle millions of samples efficiently
- **🔧 Customizable Components**: Plug-in architecture for neighborhoods, learning rates, distances
- **📱 Multi-GPU Support**: Distributed training for large-scale applications
- **🎮 Interactive Visualizations**: Real-time training monitoring and exploration

### 🛠️ Technical Specifications

- **✅ Type Safety**: Full type hints and runtime validation with Pydantic
- **📝 Comprehensive Docs**: Detailed API documentation with examples
- **🧪 Thoroughly Tested**: 95%+ test coverage with CI/CD
- **🔍 Reproducible**: Deterministic training with seed management -->

<!-- ---

## ⚡ Performance Benchmarks

### Training & Memory Performance

| Case | Samples | Features | Map Size | TorchSOM<br>CPU Time (s) | TorchSOM<br>CPU RAM (GB) | TorchSOM<br>GPU Time (s) | TorchSOM<br>GPU RAM (GB) | MiniSom<br>CPU Time (s) | MiniSom<br>CPU RAM (GB) |
|------|---------|----------|----------|--------------------------|--------------------------|--------------------------|--------------------------|-------------------------|-------------------------|
| 1    | 1,000   | 30       | 15×15    | 0.7 ± 0.1                | 0.6 ± 0.1                | 0.09 ± 0.01              | 0.09 ± 0.01              | 2.1 ± 0.2               | 0.7 ± 0.1               |
| 2    | 2,500   | 40       | 20×20    | 1.5 ± 0.2                | 0.8 ± 0.1                | 0.15 ± 0.01              | 0.12 ± 0.01              | 4.8 ± 0.3               | 1.0 ± 0.1               |
| 3    | 5,000   | 50       | 25×25    | 3.2 ± 0.3                | 1.2 ± 0.1                | 0.28 ± 0.02              | 0.18 ± 0.01              | 10.2 ± 0.5              | 1.6 ± 0.2               |
| 4    | 10,000  | 60       | 30×30    | 6.8 ± 0.5                | 1.8 ± 0.2                | 0.55 ± 0.03              | 0.25 ± 0.02              | 22.5 ± 1.0              | 2.5 ± 0.2               |
| 5    | 20,000  | 80       | 40×40    | 14.7 ± 0.8               | 2.9 ± 0.2                | 1.1 ± 0.05               | 0.42 ± 0.03              | 48.9 ± 2.0              | 4.2 ± 0.3               |
| 6    | 35,000  | 100      | 50×50    | 28.3 ± 1.2               | 4.5 ± 0.3                | 2.0 ± 0.08               | 0.65 ± 0.04              | 98.7 ± 3.5              | 7.0 ± 0.5               |
| 7    | 50,000  | 120      | 60×60    | 44.2 ± 1.8               | 6.2 ± 0.4                | 3.1 ± 0.10               | 0.92 ± 0.05              | 152.3 ± 5.0             | 9.8 ± 0.7               |
| 8    | 65,000  | 150      | 75×75    | 62.8 ± 2.5               | 8.7 ± 0.6                | 4.5 ± 0.15               | 1.3 ± 0.07               | 210.5 ± 7.0             | 13.5 ± 1.0              |
| 9    | 80,000  | 200      | 100×100  | 85.6 ± 3.0               | 12.1 ± 0.8               | 6.2 ± 0.20               | 1.8 ± 0.09               | 295.0 ± 10.0            | 18.7 ± 1.2              |
| 10   | 100,000 | 300      | 125×125  | 120.3 ± 4.0              | 18.5 ± 1.2               | 8.9 ± 0.25               | 2.7 ± 0.12               | 410.2 ± 15.0            | 27.5 ± 2.0              |

*RAM values are in GB. Times are in seconds. "OOM" = (out of memory).
Benchmarks performed on NVIDIA RTX 3090 (GPU), AMD Ryzen 9 5900X (CPU).*

### Training & Memory Speedup

| Case | TorchSOM CPU Speedup | TorchSOM GPU Speedup | TorchSOM CPU RAM Saving | TorchSOM GPU RAM Saving |
|------|------------------------|-------------------------|----------------------------|----------------------------|
| 1    | 3.0×                   | 23.3×                   | 1.2×                       | 7.8×                       |
| 2    | 3.2×                   | 32.0×                   | 1.3×                       | 8.3×                       |
| 3    | 3.2×                   | 36.4×                   | 1.3×                       | 8.9×                       |
| 4    | 3.3×                   | 40.9×                   | 1.4×                       | 10.0×                      |
| 5    | 3.3×                   | 44.5×                   | 1.4×                       | 10.0×                      |
| 6    | 3.5×                   | 49.4×                   | 1.6×                       | 10.8×                      |
| 7    | 3.4×                   | 49.2×                   | 1.6×                       | 10.7×                      |
| 8    | 3.4×                   | 46.8×                   | 1.6×                       | 10.4×                      |
| 9    | 3.4×                   | 47.6×                   | 1.5×                       | 10.4×                      |
| 10   | 3.4×                   | 46.1×                   | 1.5×                       | 10.2×                      |

*Speedup = (MiniSom CPU Time / TorchSOM Time) for each mode.*

**Summary:**

- TorchSOM (GPU) achieves up to ~Z× speedup and ~Z× lower memory usage compared to MiniSom (CPU) on large datasets.
- TorchSOM (CPU) is consistently Y–Z× faster and more memory efficient than MiniSom (CPU).
- All benchmarks use identical data and map initialization for fair comparison. -->

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "torchsom",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "Louis Berthier <louis-desire-romeo.berthier@michelin.com>",
    "keywords": "Self-Organizing-Maps, SOM, PyTorch, Machine-Learning, Unsupervised-Learning, Dimensionality-Reduction, Clustering, Data-Visualization, Just-In-Time-Learning",
    "author": null,
    "author_email": "Louis Berthier <louis-desire-romeo.berthier@michelin.com>",
    "download_url": "https://files.pythonhosted.org/packages/65/53/ef427b792014afe35f467b129dd50b83145e3622f3446889dd536d041928/torchsom-1.0.0.tar.gz",
    "platform": null,
    "description": "# `torchsom`: The Reference PyTorch Library for Self-Organizing Maps\n\n<div align=\"center\">\n\n<!-- Global Package information -->\n[![PyPI version](https://img.shields.io/pypi/v/torchsom.svg?color=blue)](https://pypi.org/project/torchsom/)\n[![Python versions](https://img.shields.io/pypi/pyversions/torchsom.svg?color=blue)](https://pypi.org/project/torchsom/)\n[![PyTorch versions](https://img.shields.io/badge/PyTorch-2.7-EE4C2C.svg)](https://pytorch.org/)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/license/apache-2-0)\n\n<!-- Sonar Qube badges -->\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=michelin_TorchSOM&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=michelin_TorchSOM&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=michelin_TorchSOM&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=michelin_TorchSOM&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=michelin_TorchSOM&metric=coverage)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM)\n\n<!-- [![SonarQube Cloud](https://sonarcloud.io/images/project_badges/sonarcloud-light.svg)](https://sonarcloud.io/summary/new_code?id=michelin_TorchSOM) -->\n\n<!-- GitHub Workflows -->\n[![Tests](https://github.com/michelin/TorchSOM/workflows/Tests/badge.svg)](https://github.com/michelin/TorchSOM/actions/workflows/test.yml)\n[![Code Quality](https://github.com/michelin/TorchSOM/workflows/Code%20Quality/badge.svg)](https://github.com/michelin/TorchSOM/actions/workflows/code-quality.yml)\n[![Downloads](https://static.pepy.tech/badge/torchsom)](https://pepy.tech/project/torchsom)\n[![GitHub stars](https://img.shields.io/github/stars/michelin/TorchSOM.svg?style=social&label=Star)](https://github.com/michelin/TorchSOM)\n<!-- [![Security](https://github.com/michelin/TorchSOM/workflows/Security%20Scanning/badge.svg)](https://github.com/michelin/TorchSOM/actions/workflows/security.yml) -->\n\n<!-- Code Style and Tools -->\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Imports: isort](https://img.shields.io/badge/imports-isort-6c757d.svg?color=blue)](https://pycqa.github.io/isort/)\n[![Ruff](https://img.shields.io/badge/linter-ruff-6c757d.svg?color=blue)](https://github.com/astral-sh/ruff)\n\n<p align=\"center\">\n    <img src=\"assets/logo.jpg\" alt=\"TorchSOM_logo\" width=\"400\"/>\n</p>\n\n**The most comprehensive, scalable, and PyTorch-native implementation of Self-Organizing Maps**\n\n[\ud83d\udcda Documentation](https://opensource.michelin.io/TorchSOM/)\n| [\ud83d\ude80 Quick Start](#-quick-start)\n| [\ud83d\udcca Examples](notebooks/)\n| [\ud83e\udd1d Contributing](CONTRIBUTING.md)\n<!-- | [\ud83d\udcc4 Paper (PDF)](assets/torchsom_jmlr.pdf) -->\n\n**\u2b50 If you find [`torchsom`](https://github.com/michelin/TorchSOM) valuable, please consider starring this repository \u2b50**\n\n</div>\n\n---\n\n## \ud83c\udfaf Why `torchsom`?\n\n**`torchsom`** is the reference PyTorch library for Self-Organizing Maps (SOMs), purpose-built for seamless integration with modern deep learning and scientific workflows.\nUnlike legacy SOM packages, `torchsom` is engineered from the ground up to fully leverage PyTorch\u2019s ecosystem\u2014offering native GPU acceleration, scalable performance, and compatibility with neural network pipelines.\nWhether 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.\n\n`torchsom` is the official implementation accompanying the paper: [`torchsom`: The Reference PyTorch Library for Self-Organizing Maps](assets/torchsom_jmlr.pdf).\nIf you use `torchsom` in academic or industrial work, please cite the paper and the software (see [`CITATION`](CITATION.cff)).\n\n> **Note**: Check the table below for a comprehensive comparison of how `torchsom` differs from existing SOM libraries, and explore our [Visualization Gallery](#-visualization-gallery) for examples of the rich visual outputs available.\n\n### \u26a1 Key Advantages\n\n| Aspect | [torchsom](https://github.com/michelin/TorchSOM) | [MiniSom](https://github.com/JustGlowing/minisom) | [SimpSOM](https://github.com/fcomitani/simpsom) | [SOMPY](https://github.com/sevamoo/SOMPY) | [somoclu](https://github.com/peterwittek/somoclu) | [som-pbc](https://github.com/alexarnimueller/som) |\n|---|---|---|---|---|---|---|\n| Framework | PyTorch | NumPy | NumPy | NumPy | C++/CUDA | NumPy |\n| GPU Acceleration |  CUDA | \u274c | CuPy/CUML | \u274c | CUDA | \u274c |\n| API Design | scikit-learn | Custom | Custom | MATLAB | Custom | custom |\n| Maintenance | Active | Active | Minimal | Minimal | Minimal | \u274c |\n| Documentation | Rich | \u274c | Basic | \u274c | Basic | Basic |\n| Test Coverage | ~86% | \u274c | ~53% | \u274c | Minimal | \u274c |\n| PyPI Distribution | \u2705 | \u2705 | \u2705 | \u274c | \u2705 | \u274c |\n| SOM Variants | Multiple | \u274c | PBC | \u274c | PBC | PBC (only) |\n| Visualization | Advanced | \u274c | Moderate | Moderate | Basic | Basic |\n| Extensibility | High | Moderate | Low | Low | Low | Low |\n\n---\n\n## \ud83d\udcd1 Table of Contents\n\n- [Quick Start](#-quick-start)\n- [Tutorials](#-tutorials)\n- [Installation](#-installation)\n- [Documentation](#-documentation)\n- [Citation](#-citation)\n- [Contributing](#-contributing)\n- [Acknowledgments](#-acknowledgments)\n- [License](#-license)\n- [References](#-references)\n<!-- - [Reproducibility](#-reproducibility) -->\n<!-- - [Performance Benchmarks](#-performance-benchmarks) -->\n\n---\n\n## \ud83d\ude80 Quick Start\n\nGet started with `torchsom` in just a few lines of code:\n\n```python\nimport torch\nfrom torchsom.core import SOM\nfrom torchsom.visualization import SOMVisualizer\n\n# Create a 10x10 map for 3D input\nsom = SOM(x=10, y=10, num_features=3, epochs=50)\n\n# Train SOM for 50 epochs on 1000 samples\nX = torch.randn(1000, 3)\nsom.initialize_weights(data=X, mode=\"pca\")\nQE, TE = som.fit(data=X)\n\n# Visualize results\nvisualizer = SOMVisualizer(som=som, config=None)\nvisualizer.plot_training_errors(quantization_errors=QE, topographic_errors=TE, save_path=None)\nvisualizer.plot_distance_map(save_path=None)\nvisualizer.plot_hit_map(data=X, save_path=None)\n```\n\n## \ud83d\udcd3 Tutorials\n\nExplore our comprehensive collection of Jupyter notebooks:\n\n- \ud83d\udcca [`iris.ipynb`](notebooks/iris.ipynb): Multiclass classification\n- \ud83c\udf77 [`wine.ipynb`](notebooks/wine.ipynb): Multiclass classification\n- \ud83c\udfe0 [`boston_housing.ipynb`](notebooks/boston_housing.ipynb): Regression\n- \u26a1 [`energy_efficiency.ipynb`](notebooks/energy_efficiency.ipynb): Multi-output regression\n- \ud83c\udfaf [`clustering.ipynb`](notebooks/clustering.ipynb): SOM-based clustering analysis\n\n### \ud83c\udfa8 Visualization Gallery\n\n<p align=\"center\">\n  <table>\n    <tr>\n      <td align=\"center\">\n        <b>\ud83d\uddfa\ufe0f D-Matrix Visualization</b><br>\n        <p>Michelin production line (regression)</p>\n        <img src=\"assets/michelin_dmatrix.png\" alt=\"U-Matrix\" width=\"220\"/>\n      </td>\n      <td align=\"center\">\n        <b>\ud83d\udccd Hit Map Visualization</b><br>\n        <p>Michelin production line (regression)</p>\n        <img src=\"assets/michelin_hitmap.png\" alt=\"Hit Map\" width=\"220\"/>\n      </td>\n      <td align=\"center\">\n        <b>\ud83d\udcca Mean Map Visualization</b><br>\n        <p>Michelin production line (regression)</p>\n        <img src=\"assets/michelin_meanmap.png\" alt=\"Mean Map\" width=\"220\"/>\n      </td>\n    </tr>\n    <tr>\n      <td align=\"center\" colspan=\"2\">\n        <b>\ud83d\uddfa\ufe0f Component Planes Visualization</b><br>\n        <p>Another Michelin line (regression)</p>\n        <table>\n          <tr>\n            <td align=\"center\">\n              <img src=\"assets/michelin_cp12.png\" alt=\"Component Plane 1\" width=\"220\"/>\n            </td>\n            <td align=\"center\">\n              <img src=\"assets/michelin_cp21.png\" alt=\"Component Plane 2\" width=\"220\"/>\n            </td>\n          </tr>\n        </table>\n      </td>\n      <td align=\"center\">\n        <b>\ud83c\udff7\ufe0f Classification Map</b><br>\n        <p>Wine dataset (multi-classification)</p>\n        <img src=\"assets/wine_classificationmap.png\" alt=\"Classification Map\" width=\"220\"/>\n      </td>\n    </tr>\n    <tr>\n      <td align=\"center\">\n        <b>\ud83d\udcca Cluster Metrics</b><br>\n        <p>Clustering analysis</p>\n        <img src=\"assets/cluster_metrics.png\" alt=\"Cluster Metrics\" width=\"220\"/>\n      </td>\n      <td align=\"center\">\n        <b>\ud83d\udcc8 K-Means Elbow</b><br>\n        <p>Optimal cluster selection</p>\n        <img src=\"assets/kmeans_elbow.png\" alt=\"K-Means Elbow\" width=\"220\"/>\n      </td>\n      <td align=\"center\">\n        <b>\ud83c\udfaf HDBSCAN Cluster Map</b><br>\n        <p>Cluster visualization</p>\n        <img src=\"assets/hdbscan_cluster_map.png\" alt=\"HDBSCAN Cluster Map\" width=\"220\"/>\n      </td>\n    </tr>\n  </table>\n</p>\n\n---\n\n## \ud83d\udcbe Installation\n\n### \ud83d\udce6 PyPI\n\n```bash\npip install torchsom\n```\n\n### \ud83d\udd27 Development Version\n\n```bash\ngit clone https://github.com/michelin/TorchSOM.git\ncd TorchSOM\npython3.9 -m venv .torchsom_env\nsource .torchsom_env/bin/activate\npip install -e \".[dev]\"\n```\n\n---\n\n## \ud83d\udcda Documentation\n\nComprehensive documentation is available at [opensource.michelin.io/TorchSOM](https://opensource.michelin.io/TorchSOM/)\n\n---\n\n## \ud83d\udcdd Citation\n\nIf you use `torchsom` in your research, please cite both the paper and software:\n\n```bibtex\n@inproceedings{Berthier2025TorchSOM,\n    title={torchsom: The Reference PyTorch Library for Self-Organizing Maps},\n    author={Berthier, Louis},\n    booktitle={Conference Name},\n    year={2025}\n}\n\n@software{Berthier_TorchSOM_The_Reference_2025,\n    author={Berthier, Louis},\n    title={torchsom: The Reference PyTorch Library for Self-Organizing Maps},\n    url={https://github.com/michelin/TorchSOM},\n    version={1.0.0},\n    year={2025}\n}\n```\n\nFor more details, please refer to the [CITATION](CITATION.cff) file.\n\n---\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions from the community! See our [Contributing Guide](CONTRIBUTING.md) and [Code of Conduct](CODE_OF_CONDUCT.md) for details.\n\n- **GitHub Issues**: [Report bugs or request features](https://github.com/michelin/TorchSOM/issues)\n<!-- - **GitHub Discussions**: [Ask questions and share ideas](https://github.com/michelin/TorchSOM/discussions) -->\n\n---\n\n## \ud83d\ude4f Acknowledgments\n\n- [Centre de Math\u00e9matiques Appliqu\u00e9es (CMAP)](https://cmap.ip-paris.fr/) at \u00c9cole Polytechnique\n- [Manufacture Fran\u00e7aise des Pneumatiques Michelin](https://www.michelin.com/) for collaboration\n- [Giuseppe Vettigli](https://github.com/JustGlowing) for [MiniSom](https://github.com/JustGlowing/minisom) inspiration\n- The [PyTorch](https://pytorch.org/) team for the amazing framework\n- Logo created using [DALL-E](https://openai.com/index/dall-e-3/)\n\n---\n\n## \ud83d\udcc4 License\n\n`torchsom` is licensed under the [Apache License 2.0](LICENSE). See the [LICENSE](LICENSE) file for details.\n\n---\n\n## \ud83d\udcda References\n\n### \ud83d\udcd6 Core Papers\n\n- Kohonen, T. (2001). [Self-Organizing Maps](https://link.springer.com/book/10.1007/978-3-642-56927-2). Springer.\n\n### \ud83d\udd17 Related Projects\n\n- [MiniSom](https://github.com/JustGlowing/minisom): Minimalistic Python SOM\n- [SimpSOM](https://github.com/fcomitani/simpsom):Simple Self-Organizing Maps\n- [SOMPY](https://github.com/sevamoo/SOMPY): Python SOM library\n- [somoclu](https://github.com/peterwittek/somoclu): Massively Parallel Self-Organizing Maps\n- [som-pbc](https://github.com/alexarnimueller/som): A simple self-organizing map implementation in Python with periodic boundary conditions\n- [SOM Toolbox](http://www.cis.hut.fi/projects/somtoolbox/): MATLAB implementation\n\n---\n\n<!-- ### \ud83c\udfa8 Core Capabilities\n\n- **\ud83c\udfd7\ufe0f Multiple SOM Variants**: Batch SOM, Growing SOM, Hierarchical SOM, and other variants\n- **\u26a1 GPU Acceleration**: Full CUDA support with automatic device management\n- **\ud83d\udd04 PyTorch Native**: Seamless integration with existing PyTorch workflows\n- **\ud83d\udcca Rich Visualizations**: 10+ visualization types including U-Matrix, Component Planes, Hit Maps\n- **\ud83c\udfaf Flexible Training**: Online and batch learning modes with customizable schedules\n\n### \ud83e\uddea Advanced Features\n\n- **\ud83c\udf10 Deep Learning Integration**: Use SOMs as layers, with autograd support\n- **\ud83d\udcc8 Scalable Architecture**: Handle millions of samples efficiently\n- **\ud83d\udd27 Customizable Components**: Plug-in architecture for neighborhoods, learning rates, distances\n- **\ud83d\udcf1 Multi-GPU Support**: Distributed training for large-scale applications\n- **\ud83c\udfae Interactive Visualizations**: Real-time training monitoring and exploration\n\n### \ud83d\udee0\ufe0f Technical Specifications\n\n- **\u2705 Type Safety**: Full type hints and runtime validation with Pydantic\n- **\ud83d\udcdd Comprehensive Docs**: Detailed API documentation with examples\n- **\ud83e\uddea Thoroughly Tested**: 95%+ test coverage with CI/CD\n- **\ud83d\udd0d Reproducible**: Deterministic training with seed management -->\n\n<!-- ---\n\n## \u26a1 Performance Benchmarks\n\n### Training & Memory Performance\n\n| Case | Samples | Features | Map Size | TorchSOM<br>CPU Time (s) | TorchSOM<br>CPU RAM (GB) | TorchSOM<br>GPU Time (s) | TorchSOM<br>GPU RAM (GB) | MiniSom<br>CPU Time (s) | MiniSom<br>CPU RAM (GB) |\n|------|---------|----------|----------|--------------------------|--------------------------|--------------------------|--------------------------|-------------------------|-------------------------|\n| 1    | 1,000   | 30       | 15\u00d715    | 0.7 \u00b1 0.1                | 0.6 \u00b1 0.1                | 0.09 \u00b1 0.01              | 0.09 \u00b1 0.01              | 2.1 \u00b1 0.2               | 0.7 \u00b1 0.1               |\n| 2    | 2,500   | 40       | 20\u00d720    | 1.5 \u00b1 0.2                | 0.8 \u00b1 0.1                | 0.15 \u00b1 0.01              | 0.12 \u00b1 0.01              | 4.8 \u00b1 0.3               | 1.0 \u00b1 0.1               |\n| 3    | 5,000   | 50       | 25\u00d725    | 3.2 \u00b1 0.3                | 1.2 \u00b1 0.1                | 0.28 \u00b1 0.02              | 0.18 \u00b1 0.01              | 10.2 \u00b1 0.5              | 1.6 \u00b1 0.2               |\n| 4    | 10,000  | 60       | 30\u00d730    | 6.8 \u00b1 0.5                | 1.8 \u00b1 0.2                | 0.55 \u00b1 0.03              | 0.25 \u00b1 0.02              | 22.5 \u00b1 1.0              | 2.5 \u00b1 0.2               |\n| 5    | 20,000  | 80       | 40\u00d740    | 14.7 \u00b1 0.8               | 2.9 \u00b1 0.2                | 1.1 \u00b1 0.05               | 0.42 \u00b1 0.03              | 48.9 \u00b1 2.0              | 4.2 \u00b1 0.3               |\n| 6    | 35,000  | 100      | 50\u00d750    | 28.3 \u00b1 1.2               | 4.5 \u00b1 0.3                | 2.0 \u00b1 0.08               | 0.65 \u00b1 0.04              | 98.7 \u00b1 3.5              | 7.0 \u00b1 0.5               |\n| 7    | 50,000  | 120      | 60\u00d760    | 44.2 \u00b1 1.8               | 6.2 \u00b1 0.4                | 3.1 \u00b1 0.10               | 0.92 \u00b1 0.05              | 152.3 \u00b1 5.0             | 9.8 \u00b1 0.7               |\n| 8    | 65,000  | 150      | 75\u00d775    | 62.8 \u00b1 2.5               | 8.7 \u00b1 0.6                | 4.5 \u00b1 0.15               | 1.3 \u00b1 0.07               | 210.5 \u00b1 7.0             | 13.5 \u00b1 1.0              |\n| 9    | 80,000  | 200      | 100\u00d7100  | 85.6 \u00b1 3.0               | 12.1 \u00b1 0.8               | 6.2 \u00b1 0.20               | 1.8 \u00b1 0.09               | 295.0 \u00b1 10.0            | 18.7 \u00b1 1.2              |\n| 10   | 100,000 | 300      | 125\u00d7125  | 120.3 \u00b1 4.0              | 18.5 \u00b1 1.2               | 8.9 \u00b1 0.25               | 2.7 \u00b1 0.12               | 410.2 \u00b1 15.0            | 27.5 \u00b1 2.0              |\n\n*RAM values are in GB. Times are in seconds. \"OOM\" = (out of memory).\nBenchmarks performed on NVIDIA RTX 3090 (GPU), AMD Ryzen 9 5900X (CPU).*\n\n### Training & Memory Speedup\n\n| Case | TorchSOM CPU Speedup | TorchSOM GPU Speedup | TorchSOM CPU RAM Saving | TorchSOM GPU RAM Saving |\n|------|------------------------|-------------------------|----------------------------|----------------------------|\n| 1    | 3.0\u00d7                   | 23.3\u00d7                   | 1.2\u00d7                       | 7.8\u00d7                       |\n| 2    | 3.2\u00d7                   | 32.0\u00d7                   | 1.3\u00d7                       | 8.3\u00d7                       |\n| 3    | 3.2\u00d7                   | 36.4\u00d7                   | 1.3\u00d7                       | 8.9\u00d7                       |\n| 4    | 3.3\u00d7                   | 40.9\u00d7                   | 1.4\u00d7                       | 10.0\u00d7                      |\n| 5    | 3.3\u00d7                   | 44.5\u00d7                   | 1.4\u00d7                       | 10.0\u00d7                      |\n| 6    | 3.5\u00d7                   | 49.4\u00d7                   | 1.6\u00d7                       | 10.8\u00d7                      |\n| 7    | 3.4\u00d7                   | 49.2\u00d7                   | 1.6\u00d7                       | 10.7\u00d7                      |\n| 8    | 3.4\u00d7                   | 46.8\u00d7                   | 1.6\u00d7                       | 10.4\u00d7                      |\n| 9    | 3.4\u00d7                   | 47.6\u00d7                   | 1.5\u00d7                       | 10.4\u00d7                      |\n| 10   | 3.4\u00d7                   | 46.1\u00d7                   | 1.5\u00d7                       | 10.2\u00d7                      |\n\n*Speedup = (MiniSom CPU Time / TorchSOM Time) for each mode.*\n\n**Summary:**\n\n- TorchSOM (GPU) achieves up to ~Z\u00d7 speedup and ~Z\u00d7 lower memory usage compared to MiniSom (CPU) on large datasets.\n- TorchSOM (CPU) is consistently Y\u2013Z\u00d7 faster and more memory efficient than MiniSom (CPU).\n- All benchmarks use identical data and map initialization for fair comparison. -->\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "torchsom: The Reference PyTorch Library for Self-Organizing Maps",
    "version": "1.0.0",
    "project_urls": {
        "Citation": "https://github.com/michelin/TorchSOM/blob/main/CITATION.cff",
        "Code of Conduct": "https://github.com/michelin/TorchSOM/blob/main/CODE_OF_CONDUCT.md",
        "Contributing": "https://github.com/michelin/TorchSOM/blob/main/CONTRIBUTING.md",
        "Documentation": "https://opensource.michelin.io/TorchSOM/",
        "License": "https://github.com/michelin/TorchSOM/blob/main/LICENSE",
        "Source": "https://github.com/michelin/torchsom",
        "Tracker": "https://github.com/michelin/TorchSOM/issues"
    },
    "split_keywords": [
        "self-organizing-maps",
        " som",
        " pytorch",
        " machine-learning",
        " unsupervised-learning",
        " dimensionality-reduction",
        " clustering",
        " data-visualization",
        " just-in-time-learning"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "62f139272b50df2ef0c50947f8143fab22c68fbad88182dc6e803d041a3f2906",
                "md5": "3057b0dd6c72de289a1f821c9eccbbc4",
                "sha256": "2bce0ac11c3cb42f14fe11547ae1d65a008c11cbff4952a964f509ca724685b7"
            },
            "downloads": -1,
            "filename": "torchsom-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3057b0dd6c72de289a1f821c9eccbbc4",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 60154,
            "upload_time": "2025-08-20T13:35:51",
            "upload_time_iso_8601": "2025-08-20T13:35:51.267105Z",
            "url": "https://files.pythonhosted.org/packages/62/f1/39272b50df2ef0c50947f8143fab22c68fbad88182dc6e803d041a3f2906/torchsom-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6553ef427b792014afe35f467b129dd50b83145e3622f3446889dd536d041928",
                "md5": "9e56e72f58ed8d76cd471193ddd8c3c1",
                "sha256": "74ee60581494a347f10393c536384f0237e88e6bf6feecfd94fbce9db130db6b"
            },
            "downloads": -1,
            "filename": "torchsom-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "9e56e72f58ed8d76cd471193ddd8c3c1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 58788,
            "upload_time": "2025-08-20T13:35:52",
            "upload_time_iso_8601": "2025-08-20T13:35:52.303460Z",
            "url": "https://files.pythonhosted.org/packages/65/53/ef427b792014afe35f467b129dd50b83145e3622f3446889dd536d041928/torchsom-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-20 13:35:52",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "michelin",
    "github_project": "TorchSOM",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "torchsom"
}
        
Elapsed time: 1.11859s