首页
企业/组织
新建镜像项目
新建托管项目
登录
注册
陈靖宇
/
pySNNGo
分享
Activities
3
任务
Resources
Repositories
8
Pull Requests
Roadmap
Calendar
Gantt
版本库
查看Git使用指南
如操作版本库需要认证,请使用您的邮箱
8 提交
贡献统计
启智开源许可证
分支
1
master
ZIP下载
克隆网址
复制
GDUT-ly
提交于
about 1 month
前 :fix bug
.idea
PySNNGo
dist
docImage
pySNNGo.egg-info
.gitignore
LICENSE
README.md
izkexample.py
setup.py
导出统计结果:
各用户提交统计信息
[TOC] # PySNNGo ## 1、介绍 PySNNGo基于python,是可根据用户构建的脉冲神经元网络进行模拟的前端程序。 该脉冲神经网络模拟器分为两个部分前端和后端,前后端的交互采用了网络连接的形式。这部分为独立于后端模拟器的前端语言,语言流程与PyNN类似,可以定义连接类型(如AllToAllConnector,RandomConnector等),该部分用户可以利用不同的参数定义不同类型的神经元组成神经簇,从而构建出想要的脉冲神经网络模型,然后把模型所需数据封装成Json文件以tcp传输通过网络socket传送给后台程序。 <img src="https://code.ihub.org.cn/projects/4408/repository/revisions/master/entry/./docImage/diagram.jpg?raw=true" alt="diagram" style="zoom:90%;" /> ## 2、环境 python 3.7 最佳 Go 1.15.1 最佳 ## 3、环境配置 ### 3.1 Window系统 #### 3.1.1 Go语言 该项目所使用的Go语言版本是1.15.1 **(1)Go语言官网** > https://golang.org/ **(2)谷歌中国官网**(访问速度快) > https://golang.google.cn/ **(3)安装** 选择其中一个版本go进行下载安装,项目所使用的Go语言版本是windows64位的1.15.1版本,所以安装包名如下: > go1.15.1.windows-amd64.msi **(4)环境变量** 安装完毕后,进行环境变量的配置。 GOROOT:在系统环境变量PATH中添加GOROOT系统变量 > 变量名:GOROOT > > 变量值:Go语言安装目录,例如 D:\Go\ GOPATH:自创建一个Go工作目录,在系统环境变量PATH中添加GOPATH系统变量 > 变量名:GOPATH > > 变量值:Go语言工作目录,例如 D:\Go\GoWorkSpace 当在终端输入go命令时,进入到go终端则安装成功。 **(5) 第三方依赖包安装** 项目中Go的第三方依赖包只有一个:gojsonq,可以用以下命令下载得: > go get github.com/thedevsaddam/gojsonq #### 3.1.2 python语言 该项目所使用的python语言版本是3.7.1 **(1)python官网** > [https://golang.google.cn/](https://golang.google.cn/) **(2)安装** 选择python 3.7.1 windows64版本,所以可以选择以下安装选项 > python 3.7.1 Windows x86-64 executable installer **(3)环境变量** 安装过程中勾选 - 添加python到环境变量/add Python 3.7 to PATH,如果没有选择,可以在电脑系统环境变量中将python安装路径添加到PATH。 当在终端输入 `python `命令时,进入到pyhon终端则安装成功。 **(4)第三方依赖包安装** 项目中python的依赖包只有第三方库numpy和matplotlib,可以在终端用以下命令安装下载: > pip install numpy > > pip install matplotlib #### 3.1.3 PySNNGo环境 (1)进入[PySNNGo](https://code.ihub.org.cn/projects/4408/repository/pySNNGo)项目目录当中的dist目录下载PySNNGo安装文件: > pySNNGO-1.0.tar.gz (2)在`pySNNGO-1.0.tar.gz`所在目录下,打开终端输入pip安装命令: > pip install pySNNGO-1.0.tar.gz (3)在python环境下,运行语句 `import PySNNGo` ,若无报错,则安装成功。 #### 3.1.4 SNNGo环境 (1)进入[SNNGo](https://code.ihub.org.cn/projects/4407/repository/SNNGo)项目目录当中,下载整个项目文件。 (2)将SNNGo项目文件解压至任意目录当中,推荐放置在GOPATH(也就是Go语言工作目录)中。 (3)测试运行在项目目录中打开终端,运行命令:`go run SimulatorRun.go`。若显示`模拟服务器已开启`,则说明配置成功。 ### 3.2 Linux系统 #### 3.2.1 Go语言 该项目所使用的Go语言版本是1.15.1,向上的版本也是可以兼容的。 **(1)安装** 在终端中输入下载go命令,默认下载的是上次apt更新后最新版:· > sudo apt-get install golang-go 如果无法在终端下载,可以到官网 https://golang.google.cn/ 下载压缩安装包 > go1.15.1.linux.amd64.tar.gz **(2)环境变量** 安装完毕后,进行环境变量的配置,才可以在全局使用go命令。 在系统环境变量配置文件中添加GO环境变量:在配置文件**`~/.bashrc`** 或者 **`/etc/profile`**末尾加入以下语句: > export GOROOT=/usr/local/go #GOROOT是系统上安装Go软件包的位置。 > > export GOPATH=/home/hadoop/GOPATH #GOPATH是工作目录的位置。 > > export PATH=$GOPATH/bin:$GOROOT/bin:$PATH 添加后重启配置文件**`source ~/.bashrc`**或**`source /etc/profile`** 当在任意位置打开终端输入go version命令时,显示go语言的版本信息则安装且配置成功。 **(3) 第三方依赖包安装** 项目中Go的第三方依赖包只有一个:gojsonq,可以在终端使用命令下载得: > go get github.com/thedevsaddam/gojsonq #### 3.2.2 python语言 在linux系统下会自带python,但版本可能不太兼容,最好是选择3.7或以上的版本,再低最好别不超低于3.5。 **(1)安装** **apt工具包安装:** 在终端中输入更新软件包以及安装python命令: > $sudo apt-get update > $sudo apt-get install python3.7 但以上安装方式,不一定能安装到最新版,而且是基于原系统自带了python语言。 **源码编译安装python**: > wget -c https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz # 源码下载 > > tar -xzvf Python-3.7.1tgz # 解压源码 > > cd Python-3.7.1/ # 切换源码目录 > > ./configure --prefix=/usr/local/python3.7.1 # 配置安装目录 > > make # 编译 > > sudo make install # 安装 **(2)环境变量** 安装完毕后,进行环境变量的配置,才可以在全局使用python命令。 在系统环境变量配置文件中添加GO环境变量:在配置文件**`~/.bashrc`** 或者 **`/etc/profile`**末尾加入以下语句: > export PATH=/usr/local/python3.7.1/bin:$PATH 添加后重启配置文件**`source ~/.bashrc`**或**`source /etc/profile`** 当在任意位置打开终端输入python命令时,进入到python交互式终端则安装且配置成功。 **(3)第三方依赖包** 项目中python的依赖包只有第三方库numpy和matplotlib,可以在终端用以下命令安装下载: > pip install numpy > > pip install matplotlib #### 3.2.3 PySNNGo环境 (1)进入[PySNNGo](https://code.ihub.org.cn/projects/4408/repository/pySNNGo)项目目录当中的dist目录下载PySNNGo安装文件: > pySNNGO-1.0.tar.gz (2)在`pySNNGO-1.0.tar.gz`所在目录下,打开终端输入pip安装命令: > pip install pySNNGO-1.0.tar.gz (3)在python交互环境下,运行语句 `import PySNNGo` ,若无报错,则安装成功。 #### 3.2.4 SNNGo环境 (1)进入[SNNGo](https://code.ihub.org.cn/projects/4407/repository/SNNGo)项目目录当中,下载整个项目文件。 (2)将SNNGo项目文件解压至任意目录当中,推荐放置在GOPATH(也就是Go语言工作目录)中。 (3)测试运行在项目目录中打开终端,运行命令:`go run SimulatorRun.go`。若显示`模拟服务器已开启`,则说明配置成功。 ## 4、目录结构 PySNNGo. │ control.py │ globalvar.py ├─**Connectors** │ └─Connector.py ├─**DataControl** │ └─BuildData.py ├─**NeuronModels** │ └─Izhikevich.py ├─**Populations** │ └─Population.py ├─**Projections** └─ Projection.py ## 5、项目说明 该项目需要搭配用Go语言编程的后台项目SNNGo才可以正确运行。 该项目由几个主要模块组成,**构建模块**:构建脉冲神经网络的各个组成部件(如Population、Projection、NeuronModel、Connector等)。**数据控制模块**(DataControll):控制脉冲神经网络真实数据的部件。 **模拟器状态控制模块**(control):控制模拟器的创建和运行。 **构建模块** 主要用于根据用户所给参数定义神经网络的各个部分,如Population用于构建具有相同类型神经元的神经簇,Projection用具构建神经簇与神经簇之间的连接权重,Connector用于构建神经元之间的连接类型,NeuronModel模块可以构建有不同的神经元模型。 **数据控制模块** 主要用于在用户定义了神经网络以后,生成实际的数据,用于传输到SNNGo模拟器当中运行,如定义完一个特定参数的izk神经元的Population以后,DataControl模块会生成该参数的izk数组;定义完两个神经簇的连接以后会生成二维的权重数组。 **模拟器状态控制模块** 主要用于创建模拟器的创建和运行,例如control模块中的setup函数是为模拟器创建各种全局变量等同于模拟器的创建,所以该函数一定要在定义网络之前;还有其模块中的run函数,负责运行模拟器,实际工作为发送数据模块生成的所有数据到后台SNNGo模拟器当中运行。 ## 6、模拟示例 ### 6.1 加载SNNGo模拟器 在使用PySNNGo之前,需要先运行后台项目SNNGo才可以进行模拟,在SNNGo项目的目录下执行控制台命令: `go run SimulatorRun.go` 当显示`模拟服务器已开启`时,说明开启成功,监听等待前端数据发送。 ### 6.2 编写脉冲神经网络模拟程序 在PySNNGo的主目录下有一个测试示例,`izkexample.py`,文件结构如下。 可以在终端运行命令,`python izkexample.py`进行案例测试。 **1、导入工具包** ```python from PySNNGo.NeuronModels import Izhikevich from PySNNGo.Populations import Population from PySNNGo.Projections import Projection from PySNNGo.Connectors import Connector from PySNNGo import control from matplotlib import pyplot as plt ``` **2、设定所需参数** ```python # 兴奋神经元和抑制神经元参数 ExciCellParameters = {"label": "Excitatory", "a": 0.02, "b": 0.2, "c": -65, "d": 8, "thresh": 30, "v": -65, "in_curr": 0} InhiCellParameters = {"label": "Inhibitory", "a": 0.02, "b": 0.25, "c": -65, "d": 2, "thresh": 30, "v": -65, "in_curr": 0} # 神经网络参数 runtime = 1000 nNeurons1 = 800 nNeurons2 = 200 ``` **3、构建并运行网络** ```python # 1、创建模拟器,模拟时间步长设置为1 control.setup(1) # 2、定义兴奋型神经元和抑制性神经元 izkExci = Izhikevich.izhikevich(**ExciCellParameters) izkInhi = Izhikevich.izhikevich(**InhiCellParameters) # 3、定义兴奋型神经簇和抑制性神经簇 pE = Population.Population( size=nNeurons1, cellclass=izkExci, cellparameter=ExciCellParameters) pI = Population.Population( size=nNeurons2, cellclass=izkInhi, cellparameter=InhiCellParameters) # 4、两个神经簇完全连接 Pro = Projection.Projection( pE, pI, Connector.AllToAllConnector()) # 5、运行模拟器 control.run(runtime=runtime) ``` 4、**获取模拟数据进行绘图** ```python # 获取模拟数据 ReceiveData = control.getReceiveData() # 对模拟数据进行绘图 plt.scatter(ReceiveData["SpikeTime"], ReceiveData["Spike"], s=5, alpha=0.1) plt.xlabel('SpikeTime') plt.ylabel('SpikeID') plt.show() ``` > **画图运行结果** <img src="https://code.ihub.org.cn/projects/4408/repository/revisions/master/entry/./docImage/SpikeImage.png?raw=true" alt="SpikeImage" style="zoom: 90%;" />
Loading...