
Das Gehirn ist der perfekte Ort, um nach Inspiration zu suchen, um effizientere neuronale Netze zu entwickeln. Einer der Hauptunterschiede beim modernen Deep -Lernen ist, dass das Gehirn Informationen in Spikes und nicht in kontinuierlichen Aktivierungen kodiert. SNNTORCH ist ein Python-Paket zum Durchführen von Gradientenbasis-Lernen mit spitzen neuronalen Netzwerken. Es erweitert die Fähigkeiten von Pytorch, nutzt die GPU -beschleunigte Tensorberechnung und wendet sie auf Netzwerke von Spike -Neuronen an. Vorher entworfene Spike-Neuronenmodelle werden nahtlos in das Pytorch-Framework integriert und können als wiederkehrende Aktivierungseinheiten behandelt werden.

Wenn Ihnen dieses Projekt gefällt, sollten Sie dieses Repo mit der Hauptrolle nachdenken, da dies der einfachste und beste Weg ist, es zu unterstützen.
Wenn Sie Probleme, Kommentare haben oder Ratschläge zur Schulung von neuronalen Netzwerken suchen, können Sie ein Problem, eine Diskussion oder einen Chat in unserem Discord -Kanal eröffnen.
Snntorch enthält die folgenden Komponenten:
| Komponente | Beschreibung |
|---|---|
| snntorch | Eine Spike -Neuron -Bibliothek wie Torch.nn, tief in Autograd integriert |
| snntorch.export | Ermöglicht die Kreuzkompatibilität mit anderen SNN-Bibliotheken über NIR |
| snntorch.funktional | Gemeinsame arithmetische Operationen bei Spikes, z. B. Verlust, Regularisierung usw. |
| snntorch.spikegen | Eine Bibliothek für Spike -Generierung und Datenkonvertierung |
| snntorch.spikeplot | Visualisierungstools für Spike-basierte Daten mit Matplotlib und Celluloid |
| snntorch.surrogate | Optionale Ersatzgradientenfunktionen |
| snntorch.utils | Dataset -Dienstprogrammfunktionen |
Snntorch ist so konzipiert, dass er intuitiv mit Pytorch verwendet wird, als ob jedes Spike -Neuron einfach eine weitere Aktivierung in einer Sequenz von Schichten wäre. Es ist daher agnostisch bis vollständig vernetzte Schichten, Faltungsschichten, Restverbindungen usw.
Gegenwärtig werden die Neuronmodelle durch rekursive Funktionen dargestellt, die die Notwendigkeit beseitigen, Membranpotentialspuren für alle Neuronen in einem System zu speichern, um den Gradienten zu berechnen. Die mageren Anforderungen an SNNTORCH ermöglichen es, wenn kleine und große Netzwerke bei Bedarf auf der CPU geschult werden. Vorausgesetzt, dass die Netzwerkmodelle und Tensoren auf CUDA geladen werden, nutzt SNNTORCH die GPU -Beschleunigung auf die gleiche Weise wie Pytorch.
Wenn Sie Snntorch in Ihrer Arbeit nützlich finden, zitieren Sie bitte die folgende Quelle:
Jason K. Eshraghian, Max Ward, Emre Neftci, Xinxin Wang, Gregor Lenz, Girish Dwivedi, Mohammed Bennamoun, Doo Seok Jeong und Wei D. Lu „Ausbildung von Netzwerken des Spitzennetzwerke mit Lektionen aus dem tiefen Lernen“. Proceedings of the IEEE, 111 (9) September 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}
}Lassen Sie uns wissen, ob Sie Snntorch in einer interessanten Arbeit, Forschung oder Blogs verwenden, da wir gerne mehr darüber erfahren würden! Greifen Sie unter [email protected].
Die folgenden Pakete müssen installiert werden, um Snntorch zu verwenden:
Sie werden automatisch installiert, wenn SNNTorch mit dem PIP -Befehl installiert wird. Stellen Sie sicher, dass die korrekte Version von Torch für Ihr System installiert ist, um die CUDA -Kompatibilität zu ermöglichen.
Führen Sie Folgendes aus, um zu installieren:
$ python
$ pip install snntorchSo installieren Sie stattdessen Snntorch von Quelle:
$ git klone https://github.com/jeshraghian/snntorch $ cd Snntorch $ python setup.py Installation
So installieren Sie Snntorch mit Conda:
$ conda install -c conda -forge snntorch
So installieren Sie für ein intelligentes Verarbeitungseinheiten (IPU) basierte Build mithilfe von GraphCore -Beschleunigern:
$ pip installieren snntorch-ipu
Hier ist eine vollständige API verfügbar. Beispiele, Tutorials und Colab -Notizbücher werden bereitgestellt.
Hier sind einige Möglichkeiten, wie Sie mit Snntorch beginnen können:
Für ein kurzes Beispiel zum Ausführen von SNNTorch finden Sie im folgenden Ausschnitt oder testen Sie das QuickStart -Notizbuch:
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 Wenn Sie alle Grundlagen der Schulung von neuronalen Netzwerken, von Neuronmodellen über den neuronalen Code bis hin bis zur Rückpropagation lernen möchten, ist die Snntorch -Tutorial -Serie ein großartiger Ort zum Beginn. Es besteht aus interaktiven Notizbüchern mit vollständigen Erklärungen, mit denen Sie auf den neuesten Stand bringen können.
| Tutorial | Titel | Colab Link |
|---|---|---|
| Tutorial 1 | Spike -Codierung mit Snntorch | |
| Tutorial 2 | Das undichte Integrieren und Feuer -Neuron | |
| Tutorial 3 | Ein neuronales Netzwerk mit Feedforward | |
| Tutorial 4 | 2nd Order Spiking Neuron Modelle (optional) | |
| Tutorial 5 | Ausbildung neuronaler Netzwerke mit Snntorch | |
| Tutorial 6 | Ersatzgradientenabstieg in einem Faltungs -SNN | |
| Tutorial 7 | Neuromorphe Datensätze mit Tonic + Snntorch |
| Fortgeschrittene Tutorials | Colab Link |
|---|---|
| Bevölkerungscodierung | |
| Regression: Teil I - Membranpotential Lernen mit LIF -Neuronen | |
| Regression: Teil II - Regressionsbasierte Klassifizierung mit wiederkehrenden LIF -Neuronen | |
| SNNTORCH auf IPUs beschleunigen | - |
Snntorch wurde für die IPU -Beschleuniger von GraphCore optimiert. So installieren Sie einen IPU -basierten Build von SNNTorch:
$ pip installieren snntorch-ipu
Benutzerdefinierte Vorgänge für die IPU-Kompatibilität werden automatisch kompiliert, wenn import snntorch zum ersten Mal aufgerufen wird.
Bei der Aktualisierung des Pappel -SDK müssen diese Vorgänge möglicherweise neu kompiliert werden. Dies kann durch Neuinstallieren snntorch-ipu oder Löschen von Dateien im Basisverzeichnis mit einer .so-Erweiterung erfolgen.
Das snntorch.backprop -Modul und mehrere Funktionen von snntorch.functional und snntorch.surrogate sind mit IPUs nicht kompatibel, können jedoch mit Pytorch -Primitiven nachgebildet werden.
Zusätzliche Anforderungen umfassen:
In der Dokumentation von GraphCore finden Sie die Installationsanweisungen von PopTorch und Poplar SDK.
Die Homepage für das SNNTorch IPU -Projekt finden Sie hier. Hier finden Sie ein Tutorial zum Training von SNNs.
Wenn Sie bereit sind, zum SNNTORCH beizutragen, finden Sie hier Anweisungen.
SNNTORCH wird derzeit von der uCSC -neuromorphen Computergruppe aufrechterhalten. Es wurde ursprünglich von Jason K. Eshraghian in der LU -Gruppe (Universität von Michigan) entwickelt.
Zusätzliche Beiträge wurden von Vincent Sun, Peng Zhou, Ridger Zhu, Alexander Henkes, Steven Abreu, Xinxin Wang, Sreyes Venkatesh, Gekkom und Emre Neftci geleistet.
Der Snntorch -Quellcode wird unter den Bedingungen der MIT -Lizenz veröffentlicht. Die Dokumentation von SNNTOrch ist unter einer Creative Commons Attribution-Share gleichermaßen 3,0-nicht portierte Lizenz (CC BY-SA 3.0) lizenziert.