
用于使用Pytorch Tensor功能在CPU或GPU上模拟尖峰神经网络(SNN)的Python软件包。
bindsnet是一个尖峰神经网络模拟库,旨在开发以生物学启发的机器学习算法。
该软件包被用作正在进行的有关应用于生物学启发的神经和动力系统(BINDS)实验室和塔夫茨大学的艾伦发现中心的有关应用SNN,机器学习(ML)和增强学习(RL)问题的研究的一部分。
查看bindsnet示例,以获取实验的集合,用于分析结果的函数,实验结果图等。包装的文档可以在此处找到。

要从GitHub存储库中安装最新的稳定版本
pip install git+https://github.com/BindsNET/bindsnet.git
或者,要从源构建bindsnet软件包,请克隆github存储库,将目录更改为该项目的最高级别,然后发出
pip install .
或者,以可编辑模式安装(允许在不重新安装的情况下修改包装):
pip install -e .
要安装与OpenAI Gym 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/
如果您的机器上未安装打开的AI gym则某些测试将失败。
生物学上合理的尖峰神经元动力学的模拟可能具有挑战性。通常是通过求解描述所述动力学的普通微分方程(OD)来完成的。 Pytorch并未明确支持微分方程的解(例如,与brian2相反),但是我们可以将定义动力学的ODES转换为差异方程式,并以常规的短时间间隔(按1毫秒为1毫秒的dt )求解为近似值。当然,在引擎盖下,像brian2这样的包裹正在做同样的事情。在PyTorch中这样做令人兴奋,原因有几个:
我们可以使用功能强大且灵活的torch.Tensor对象, numpy.ndarray周围的包装器,可以从GPU设备转移。
我们可以通过在我们的SNN体系结构中的torch.nn.functional pytorch子模块中重新利用功能来避免“重新发明车轮”。例如,卷积或合并功能。
神经元尖峰顺序及其相对时机编码信息的概念是神经科学的中心主题。 Markram等。 (1997年)提出,神经元之间的突触应基于这个相对时机加强或降解,在此之前,唐纳德·赫布(Donald Hebb)提出了赫比亚学习理论,通常简单地说为“将神经元一起发射,将其连接在一起”。 Markram等人的Hebbian理论扩展被称为峰值依赖性可塑性(STDP)。
我们有兴趣将SNN应用于ML和RL问题。我们使用STDP修改SNN中连接神经元对的突触的权重。在ML的背景下,我们想学习一个突触权重的设置,该设置将在SNN中产生数据依赖于数据的尖峰活动。这项活动将使我们随后执行一些感兴趣的ML任务;例如,区分或聚类输入数据。在RL的背景下,我们可以将尖峰神经网络视为RL代理,其尖峰活动可以转换为环境动作空间中的动作。
We have provided some simple starter scripts for doing unsupervised learning (learning a fully-connected or convolutional representation via STDP), supervised learning (clamping output neurons to desired spiking behavior depending on data labels), and reinforcement learning (converting observations from the Atari game Space Invaders to input to an SNN, and converting network activity back to actions in the game).
我们模拟了一个Nevent,该网络具有N Poisson输入神经元,其发射速率(In Hertz)随机从U(0,100)绘制,并与同等大小的泄漏的集成和火(LIF)神经元群体连接,并从N(0,1)中采样连接权重。我们以250的步骤从系统地从250到10,000,每个库中的每个库都以1,000ms的速度进行了时间分辨率DT = 1.0。我们测试了BINDSNET(使用CPU和GPU计算),Brian2,Pynest(运行C ++ Nest Core Simulator的Nest SLI接口的Python接口),NAND CORE SIMULATOR),ENNARCHY(带有CPU和GPU计算)和Brian2Genn(Brian2Genn(Brian2 to to Brian2 to to genn nimulator)。
包括Brian和Pynest在内的几个软件包允许设定某些全球偏好;例如,CPU线程的数量,OpenMP进程的数量等。我们为基准研究选择了这些设置,以试图最大化每个库的速度,但请注意,Bindsnet不需要此类选项的设置。我们的方法继承了Pytorch的计算模型,似乎可以充分利用可用的硬件,因此使从业者可以轻松地从系统中获得最佳性能,从而最大程度地利用了他们的最佳性能。

所有模拟在Ubuntu 16.04 LT上运行,带有Intel(R)Xeon(R)CPU E5-2687W v3 @ 3.10GHz,128GB RAM @ 2133MHz和两个Geforce GTX Titan X(GM200)GPU。在所有情况下,使用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},
}
用贡献制成。
GNU AFFERO通用公共许可证v3.0