
O cérebro é o lugar perfeito para procurar inspiração para desenvolver redes neurais mais eficientes. Uma das principais diferenças com o aprendizado profundo moderno é que o cérebro codifica informações em picos, em vez de ativações contínuas. O Snntorch é um pacote Python para executar o aprendizado baseado em gradiente com redes neurais Spiking. Ele estende as capacidades da Pytorch, aproveitando sua GPU acelerou a computação do tensor e aplicando -a a redes de neurônios de spiking. Os modelos de neurônios de pico pré-projetados são perfeitamente integrados na estrutura de Pytorch e podem ser tratados como unidades de ativação recorrente.

Se você gosta deste projeto, considere estrelar este repositório, pois é a maneira mais fácil e melhor de apoiá -lo.
Se você tiver problemas, comentários ou está procurando conselhos sobre o treinamento de redes neurais, você pode abrir um problema, uma discussão ou conversar em nosso canal Discord.
Snnttorch contém os seguintes componentes:
| Componente | Descrição |
|---|---|
| snnttorch | uma biblioteca de neurônios picantes como a Torch.nn, profundamente integrada ao AutoGRAD |
| snntorch.export | Ativa a compatibilidade cruzada com outras bibliotecas SNN via NIR |
| snnttorch.functional | Operações aritméticas comuns em picos, por exemplo, perda, regularização etc. |
| snntorch.spikegen | uma biblioteca para geração de pico e conversão de dados |
| snntorch.spikePlot | Ferramentas de visualização para dados baseados em pico usando matplotlib e celulóide |
| snntorch.surrogate | Funções de gradiente substituto opcionais |
| snnttorch.utils | Funções do utilitário de dados |
O SNNTORCH foi projetado para ser usado intuitivamente com Pytorch, como se cada neurônio spiking fosse simplesmente outra ativação em uma sequência de camadas. Portanto, é agnóstico a camadas totalmente conectadas, camadas convolucionais, conexões residuais etc.
Atualmente, os modelos de neurônios são representados por funções recursivas que remove a necessidade de armazenar traços potenciais de membrana para todos os neurônios em um sistema para calcular o gradiente. Os requisitos enxutos do SNNtorch permitem que pequenas e grandes redes sejam treinadas viajando na CPU, quando necessário. Desde que os modelos de rede e os tensores sejam carregados no CUDA, o SNNtorch aproveita a aceleração da GPU da mesma maneira que o Pytorch.
Se você achar snnttorch útil em seu trabalho, cite a seguinte fonte:
Jason K. Eshraghian, Max Ward, Emre Neftci, Xinxin Wang, Gregor Lenz, Girish Dwivedi, Mohammed Bennamoun, Doo Seok Jeong e Wei D. Lu “treinando redes neurais que usam lições de aprendizado profundo”. Anais do IEEE, 111 (9) de setembro 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}
}Informe -nos se você estiver usando o Snntorch em qualquer trabalho, pesquisa ou blogs interessantes, pois gostaríamos de ouvir mais sobre isso! Entre em contato com [email protected].
Os pacotes a seguir precisam ser instalados para usar o SNNTORCH:
Eles são instalados automaticamente se o snntorch estiver instalado usando o comando pip. Verifique se a versão correta da tocha está instalada para o seu sistema para ativar a compatibilidade do CUDA.
Execute o seguinte para instalar:
$ python
$ pip install snntorchPara instalar o snnttorch da fonte:
$ git clone https://github.com/jeshraghian/snntorch $ CD Snntorch $ python setup.py install
Para instalar Snnttorch com conda:
$ CONDA Instalação -C Conde -Forge Snntorch
Para instalar uma compilação baseada em unidades de processamento inteligente (IPU) usando os aceleradores do GraphCore:
$ pip install snnttorch-ipu
Uma API completa está disponível aqui. Exemplos, tutoriais e notebooks colab são fornecidos.
Aqui estão algumas maneiras pelas quais você pode começar com Snntorch:
Para um exemplo rápido para executar o SNNTORCH, consulte o snippet seguinte ou teste o Notebook 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 Se você deseja aprender todos os fundamentos da treinamento de redes neurais, desde modelos de neurônios até o código neural, até a retropropagação, a série de tutoriais do Snntorch é um ótimo lugar para começar. Consiste em notebooks interativos com explicações completas que podem fazer você atualizar.
| Tutorial | Título | Link colab |
|---|---|---|
| Tutorial 1 | Codificação de pico com snntorch | |
| Tutorial 2 | O neurônio integrado e incêndio com vazamento | |
| Tutorial 3 | Uma rede neural de pico de feedforward | |
| Tutorial 4 | 2ª ordem Modelos de neurônios de pico (opcional) | |
| Tutorial 5 | Treinamento de redes neurais com snntorch | |
| Tutorial 6 | Descendência de gradiente substituto em um SNN convolucional | |
| Tutorial 7 | Conjuntos de dados neuromórficos com tônico + snntorch |
| Tutoriais avançados | Link colab |
|---|---|
| Codificação populacional | |
| Regressão: Parte I - Aprendizado potencial da membrana com neurônios de vida | |
| Regressão: Parte II - Classificação baseada em regressão com neurônios de vida recorrentes | |
| Acelerando Snnttorch no IPUs | - |
O SNNtorch foi otimizado para os aceleradores da IPU do GraphCore. Para instalar uma construção baseada na IPU de Snnttorch:
$ pip install snnttorch-ipu
As operações personalizadas de baixo nível para compatibilidade da IPU serão compiladas automaticamente quando import snntorch for chamada pela primeira vez.
Ao atualizar o Poplar SDK, essas operações podem precisar ser recompiladas. Isso pode ser feito reinstalando snntorch-ipu ou excluindo arquivos no diretório base com uma extensão .SO.
O módulo snntorch.backprop e várias funções de snntorch.functional e snntorch.surrogate são incompatíveis com o IPUs, mas podem ser recriados usando primitivas Pytorch.
Os requisitos adicionais incluem:
Consulte a documentação do GraphCore para obter instruções de instalação do PoPtorch e do Poplar SDK.
A página inicial do projeto Snntorch IPU pode ser encontrada aqui. Um tutorial para o treinamento de SNNs é fornecido aqui.
Se você estiver pronto para contribuir com o Snntorch, as instruções para isso podem ser encontradas aqui.
Atualmente, o SNNTORCH é mantido pelo grupo de computação neuromórfico UCSC. Foi inicialmente desenvolvido por Jason K. Eshraghian no grupo LU (Universidade de Michigan).
Contribuições adicionais foram feitas por Vincent Sun, Peng Zhou, Ridger Zhu, Alexander Henkes, Steven Abreu, Xinxin Wang, Sreyes Venkatesh, Gekkom e Emftci.
O código -fonte do SNNtorch é publicado nos termos da licença do MIT. A documentação da Snnttorch é licenciada sob uma licença Creative Commons Attribution-Share 3.0 não portada (CC BY-SA 3.0).