
Le cerveau est l'endroit idéal pour rechercher l'inspiration pour développer des réseaux de neurones plus efficaces. L'une des principales différences avec l'apprentissage en profondeur moderne est que le cerveau code pour les informations plutôt que des activations continues. Snntorch est un package Python pour effectuer un apprentissage basé sur un gradient avec des réseaux de neurones à pointe. Il étend les capacités du pytorch, profitant de son calcul du tenseur accéléré par le GPU et l'appliquant à des réseaux de neurones à pointe. Les modèles de neurones à dopage pré-conçus sont intégrés de manière transparente dans le cadre Pytorch et peuvent être traités comme des unités d'activation récurrentes.

Si vous aimez ce projet, veuillez envisager de jouer ce dépôt car il s'agit du moyen le plus simple et le meilleur de le soutenir.
Si vous avez des problèmes, des commentaires ou recherchez des conseils sur la formation de réseaux de neurones à dopage, vous pouvez ouvrir un problème, une discussion ou discuter dans notre canal Discord.
Snntorch contient les composants suivants:
| Composant | Description |
|---|---|
| snntorch | Une bibliothèque de neurones à dopage comme Torch.nn, profondément intégrée à Autograd |
| snntorch.export | Permet la compatibilité croisée avec d'autres bibliothèques SNN via NIR |
| snntorch.fonctionnel | Opérations arithmétiques communes sur les pointes, par exemple, la perte, la régularisation, etc. |
| snntorch.spikegen | Une bibliothèque pour la génération de pointes et la conversion des données |
| snntorch.spikeplot | Outils de visualisation pour les données basées sur les pointes à l'aide de matplotlib et de celluloïd |
| snntorch.surrogate | fonctions de gradient de substitution facultatif |
| snntorch.utils | Fonctions d'utilité de l'ensemble de données |
Snntorch est conçu pour être intuitivement utilisé avec Pytorch, comme si chaque neurone à dopage était simplement une autre activation dans une séquence de couches. Il est donc agnostique de couches entièrement connectées, de couches convolutionnelles, de connexions résiduelles, etc.
À l'heure actuelle, les modèles de neurones sont représentés par des fonctions récursives qui suppriment la nécessité de stocker des traces de potentiel membranaire pour tous les neurones d'un système afin de calculer le gradient. Les exigences allégées de Snntorch permettent à des réseaux de petits et grands réseaux de former vivement sur le processeur, si nécessaire. À condition que les modèles de réseau et les tenseurs soient chargés sur CUDA, Snntorch tire parti de l'accélération du GPU de la même manière que Pytorch.
Si vous trouvez Snntorch utile dans votre travail, veuillez citer la source suivante:
Jason K. Eshraghian, Max Ward, Emre Neftci, Xinxin Wang, Gregor Lenz, Girish Dwivedi, Mohammed Bennamoun, Doo Seok Jeong et Wei D. Lu «Formation de réseaux neuronaux enracinés en utilisant des leçons de l'apprentissage en profondeur». Actes de l'IEEE, 111 (9) septembre 2023.
@article{eshraghian2021training,
title = {Training spiking neural networks using lessons from deep learning},
author = {Eshraghian, Jason K and Ward, Max and Neftci, Emre and Wang, Xinxin
and Lenz, Gregor and Dwivedi, Girish and Bennamoun, Mohammed and
Jeong, Doo Seok and Lu, Wei D},
journal = {Proceedings of the IEEE},
volume = {111},
number = {9},
pages = {1016--1054},
year = {2023}
}Faites-nous savoir si vous utilisez Snntorch dans une œuvre, des recherches ou des blogs intéressants, car nous aimerions en savoir plus à ce sujet! Contactez la main à [email protected].
Les packages suivants doivent être installés pour utiliser Snntorch:
Ils sont automatiquement installés si Snntorch est installé à l'aide de la commande PIP. Assurez-vous que la version correcte de la torche est installée pour votre système afin de permettre la compatibilité CUDA.
Exécutez ce qui suit pour installer:
$ python
$ pip install snntorchPour installer Snntorch à partir de la source à la place:
$ git clone https://github.com/jeshraghian/snntorch $ cd snntorch $ python setup.py install
Pour installer snntorch avec conda:
$ conda install -c conda-forge snntorch
Pour installer pour une construction basée sur les unités de traitement intelligente (IPU) à l'aide des accélérateurs de Graphcore:
$ pip install snntorch-ipu
Une API complète est disponible ici. Des exemples, des tutoriels et des cahiers de colab sont fournis.
Voici quelques façons de commencer avec Snntorch:
Pour un exemple rapide pour exécuter Snntorch, consultez l'extrait suivant ou testez le cahier QuickStart:
import torch , torch . nn as nn
import snntorch as snn
from snntorch import surrogate
from snntorch import utils
num_steps = 25 # number of time steps
batch_size = 1
beta = 0.5 # neuron decay rate
spike_grad = surrogate . fast_sigmoid () # surrogate gradient
net = nn . Sequential (
nn . Conv2d ( 1 , 8 , 5 ),
nn . MaxPool2d ( 2 ),
snn . Leaky ( beta = beta , init_hidden = True , spike_grad = spike_grad ),
nn . Conv2d ( 8 , 16 , 5 ),
nn . MaxPool2d ( 2 ),
snn . Leaky ( beta = beta , init_hidden = True , spike_grad = spike_grad ),
nn . Flatten (),
nn . Linear ( 16 * 4 * 4 , 10 ),
snn . Leaky ( beta = beta , init_hidden = True , spike_grad = spike_grad , output = True )
)
data_in = torch . rand ( num_steps , batch_size , 1 , 28 , 28 ) # random input data
spike_recording = [] # record spikes over time
utils . reset ( net ) # reset/initialize hidden states for all neurons
for step in range ( num_steps ): # loop over time
spike , state = net ( data_in [ step ]) # one time step of forward-pass
spike_recording . append ( spike ) # record spikes in list Si vous souhaitez apprendre tous les principes fondamentaux de la formation des réseaux de neurones à pointe, des modèles de neurones, au code neuronal, jusqu'à la rétro-propagation, la série de didacticiels Snntorch est un excellent point de départ. Il se compose de cahiers interactifs avec des explications complètes qui peuvent vous mettre au courant.
| Tutoriel | Titre | Lien colab |
|---|---|---|
| Tutoriel 1 | Encodage de pointes avec Snntorch | |
| Tutoriel 2 | Le neurone d'intégration et de tir qui fuit | |
| Tutoriel 3 | Un réseau de neurones à renverser | |
| Tutoriel 4 | Modèles de neurones à dopage du 2e ordre (facultatif) | |
| Tutoriel 5 | Formation des réseaux de neurones enrage avec Snntorch | |
| Tutoriel 6 | Descente de gradient de substitution dans un SNN convolutionnel | |
| Tutoriel 7 | Ensembles de données neuromorphes avec tonique + snntorch |
| Tutoriels avancés | Lien colab |
|---|---|
| Codage de la population | |
| Régression: Partie I - Apprentissage potentiel de la membrane avec les neurones LIF | |
| Régression: partie II - Classification basée sur la régression avec des neurones LIF récurrents | |
| Accélérer le snntorch sur ipus | - |
Snntorch a été optimisé pour les accélérateurs de Graphcore IPU. Pour installer une version basée sur l'IPU de Snntorch:
$ pip install snntorch-ipu
Les opérations personnalisées de bas niveau pour la compatibilité IPU seront automatiquement compilées lorsque import snntorch est appelée pour la première fois.
Lors de la mise à jour du SDK Poplar, ces opérations peuvent devoir être recompilées. Cela peut être fait en réinstallant snntorch-ipu ou en supprimant des fichiers dans le répertoire de base avec une extension .so.
Le module snntorch.backprop et plusieurs fonctions de snntorch.functional et snntorch.surrogate , sont incompatibles avec les IPU, mais peuvent être recréés à l'aide de primitives pytorch.
Les exigences supplémentaires comprennent:
Reportez-vous à la documentation de Graphcore pour les instructions d'installation de Poptorch et du SDK Poplar.
La page d'accueil du projet IPU SNNTORCH est disponible ici. Un tutoriel pour la formation SNNS est fourni ici.
Si vous êtes prêt à contribuer à Snntorch, des instructions pour le faire peuvent être trouvées ici.
Snntorch est actuellement maintenu par le groupe informatique neuromorphique UCSC. Il a été initialement développé par Jason K. Eshraghian dans le groupe LU (Université du Michigan).
Vincent Sun, Peng Zhou, Ridger Zhu, Alexander Henkes, Steven Abreu, Xinxin Wang, Sreyes Venkatesh, Gekkom et Emre Neftci.
Le code source SNNTORCH est publié selon les termes de la licence MIT. La documentation de SnnTorch est sous licence de licence non reportée d'attribution de Creative Commons (CC BY-SA 3.0).