
Um pacote Python usado para simular redes neurais de pico (SNNs) em CPUs ou GPUs usando a funcionalidade Tensor pytorch.
O BindsNet é uma biblioteca de simulação de rede neural picante voltada para o desenvolvimento de algoritmos biologicamente inspirados para o aprendizado de máquina.
Este pacote é usado como parte da pesquisa em andamento sobre a aplicação de problemas de SNNs, aprendizado de máquina (ML) e aprendizado de reforço (RL) no laboratório de sistemas neurais e dinâmicos biologicamente inspirados (BINDS) e no Allen Discovery Center da Tufts University.
Confira os exemplos de BindsNet para obter uma coleção de experimentos, funções para a análise de resultados, parcelas de resultados do experimento e muito mais. A documentação do pacote pode ser encontrada aqui.

Para instalar o lançamento estável mais recente do repositório do GitHub
pip install git+https://github.com/BindsNET/bindsnet.git
Ou, para construir o pacote bindsnet a partir da fonte, clonar o repositório do GitHub, alterar o diretório para o nível superior deste projeto e emitir
pip install .
Ou, para instalar no modo editável (permite a modificação do pacote sem reinstalar):
pip install -e .
Para instalar os pacotes necessários para interagir com a biblioteca de ambientes do OpenAI Gym RL, siga suas instruções para instalar os pacotes necessários para executar o simulador de ambientes RL (no Linux / MacOS).
Link para o repositório do Docker.
Também fornecemos um Dockerfile no qual o BindSNet e todas as suas dependências são instaladas. Edição
docker build .
No diretório de nível superior deste projeto, para criar uma imagem do Docker.
Para alterar o nome da imagem recém -construída, emissão
docker tag <IMAGE_ID> <NEW_IMAGE_ID>
Para executar um contêiner e obter um terminal Bash dentro dele, emitir
docker run -it <NEW_IMAGE_ID> bash
Para executar uma quase replicação do SNN deste artigo, emitir
cd examples/mnist
python eth_mnist.py
Existem vários argumentos opcionais da linha de comando que podem ser transmitidos, incluindo --plot (exibe figuras úteis de monitoramento), --n_neurons [int] (número de neurônios excitatórios e inibitórios simulados), --mode ['train' | 'test'] (define a operação de rede para a fase de treinamento ou teste) e muito mais. Execute o script com o sinalizador --help ou -h para obter mais informações.
Vários outros exemplos estão disponíveis no diretório examples que devem mostrar a funcionalidade da BindsNet. Dê uma olhada e deixe -nos saber o que você pensa!
Emita o seguinte para executar os testes:
python -m pytest test/
Alguns testes falharão se o Open AI gym não estiver instalado em sua máquina.
A simulação da dinâmica de neurônios de pico biologicamente plausível pode ser um desafio. Normalmente, é feito resolvendo equações diferenciais comuns (ODEs) que descrevem a dinâmica. O Pytorch não suporta explicitamente a solução de equações diferenciais (em oposição a brian2 , por exemplo), mas podemos converter os odes que definem a dinâmica em equações de diferença e resolvê -las em intervalos regulares e curtos (um dt na ordem de 1 milissegundo) como uma aproximação. Obviamente, sob o capô, pacotes como brian2 estão fazendo a mesma coisa. Fazer isso em PyTorch é emocionante por alguns motivos:
Podemos usar numpy.ndarray torch.Tensor poderosa e flexível.
Podemos evitar "reinventar a roda", reaproveitando as funções do submódulo torch.nn.functional Pytorch em nossas arquiteturas SNN; Por exemplo, funções de convolução ou agrupamento.
O conceito de que a ordem do pico de neurônio e suas informações relativas ao codificar é um tema central na neurociência. Markram et al. (1997) propuseram que as sinapses entre os neurônios se fortalecem ou se degradassem com base nesse momento relativo e, antes disso, Donald Hebb propôs a teoria da aprendizagem hebbiana, muitas vezes simplesmente afirmava como "neurônios que disparam juntos, ligam juntos". Markram et al. A extensão da teoria hebbiana é conhecida como plasticidade dependente de ponta de ponta (STDP).
Estamos interessados em aplicar SNNs aos problemas de ML e RL. Utilizamos STDP para modificar pesos de sinapses que conectam pares ou populações de neurônios em SNNs. No contexto do ML, queremos aprender uma configuração de pesos de sinapse que gerarão atividade de pico dependente de dados nos SNNs. Esta atividade nos permitirá realizar posteriormente alguma tarefa de interesse do ML; por exemplo, dados de entrada discriminadores ou agrupados. No contexto da RL, podemos pensar na rede neural spiking como um agente de RL, cuja atividade de pico pode ser convertida em ações no espaço de ação de um ambiente.
Fornecemos alguns scripts iniciais simples para o aprendizado não supervisionado (aprendendo uma representação totalmente conectada ou convolucional via STDP), aprendizado supervisionado (preenchendo os neurônios de saída para o comportamento de pico desejado, dependendo dos rótulos de dados) e do aprendizado de reforço (conversando observações do ATARI Space Invaders to Games para um SNN e conversando atividades de redes e conversões.
Simulamos uma rede com uma população de n neurônios de entrada de Poisson com taxas de disparo (em Hertz) extraídas aleatoriamente de U (0, 100), conectadas a todos com uma população igualmente de tamanho de neurônios de integração e incêndio com vazamento (LIF), com pesos de conexão amostrados de n (0,1). Variavamos n sistematicamente de 250 a 10.000 em etapas de 250 e executamos cada simulação com cada biblioteca por 1.000 mm com uma resolução de tempo dt = 1,0. Testamos o BindsNet (com computação de CPU e GPU), Brian2, Pynest (a interface Python para a interface Nest SLI que executa o simulador de núcleo de ninho C ++), a anochy (com CPU e GPU Computation) e Brian2genn (o Brian2 Front-End para o simulador genn).
Vários pacotes, incluindo Brian e Pynest, permitem o cenário de certas preferências globais; Por exemplo, o número de threads da CPU, o número de processos OpenMP, etc. Escolhemos essas configurações para o nosso estudo de referência na tentativa de maximizar a velocidade de cada biblioteca, mas observe que o BindSNet não requer uma configuração dessas opções. Nossa abordagem, herdando o modelo computacional de Pytorch, parece fazer o melhor uso do hardware disponível e, portanto, simplifica para os profissionais obter o melhor desempenho de seu sistema com o menor esforço.

Todas as simulações são executadas no Ubuntu 16.04 LTS com Intel (R) Xeon (R) CPU E5-2687W V3 @ 3,10GHz, 128GB RAM @ 2133MHz e dois GPUs GeForce GTX Titan X (GM200). O Python 3.6 é usado em todos os casos. A hora do relógio foi registrada para cada simulação executada.
Se você usa o BindsNet em sua pesquisa, cite o seguinte artigo:
@ARTICLE{10.3389/fninf.2018.00089,
AUTHOR={Hazan, Hananel and Saunders, Daniel J. and Khan, Hassaan and Patel, Devdhar and Sanghavi, Darpan T. and Siegelmann, Hava T. and Kozma, Robert},
TITLE={BindsNET: A Machine Learning-Oriented Spiking Neural Networks Library in Python},
JOURNAL={Frontiers in Neuroinformatics},
VOLUME={12},
PAGES={89},
YEAR={2018},
URL={https://www.frontiersin.org/article/10.3389/fninf.2018.00089},
DOI={10.3389/fninf.2018.00089},
ISSN={1662-5196},
}
Feito com contrib.rocks.
GNU Affero Licença pública geral v3.0