
Пакет Python, используемый для моделирования всплесков нейронных сетей (SNN) на процессорах или графических процессорах с использованием функциональности Tensor Pytorch.
Bindsnet - это библиотека моделирования нейронной сети, направленная на разработку биологически вдохновленных алгоритмов для машинного обучения.
Этот пакет используется в рамках продолжающихся исследований по применению проблем SNN, машинного обучения (ML) и обучения подкреплению (RL) в лаборатории биологически вдохновленных нейронными и динамическими системами (BINDS) и Центр Discovery Allen в Университете Тафтса.
Ознакомьтесь с примерами BindSnet для сбора экспериментов, функций для анализа результатов, графиков результатов эксперимента и многого другого. Документация для пакета можно найти здесь.

Чтобы установить самый последний стабильный выпуск из репозитория GitHub
pip install git+https://github.com/BindsNET/bindsnet.git
Или, чтобы построить пакет bindsnet из источника, клонировать репозиторий GitHub, изменить каталог на верхний уровень этого проекта и выпуск
pip install .
Или, чтобы установить в редактируемом режиме (позволяет изменить пакет без переустановки):
pip install -e .
Чтобы установить пакеты, необходимые для взаимодействия с библиотекой средах RL OpenAI RL, следуйте их инструкциям по установке пакетов, необходимых для запуска симулятора среды RL (на Linux / MacOS).
Ссылка на репозиторий Docker.
Мы также предоставляем Dockerfile, в котором установлены BindSnet и все его зависимости.
docker build .
В каталоге верхнего уровня этого проекта для создания изображения Docker.
Чтобы изменить название недавно построенного изображения, выпуск
docker tag <IMAGE_ID> <NEW_IMAGE_ID>
Чтобы запустить контейнер и получить терминал Bash в нем, выпуск
docker run -it <NEW_IMAGE_ID> bash
Чтобы запустить почти репликацию SNN из этой статьи, выпуск
cd examples/mnist
python eth_mnist.py
Существует ряд дополнительных аргументов командной строки, которые могут быть переданы, в том числе --plot (отображает полезные рисунки мониторинга), --n_neurons [int] (количество возбуждающих, моделируемых ингибирующих нейронов), --mode ['train' | 'test'] (устанавливает сетевую работу на фазу обучения или тестирования) и многое другое. Запустите сценарий с помощью флага --help или -h для получения дополнительной информации.
В каталоге examples доступны ряд других примеров, которые предназначены для демонстрации функциональности Bindsnet. Посмотрите, и дайте нам знать, что вы думаете!
Выпустите следующее, чтобы запустить тесты:
python -m pytest test/
Некоторые тесты пройдут сбой, если открытый gym AI не будет установлен на вашей машине.
Моделирование биологически правдоподобной динамики нейронов может быть сложной задачей. Обычно это делается путем решения обычных дифференциальных уравнений (ODE), которые описывают указанную динамику. Pytorch явно не поддерживает решение дифференциальных уравнений (например, в отличие от brian2 ), но мы можем преобразовать ОД, определяющие динамику в различие уравнения и решать их с регулярными короткими интервалами ( dt на порядке 1 миллисекунды) в качестве приближения. Конечно, под капотом, такие пакеты, как brian2 делают то же самое. Делать это в PyTorch - это захватывающее по нескольким причинам:
Мы можем использовать мощный и гибкий объект torch.Tensor , обертку вокруг numpy.ndarray , которая может быть передана на устройства GPU и обратно.
Мы можем избежать «переосмысления колеса» путем перепрофилирования функций из torch.nn.functional Pytorch Sumdule в наших архитектурах SNN; например, свертка или функции объединения.
Концепция того, что упорядочение скачка нейронов и их относительное время кодируют информацию, является центральной темой нейробиологии. Markram et al. (1997) предположили, что синапсы между нейронами должны укреплять или разлагаться на основе этого относительного времени, и до этого Дональд Хебб предложил теорию обучения и еббиянки, часто просто заявляемые как «нейроны, которые стреляют вместе, вместе проворуются». Расширение Markram и др. Теории Хеббиян известно как зависимая от Spike-timing пластичность (STDP).
Мы заинтересованы в применении SNN для проблем ML и RL. Мы используем STDP для изменения веса синапсов, соединяющих пары или популяции нейронов в SNN. В контексте ML мы хотим изучить настройку весов синапса, которые будут генерировать зависимую от данных активность ощущения в SNN. Это действие позволит нам впоследствии выполнить некоторую задачу ML -интереса; например, различение или кластеризационные входные данные. В контексте RL мы можем думать о нейронной сети, которая является агентом RL, чья деятельность по вспышке может быть преобразована в действия в пространстве действий окружающей среды.
Мы предоставили несколько простых стартовых сценариев для выполнения неконтролируемого обучения (изучение полностью связанного или сверточного представления с помощью STDP), контролируемого обучения (зажимать выходные нейроны с желаемым поведением в зависимости от того, что в зависимости от меток данных) и усиление обучения (преобразование наблюдений от игрового пространства Atari в вводные вклад в SNN и конвертацию сетевой деятельности в игру в игру).
Мы смоделировали сеть с популяцией N-Poasson Inpult Neurons с скоростью стрельбы (в Герце), случайным образом взятым из U (0, 100), соединенных все-за все с широким размером популяции протекающих интегральных и огня (LIF), с весами соединения, выбранными из N (0,1). Мы систематически различались от 250 до 10 000 шагов 250 и запускали каждую моделирование с каждой библиотекой в течение 1000 мс с временным разрешением DT = 1,0. Мы протестировали BindSnet (с помощью CPU и GPU, Brian2, Pynest (интерфейс интерфейса Python к границе раздела Nest SLI, который запускает симулятор C ++ Nest Core), аннархию (с вычислением процессора и графического процессора) и Brian2Genn (фронт Brian2 для симулятора Genn).
Несколько пакетов, включая Брайана и Пинеста, позволяют настройку определенных глобальных предпочтений; Например, количество потоков ЦП, количество процессов OpenMP и т. Д. Мы выбрали эти настройки для нашего эталонного исследования, пытаясь максимизировать скорость каждой библиотеки, но примечание, которое BindSnet не требует настройки таких параметров. Наш подход, унаследовавший вычислительную модель Pytorch, по -видимому, наилучшим образом использует доступное оборудование и, следовательно, позволяет практикующим, чтобы практикующие могли получить наилучшие результаты из своей системы с наименьшими усилиями.

Все симуляции проходят на Ubuntu 16.04 LTS с Intel (R) Xeon (R) CPU E5-2687W V3 @ 3,10 ГГц, 128 ГБ ОЗУ @ 2133 МГц и два GEFORCE GTX Titan X (GM200). Python 3.6 используется во всех случаях. Время часов было записано для каждого прогона симуляции.
Если вы используете BindSnet в своем исследовании, указать следующую статью:
@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},
}
Сделано из ouctrib.rocks.
GNU Affero Общая публичная лицензия v3.0