
El cerebro es el lugar perfecto para buscar inspiración para desarrollar redes neuronales más eficientes. Una de las principales diferencias con el aprendizaje profundo moderno es que el cerebro codifica información en picos en lugar de activaciones continuas. SnnTorch es un paquete de Python para realizar el aprendizaje basado en gradiente con redes neuronales de picos. Extiende las capacidades de Pytorch, aprovechando su computación tensor acelerada de GPU y aplicándolo a redes de neuronas de picos. Los modelos de neuronas de picos prediseñados se integran perfectamente dentro del marco de Pytorch y pueden tratarse como unidades de activación recurrente.

Si le gusta este proyecto, considere protagonizar este repositorio, ya que es la mejor y más fácil manera de apoyarlo.
Si tiene problemas, comentarios o está buscando consejos sobre la capacitación de redes neuronales que pueden abrir un problema, una discusión o chatear en nuestro canal de discordia.
SnnTorch contiene los siguientes componentes:
| Componente | Descripción |
|---|---|
| snntorch | Una biblioteca de neuronas de picos como Torch.nn, profundamente integrada con Autograd |
| snntorch.export | habilita la compatibilidad cruzada con otras bibliotecas SNN a través de NIR |
| snntorch.Funcional | Operaciones aritméticas comunes en picos, por ejemplo, pérdida, regularización, etc. |
| snntorch.spikegen | una biblioteca para la generación de picos y la conversión de datos |
| snntorch.spikeplot | Herramientas de visualización para datos basados en picos utilizando matplotlib y celuloide |
| snntorch.srogate | Funciones de gradiente sustituto opcional |
| snntorch.utils | Funciones de utilidad del conjunto de datos |
SnnTorch está diseñado para usarse intuitivamente con Pytorch, como si cada neurona de pico fuera simplemente otra activación en una secuencia de capas. Por lo tanto, es agnóstico a capas totalmente conectadas, capas convolucionales, conexiones residuales, etc.
En la actualidad, los modelos de neuronas están representados por funciones recursivas que eliminan la necesidad de almacenar trazas potenciales de membrana para todas las neuronas en un sistema para calcular el gradiente. Los requisitos delgados de SnnTorch permiten que las redes pequeñas y grandes se entrenen de manera varentable en la CPU, donde sea necesario. Siempre que los modelos y tensores de red se carguen en CUDA, SnnTorch aprovecha la aceleración de GPU de la misma manera que Pytorch.
Si encuentra útil Snntorch en su trabajo, cite la siguiente fuente:
Jason K. Eshraghian, Max Ward, Emre Neftci, Xinxin Wang, Gregor Lenz, Girish Dwivedi, Mohammed Bennamoun, Doo Seok Jeong y Wei D. Lu “Entrenamiento de redes neuronales que usan lecciones de aprendizaje profundo". Actas del IEEE, 111 (9) septiembre de 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}
}Háganos saber si está utilizando SnnTorch en algún trabajo, investigación o blogs interesantes, ¡ya que nos encantaría saber más al respecto! Comuníquese en [email protected].
Se deben instalar los siguientes paquetes para usar Snntorch:
Se instalan automáticamente si Snntorch se instala utilizando el comando PIP. Asegúrese de que se instale la versión correcta de la antorcha para su sistema para habilitar la compatibilidad de CUDA.
Ejecute lo siguiente para instalar:
$ python
$ pip install snntorchPara instalar Snntorch desde la fuente en su lugar:
$ git clone https://github.com/jeshraghian/snntorch $ cd snntorch $ python setup.py instalación
Para instalar Snntorch con conda:
$ conda instalación -c conda -forge snntorch
Instalar para una compilación basada en unidades de procesamiento inteligente (IPU) utilizando los aceleradores de GraphCore:
$ pip install snntorch-ipu
Una API completa está disponible aquí. Se proporcionan ejemplos, tutoriales y cuadernos Colab.
Aquí hay algunas maneras en que puede comenzar con Snntorch:
Para obtener un ejemplo rápido para ejecutar Snntorch, consulte el siguiente fragmento o pruebe el cuaderno 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 desea aprender todos los fundamentos de la capacitación de redes neuronales de aumento, desde modelos de neuronas, hasta el código neuronal, hasta la backpropagation, la serie Tutorial SnnTorch es un gran lugar para comenzar. Consiste en cuadernos interactivos con explicaciones completas que pueden ponerte al día.
| Tutorial | Título | Enlace de colab |
|---|---|---|
| Tutorial 1 | Spike codificando con snntorch | |
| Tutorial 2 | La fugas integran y al fuego neurona | |
| Tutorial 3 | Una red neuronal de avance de avance de avance | |
| Tutorial 4 | 2º Modelos de neuronas de picos de orden (opcional) | |
| Tutorial 5 | Entrenamiento de redes neuronales con Snntorch | |
| Tutorial 6 | Descenso de gradiente sustituto en un SNN convolucional | |
| Tutorial 7 | Conjuntos de datos neuromórficos con tónico + snntorch |
| Tutoriales avanzados | Enlace de colab |
|---|---|
| Codificación de población | |
| Regresión: Parte I - Aprendizaje potencial de membrana con neuronas LIF | |
| Regresión: Parte II - Clasificación basada en la regresión con neuronas LIF recurrentes | |
| Acelerar snntorch en ipus | - |
SnnTorch ha sido optimizado para los aceleradores IPU de GraphCore. Para instalar una compilación basada en IPU de SnnTorch:
$ pip install snntorch-ipu
Las operaciones personalizadas de bajo nivel para la compatibilidad de IPU se compilarán automáticamente cuando import snntorch se solicite por primera vez.
Al actualizar el SDK de Poplar, es posible que sea necesario recompilar estas operaciones. Esto se puede hacer reinstalando snntorch-ipu , o eliminando archivos en el directorio base con una extensión .sO.
El módulo snntorch.backprop , y varias funciones de snntorch.functional y snntorch.surrogate , son incompatibles con las ipus, pero pueden recrearse utilizando primitivas de pytorch.
Los requisitos adicionales incluyen:
Consulte la documentación de GraphCore para obtener instrucciones de instalación de PopTorch y el SDK de Poplar.
La página de inicio del proyecto SnnTorch IPU se puede encontrar aquí. Aquí se proporciona un tutorial para la capacitación de SNN.
Si está listo para contribuir a SnnTorch, se pueden encontrar instrucciones para hacerlo aquí.
SnnTorch es actualmente mantenido por el grupo de computación neuromórfica UCSC. Inicialmente fue desarrollado por Jason K. Eshraghian en el Grupo Lu (Universidad de Michigan).
Vincent Sun, Peng Zhou, Ridger Zhu, Alexander Henkes, Steven Abreu, Xinxin Wang, Sreyes Venkatesh, Gekkom y Emre Neftci.
El código fuente de SnnTorch se publica bajo los términos de la licencia MIT. La documentación de Snntorch tiene licencia bajo una licencia de atribución de atribución de los Comunes Creative por igual 3.0 Licencia no portada (CC BY-SA 3.0).