网络结构描述文件(IR)#
网络结构描述文件(IR)文件中包含了模型的神经元簇、突触、仿真控制参数等信息,可以直接用于 Lynxi
神经形态芯片的部署。
IR文件使用 JSON 文件格式,该文件包括以下部分:
population
这是一个包含所有定义神经元簇的列表 ([ ]), 支持多个神经元簇的定义。 每个单独的神经元簇都以字典格式({ })存在。 有关详细内容,请参阅 population 。
projection
这是一个包含所有定义的突触连接的列表([ ]),其中每个突触连接都以字典格式({ })存在。 有关详细内容,请参阅 projection 。
simulation
这是一个仿真控制参数的字典({ }),其中每个元素为键值对的方式存在。有关详细内容,请参阅 simulation 。
其它字段
这是一个包含网络统计信息的字典({ }),有关详细内容,请参阅 其它字段 。
population#
这是一个单一神经元簇的字典,其中包括参数字典,神经元的数量,神经元簇的名称,神经元簇的类名,神经元的索引等信息。JSON示例如下:
{
"params": {
"I_e": 500.0,
"V_reset": -70.0,
"V_th": -55.0,
"tau_syn_ex": 2.0,
"E_L": -70.0,
"C_m": 250.0,
"tau_m": 10.0,
"V_m": -70.0,
"tau_syn_in": 2.0
},
"name": "ExpLIF_0",
"label": "ExpLIF_0",
"neuron_number": 1,
"pop_id": 0,
"neuron_index": [
1,
1
],
"pop_E/I_rate": 4,
"E/I_type": "E",
"neuron_type": "iaf_psc_exp",
"rank_id": 0
}
下面的表格中解释了这些参数:
参数名 |
参数类型 |
描述 |
---|---|---|
params |
Dictionary,可选 |
默认为空字典。 |
name |
string,必须 |
神经元簇类型, 默认值是类型值与下划线后跟一个数字的连接,例如 ExpLIF_0。 |
label |
string,可选 |
神经元簇的显示名称。 |
neuron_number |
int,必须 |
神经元数量, neuron_number = endNeuronID - startNeuronID + 1。 |
pop_id |
int,必须 |
神经元簇的索引, >=0。 |
neuron_index |
[startNeuronID, endNeuronID] |
神经元在簇中的索引, startNeuronID >= 1, endNeuronID >= startNeuronID。 |
rank_id |
int,必须 |
进程 id, >=0, 默认值是 0。 |
pop_E/I_rate |
可选 |
未使用。 |
E/I_type |
可选 |
未使用。 |
常用的随机分布包括正态分布、均匀分布和修剪正态分布。
正态分布:
{
"distribution": "normal",
"mean": 0.0,
"std": 1.0
}
均匀分布:
{
"distribution": "uniform",
"min": 0.0,
"max": 1.0
}
修剪正态分布:
{
"distribution": "normal_clipped",
"mean": 0.0,
"std": 1.0,
"max": 2.0,
"min": 0.1
}
记录神经元簇#
支持 spike_recorder
、 multimeter
和 weight_recorder
, 具有与神经元 JSON 结构相同的结构,但具有不同的 params
和 neuron_type
。
脉冲记录器:
{
"neuron_index": [
800001,
800001
],
"params": {
"label": "my_spike",
"record_to": "ascii",
"origin": 0.0,
"start": 0.0,
"stop": 3.40282e+38
},
"neuron_number": 1,
"neuron_type": "spike_recorder",
"pop_id": 3,
"rank_id": 0
}
膜电位记录器:
{
"neuron_index": [
800001,
800001
],
"params": {
"label": "my_multi",
"record_to": "ascii",
"record_from": ["V_m"],
"interval": 1.0,
"origin": 0.0,
"start": 0.0,
"stop": 3.40282e+38
},
"neuron_number": 1,
"neuron_type": "multimeter",
"pop_id": 3,
"rank_id": 0
}
权重记录器:
{
"neuron_index": [
30003,
30003
],
"params": {
"label": "weight_recorder",
"record_to": "ascii",
"start": 0.0,
"stop": 10000.0
},
"neuron_number": 1,
"neuron_type": "weight_recorder",
"pop_id": 12,
"rank_id": 0
}
生成器神经元簇#
支持 poisson_generator
、 dc_generator
和 spike_generator
, 具有与神经元 JSON 结构相同的结构,但具有不同的 params
和 neuron_type
。
泊松生成器:
{
"neuron_index": [
800001,
800001
],
"params": {
"rate":1000.0,
"origin": 0.0,
"start": 0.0,
"stop": 3.40282e+38
},
"neuron_number": 1,
"neuron_type": "poisson_generator",
"pop_id": 5,
"rank_id": 0
}
poisson_generator
的参数如下表所示:
参数 |
类型 |
描述 |
---|---|---|
rate |
float,必须 |
泊松源发射率(脉冲/秒),rate >= 0 |
origin |
float,可选 |
默认值为0.0 |
start |
float,可选 |
泊松过程的开始时间,默认值为0.0 |
stop |
float,可选 |
泊松过程的结束时间,默认值为inf |
DC生成器:
{
"neuron_index": [
800001,
800001
],
"params": {
"amplitude": 100.0,
"origin": 0.0,
"start": 0.0,
"stop": 3.40282e+38
},
"neuron_number": 1,
"neuron_type": "dc_generator",
"pop_id": 5,
"rank_id": 0
}
dc_generator
的参数如下表所示:
参数 |
类型 |
描述 |
---|---|---|
amplitude |
float,必须 |
电流的幅值(pA),必须大于等于0 |
origin |
float,可选 |
默认值为0.0 |
start |
float,可选 |
泊松过程的起始时间,默认值为0.0 |
stop |
float,可选 |
泊松过程的停止时间,默认值为inf |
脉冲生成器:
{
"neuron_index": [
800001,
800001
],
"params": {
"spike_times": [0.2, 0.3, 1.0, 2.0],
"origin": 0.0,
"start": 0.0,
"stop": 3.40282e+38
},
"neuron_number": 1,
"neuron_type": "spike_generator",
"pop_id": 5,
"rank_id": 0
}
spike_generator
的参数如下表所示:
参数 |
类型 |
描述 |
---|---|---|
spike_times |
list,必须 |
尖峰触发时间, spike_times[i] >= resolution |
origin |
float,可选 |
默认值为 0.0 |
start |
float,可选 |
泊松开始时间,默认值为 0.0 |
stop |
float,可选 |
泊松停止时间,默认值为 inf |
projection#
该结构以字典格式存储了多个神经元簇之间突触连接的配置信息。一个单一的突触字典示例如下:
"2-0": {
"rule": "fixed_total_number",
"connNum": "100",
"synaptic_type": "static_synapse",
"weight": {
"distribution": "normal",
"max": 2.0,
"min": 1.0
},
"delay": 0.2,
"synapse_E/I_rate": [4, 2, 1],
"E/I_balance": true
}
参数如下表所示:
参数 |
类型 |
描述 |
---|---|---|
rule |
string,必须 |
连接规则,包括固定总数、全对全、一对一、固定入度、固定出度 |
connNum |
int,可选 |
当规则为固定总数、固定入度和固定出度时,必须设置 connNum |
synaptic_type |
float,可选 |
突触类型,默认为静态突触 |
weight |
float,可选 |
突触权重,支持分布和常量 |
delay |
float,可选 |
突触延迟,支持分布和常量 |
synapse_E/I_rate |
list,可选 |
未使用 |
E/I_balance |
bool,可选 |
未使用 |
连接规则参数如下表所示:
参数 |
类型 |
描述 |
---|---|---|
fixed_total_number |
string |
固定连接数,必须设置 connNum,connNum > 0 |
all_to_all |
string |
全连接,连接数为源神经元簇数量 * 目标神经元簇数量 |
one_to_one |
string |
一对一连接,源神经元簇数量应等于目标神经元簇数量 |
fixed_indegree |
string |
固定入度连接,必须设置 connNum,connNum > 0 |
fixed_outdegree |
string |
固定出度连接,必须设置 connNum,connNum > 0 |
simulation#
包含仿真运行时的配置信息,表示为一个字典,其中包含一个主要的参数 sim_time
,表示以毫秒为单位的模拟时间。JSON 示例如下:
"simulation": {
"sim": false,
"sim_time": 1000.0,
"resolution": 0.1,
"rng_type": "mt19937_64",
"rng_seed": 55,
"local_num_threads": 4,
"print_time": false,
"data_path": "./",
"com_type": "fp16",
"neuronNum_per_chip": 1.0,
"overwrite_files": true
}
参数如下表所示:
参数 |
类型 |
描述 |
---|---|---|
sim |
bool,可选 |
是否模拟使用 NEST golden |
sim_time |
float,可选 |
如果 sim 参数为 true,则 sim_time 必须大于等于0 |
resolution |
bool,必须 |
默认值为 0.1 |
rng_type |
string,必须 |
随机类型,默认为 “mt19937_64” |
rng_seed |
int,必须 |
随机种子,默认为 123 |
local_num_threads |
int,必须 |
进程中的线程数,默认为 1 |
print_time |
bool,必须 |
模拟时是否打印日志 |
data_path |
string,可选 |
未使用 |
neuronNum_per_chip |
int,必须 |
单个芯片中的神经元数量,默认为 1800000 |
overwrite_files |
bool,必须 |
是否覆盖生成的文件,默认为 true |
com_type |
string,必须 |
“double” 或 “fp16” |
其它字段#
包含网络统计参数。
JSON 示例如下:
{
"total_pops_number": 2,
"total_neuron_numbers": 3
}
参数如下表所示:
参数 |
类型 |
描述 |
---|---|---|
total_pops_number |
int,可选 |
神经元群体的总数 |
total_neuron_numbers |
int,可选 |
神经元的总数 |
完整网络IR示例#
{
"version": "0.0.1",
"population": [
{
"params": {
"I_e": 500.0,
"V_reset": -70.0,
"V_th": -55.0,
"tau_syn_ex": 2.0,
"E_L": -70.0,
"C_m": 250.0,
"tau_m": 10.0,
"V_m": -70.0,
"tau_syn_in": 2.0
},
"name": "ExpLIF_0",
"label": "ExpLIF_0",
"neuron_number": 1,
"pop_id": 0,
"neuron_index": [
1,
1
],
"pop_E/I_rate": 4,
"E/I_type": "E",
"neuron_type": "iaf_psc_exp",
"rank_id": 0
},
{
"params": {
"rate": 1700
},
"name": "PoissonGenerator_0",
"label": "PoissonGenerator_0",
"neuron_number": 1,
"pop_id": 1,
"neuron_index": [
2,
2
],
"pop_E/I_rate": 4,
"E/I_type": "E",
"neuron_type": "poisson_generator",
"rank_id": 0
}
],
"projection": {
"1-0": {
"weight": 1000.0,
"delay": 1.0,
"synaptic_type": "static_synapse",
"rule": "fixed_total_number",
"connNum": 1
}
},
"simulation": {
"sim": false,
"sim_time": 1000.0,
"resolution": 0.1,
"rng_type": "mt19937_64",
"rng_seed": 55,
"local_num_threads": 4,
"print_time": false,
"data_path": "./",
"com_type": "fp16",
"neuronNum_per_chip": 1800000,
"overwrite_files": true
},
"total_pops_number": 2,
"total_neuron_numbers": 2,
"voxel_type": 1,
"mpi_size": 1
}