python中ml的尖峰神经网络

bindsnet的Python项目详细描述


一个python包,用于使用pytorch函数在cpu或gpu上模拟尖峰神经网络(snns)。

bindsnet是一个尖峰神经网络模拟库,旨在开发用于机器学习的生物启发算法。

此软件包是在受生物启发的神经和动力系统(binds)实验室中,将snns应用于机器学习(ml)和强化学习(rl)问题的持续研究的一部分。

查看bindsnet实验存储库以获取一组实验,以及用于分派的随附bash脚本,这些脚本用于cics集群和anal函数。结果分析、实验结果图等。

构建状态documentation statushitcountanalyticsgitter chat

要求

  • python 3.6
  • requirements.txt

设置设置

使用pip

bindsnet可在pypi上使用。发行< /P>

pip install bindsnet

以获得最新的稳定版本。或者,要从源代码构建bindsnet包,请克隆github存储库,将目录更改为此项目的顶层,然后发布

pip install .

或者,以可编辑模式安装(允许在不重新安装的情况下修改包):

pip install -e .

要安装与openai gym rl environments library(openai gym rl environments library)接口所需的软件包,请按照安装运行rl environments simulator(在linux/macos上)所需软件包的说明进行操作。

使用Docker

链接到Docker存储库。

我们还提供了一个dockerfile,其中bindsnet及其所有依赖项都安装在其中。发行< /P>

docker image build .

在项目的顶层目录中创建docker映像。

要更改新建图像的名称,请发出

docker tag <IMAGE_ID> <NEW_IMAGE_ID>

要运行容器并在其中获取bash终端,请发出

docker run -it <NEW_IMAGE_ID> bash

开始

运行sn的近似复制n摘自本文,第

cd examples/mnist
python eth_mnist.py

有许多可选的命令行参数可以传入,包括--plot(显示有用的监视图)、--n_neurons[int](模拟的兴奋性、抑制性神经元的数目)、--mode['train''test'](将网络操作设置为培训或测试阶段),等等。有关详细信息,请使用--help-h标志运行脚本。

examples目录中提供了许多其他示例,这些示例旨在展示bindsnet的功能。看看,让我们知道你的想法!

运行测试

发出以下命令运行测试:

python -m pytest test/

如果您的机器上未安装open aigym,某些测试将失败。

背景

从生物学角度来说,模拟神经元的峰值动力学可能是一个挑战。它通常是通过求解描述所述动力学的常微分方程(odes)来实现的。Pythorch并不明确支持微分方程的求解(例如,与brian2相反),但是我们可以将定义动力学的odes转换为差分方程,并在规则的短时间内求解它们。作为近似值的间隔(adt大约为1毫秒)。当然,在幕后,像brian2这样的包也在做同样的事情。在pytorch中执行此操作令人兴奋,原因如下:

  1. 我们可以使用功能强大且灵活的对象,即可以转换的torch.tensor包装器。往返于GPU设备。

  2. 我们可以通过重新利用snn体系结构中的torch.nn.functionalpytorch子模块的功能来避免"重新发明轮子";例如卷积或池函数。

  3. < > >

    神经元尖峰顺序及其相对时间编码信息的概念是神经科学的一个中心主题。markram等人。(1997年)提出神经元之间的突触应该基于这种相对的时间加强或减弱,在此之前,donald hebb提出了hebbian学习理论,通常简单地说为"激发神经元的能量和能量的神经元"。马克拉姆等人对hebbian理论的扩展称为尖峰计时相关塑性(stdp)。

    我们有兴趣将snns应用于ml和rl问题。我们使用stdp来修改snn中连接成对或大量神经元的突触的权重。在ml的上下文中,我们想学习一个突触权重的设置,它将在snn中生成数据依赖的峰值活动。此活动将允许我们随后执行一些感兴趣的ml任务;例如,识别或聚类输入数据。在rl的背景下,我们可以把尖峰神经网络看作一个rl代理,它的尖峰活动可以在环境的动作空间中转化为动作。

    我们提供了一些简单的启动脚本,用于执行无监督学习(通过stdp学习完全连接或卷积表示)、有监督学习(根据数据标签将输出神经元钳制为所需的尖峰行为)和强化学习(转换观测值)。从Atari游戏空间入侵者输入到SNN,并转换网络活动回到游戏中的动作。

    基准

    我们模拟了一个由n个poisson输入神经元组成的网络,这些神经元的放电频率(赫兹)是随机从u(0,100)中抽取的,所有神经元都与一个同样大小的漏积分和激发(lif)神经元连接,连接权值是从n(0,1)中抽取的。我们系统地将n从250变为10000,每250步一次,并以时间分辨率dt=1.0对每个库运行每个模拟1000毫秒。我们测试了BindsNET(用CPU和GPU计算),BRAN2,PyNEST(Python接口到运行S+I巢核模拟器的SUI接口),ANNarchy(带有CPU和GPU计算),BRAN2GEN(BANAN2前端到GEN模拟器)。

    有几个包,包括brian和pynest,允许设置某些全局首选项;例如,cpu线程数、openmp进程数等。我们为基准测试研究选择了这些设置,试图最大限度地提高每个库的速度,但请注意,bindsnet不需要设置此类选项。我们的方法继承了Pythorch的计算模型,似乎充分利用了可用的硬件,因此使实践者能够以最少的努力从系统中获得最佳性能变得简单。

    bindsnet%20benchmark

    所有的模拟运行在Ubuntu16.04LTS上,英特尔(R)至强(R)CPU E5-2687Wv3@3.10GHz,128GB RAM@2133MHz,以及两个GeForce GTX Titan X(GM200)GPU。所有情况下都使用Python3.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

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java如何向第二个组合框模型项添加数组值从第一个组合框所选项获取数组名称?   使用Java与WebSphere的SSL握手错误   eclipse线程“main”Java中的第一个Java程序异常。lang.NoClassDefFoundError   java将Javafx应用作为Web应用移植的最佳方式   IDE的java右JVM文件夹   java如何在基本适配器中停止文本到语音   java If block使用substring和equals方法以假值执行   在本例中,如何在java中返回多个值?   java第二个主类在maven构建期间覆盖第一个主类   如何在java中设置运行时ArrayList的泛型类型?   java从主机读取文件