From d545e6be09e5418b84065411cc26cfdaa4412279 Mon Sep 17 00:00:00 2001
From: pgleeson
Date: Mon, 24 Apr 2023 15:41:01 +0100
Subject: [PATCH 01/10] Separated syn from iaf node
---
examples/MDF/RNN/IAF_net.json | 219 +++++++++---------------------
examples/MDF/RNN/IAF_net.yaml | 158 ++++++---------------
examples/MDF/RNN/IAF_net2.json | 219 +++++++++---------------------
examples/MDF/RNN/IAF_net2.yaml | 158 ++++++---------------
examples/MDF/RNN/IAFs.json | 132 ++++++++----------
examples/MDF/RNN/IAFs.yaml | 91 ++++++-------
examples/MDF/RNN/IaF.net.run.png | Bin 135524 -> 134292 bytes
examples/MDF/RNN/IaF.net2.run.png | Bin 49269 -> 48679 bytes
examples/MDF/RNN/generate_iaf.py | 147 ++++++++++++--------
examples/MDF/RNN/iaf.net.png | Bin 138392 -> 143483 bytes
examples/MDF/RNN/iaf.net2.png | Bin 136484 -> 127260 bytes
examples/MDF/RNN/iaf.png | Bin 129011 -> 119379 bytes
12 files changed, 403 insertions(+), 721 deletions(-)
diff --git a/examples/MDF/RNN/IAF_net.json b/examples/MDF/RNN/IAF_net.json
index 22a9b863..a2c54994 100644
--- a/examples/MDF/RNN/IAF_net.json
+++ b/examples/MDF/RNN/IAF_net.json
@@ -46,7 +46,7 @@
}
},
"output_ports": {
- "out_port": {
+ "current_output": {
"value": "level"
}
}
@@ -57,17 +57,9 @@
"shape": [
8
]
- },
- "spike_input": {
- "shape": [
- 8
- ]
}
},
"parameters": {
- "syn_tau": {
- "value": 10
- },
"v0": {
"value": [
-54.67038134416407,
@@ -107,108 +99,6 @@
-20
]
},
- "spike_weights": {
- "value": [
- [
- 1.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 1.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 1.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 0.0,
- 1.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 1.0,
- 0.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 1.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 1.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 1.0
- ]
- ]
- },
- "weighted_spike": {
- "function": "MatMul",
- "args": {
- "A": "spike_weights",
- "B": "spike_input"
- }
- },
- "syn_i": {
- "default_initial_value": "0",
- "time_derivative": "-1 * syn_i",
- "conditions": [
- {
- "id": "spike_detected",
- "test": "spike_input > 0",
- "value": "weighted_spike"
- }
- ]
- },
"spiking": {
"default_initial_value": "0",
"conditions": [
@@ -226,7 +116,7 @@
},
"v": {
"default_initial_value": "v0",
- "time_derivative": "-1 * (v-erev)/tau + syn_i + current_input",
+ "time_derivative": "-1 * (v-erev)/tau + current_input",
"conditions": [
{
"id": "reset",
@@ -237,10 +127,10 @@
}
},
"output_ports": {
- "out_port_v": {
+ "v_output": {
"value": "v"
},
- "out_port_spiking": {
+ "spiking_output": {
"value": "spiking"
}
}
@@ -251,17 +141,9 @@
"shape": [
8
]
- },
- "spike_input": {
- "shape": [
- 8
- ]
}
},
"parameters": {
- "syn_tau": {
- "value": 10
- },
"v0": {
"value": [
-54.67038134416407,
@@ -301,6 +183,54 @@
-20
]
},
+ "spiking": {
+ "default_initial_value": "0",
+ "conditions": [
+ {
+ "id": "is_spiking",
+ "test": "v >= thresh",
+ "value": "1"
+ },
+ {
+ "id": "not_spiking",
+ "test": "v < thresh",
+ "value": "0"
+ }
+ ]
+ },
+ "v": {
+ "default_initial_value": "v0",
+ "time_derivative": "-1 * (v-erev)/tau + current_input",
+ "conditions": [
+ {
+ "id": "reset",
+ "test": "v > thresh",
+ "value": "erev"
+ }
+ ]
+ }
+ },
+ "output_ports": {
+ "v_output": {
+ "value": "v"
+ },
+ "spiking_output": {
+ "value": "spiking"
+ }
+ }
+ },
+ "syn_post": {
+ "input_ports": {
+ "spike_input": {
+ "shape": [
+ 8
+ ]
+ }
+ },
+ "parameters": {
+ "syn_tau": {
+ "value": 10
+ },
"spike_weights": {
"value": [
[
@@ -402,40 +332,11 @@
"value": "weighted_spike"
}
]
- },
- "spiking": {
- "default_initial_value": "0",
- "conditions": [
- {
- "id": "is_spiking",
- "test": "v >= thresh",
- "value": "1"
- },
- {
- "id": "not_spiking",
- "test": "v < thresh",
- "value": "0"
- }
- ]
- },
- "v": {
- "default_initial_value": "v0",
- "time_derivative": "-1 * (v-erev)/tau + syn_i + current_input",
- "conditions": [
- {
- "id": "reset",
- "test": "v > thresh",
- "value": "erev"
- }
- ]
}
},
"output_ports": {
- "out_port_v": {
- "value": "v"
- },
- "out_port_spiking": {
- "value": "spiking"
+ "current_output": {
+ "value": "syn_i"
}
}
}
@@ -444,13 +345,19 @@
"input_edge": {
"sender": "current_input_node",
"receiver": "pre",
- "sender_port": "out_port",
+ "sender_port": "current_output",
+ "receiver_port": "current_input"
+ },
+ "post_internal_edge": {
+ "sender": "syn_post",
+ "receiver": "post",
+ "sender_port": "current_output",
"receiver_port": "current_input"
},
"syn_edge": {
"sender": "pre",
- "receiver": "post",
- "sender_port": "out_port_spiking",
+ "receiver": "syn_post",
+ "sender_port": "spiking_output",
"receiver_port": "spike_input"
}
}
diff --git a/examples/MDF/RNN/IAF_net.yaml b/examples/MDF/RNN/IAF_net.yaml
index 0209e8ab..b7645fdf 100644
--- a/examples/MDF/RNN/IAF_net.yaml
+++ b/examples/MDF/RNN/IAF_net.yaml
@@ -33,19 +33,14 @@ IAF_net:
test: time > start + duration
value: amplitude*0
output_ports:
- out_port:
+ current_output:
value: level
pre:
input_ports:
current_input:
shape:
- 8
- spike_input:
- shape:
- - 8
parameters:
- syn_tau:
- value: 10
v0:
value:
- -54.67038134416407
@@ -78,84 +73,6 @@ IAF_net:
- -20
- -20
- -20
- spike_weights:
- value:
- - - 1.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - - 0.0
- - 1.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - - 0.0
- - 0.0
- - 1.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - - 0.0
- - 0.0
- - 0.0
- - 1.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 1.0
- - 0.0
- - 0.0
- - 0.0
- - - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 1.0
- - 0.0
- - 0.0
- - - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 1.0
- - 0.0
- - - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 1.0
- weighted_spike:
- function: MatMul
- args:
- A: spike_weights
- B: spike_input
- syn_i:
- default_initial_value: '0'
- time_derivative: -1 * syn_i
- conditions:
- - id: spike_detected
- test: spike_input > 0
- value: weighted_spike
spiking:
default_initial_value: '0'
conditions:
@@ -167,27 +84,22 @@ IAF_net:
value: '0'
v:
default_initial_value: v0
- time_derivative: -1 * (v-erev)/tau + syn_i + current_input
+ time_derivative: -1 * (v-erev)/tau + current_input
conditions:
- id: reset
test: v > thresh
value: erev
output_ports:
- out_port_v:
+ v_output:
value: v
- out_port_spiking:
+ spiking_output:
value: spiking
post:
input_ports:
current_input:
shape:
- 8
- spike_input:
- shape:
- - 8
parameters:
- syn_tau:
- value: 10
v0:
value:
- -54.67038134416407
@@ -220,6 +132,35 @@ IAF_net:
- -20
- -20
- -20
+ spiking:
+ default_initial_value: '0'
+ conditions:
+ - id: is_spiking
+ test: v >= thresh
+ value: '1'
+ - id: not_spiking
+ test: v < thresh
+ value: '0'
+ v:
+ default_initial_value: v0
+ time_derivative: -1 * (v-erev)/tau + current_input
+ conditions:
+ - id: reset
+ test: v > thresh
+ value: erev
+ output_ports:
+ v_output:
+ value: v
+ spiking_output:
+ value: spiking
+ syn_post:
+ input_ports:
+ spike_input:
+ shape:
+ - 8
+ parameters:
+ syn_tau:
+ value: 10
spike_weights:
value:
- - 40.0
@@ -298,35 +239,22 @@ IAF_net:
- id: spike_detected
test: spike_input > 0
value: weighted_spike
- spiking:
- default_initial_value: '0'
- conditions:
- - id: is_spiking
- test: v >= thresh
- value: '1'
- - id: not_spiking
- test: v < thresh
- value: '0'
- v:
- default_initial_value: v0
- time_derivative: -1 * (v-erev)/tau + syn_i + current_input
- conditions:
- - id: reset
- test: v > thresh
- value: erev
output_ports:
- out_port_v:
- value: v
- out_port_spiking:
- value: spiking
+ current_output:
+ value: syn_i
edges:
input_edge:
sender: current_input_node
receiver: pre
- sender_port: out_port
+ sender_port: current_output
+ receiver_port: current_input
+ post_internal_edge:
+ sender: syn_post
+ receiver: post
+ sender_port: current_output
receiver_port: current_input
syn_edge:
sender: pre
- receiver: post
- sender_port: out_port_spiking
+ receiver: syn_post
+ sender_port: spiking_output
receiver_port: spike_input
diff --git a/examples/MDF/RNN/IAF_net2.json b/examples/MDF/RNN/IAF_net2.json
index 1f4123c4..d5f2d486 100644
--- a/examples/MDF/RNN/IAF_net2.json
+++ b/examples/MDF/RNN/IAF_net2.json
@@ -55,7 +55,7 @@
}
},
"output_ports": {
- "out_port": {
+ "current_output": {
"value": "level"
}
}
@@ -66,17 +66,9 @@
"shape": [
8
]
- },
- "spike_input": {
- "shape": [
- 8
- ]
}
},
"parameters": {
- "syn_tau": {
- "value": 10
- },
"v0": {
"value": [
-70,
@@ -116,108 +108,6 @@
-20
]
},
- "spike_weights": {
- "value": [
- [
- 1.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 1.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 1.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 0.0,
- 1.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 1.0,
- 0.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 1.0,
- 0.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 1.0,
- 0.0
- ],
- [
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 0.0,
- 1.0
- ]
- ]
- },
- "weighted_spike": {
- "function": "MatMul",
- "args": {
- "A": "spike_weights",
- "B": "spike_input"
- }
- },
- "syn_i": {
- "default_initial_value": "0",
- "time_derivative": "-1 * syn_i",
- "conditions": [
- {
- "id": "spike_detected",
- "test": "spike_input > 0",
- "value": "weighted_spike"
- }
- ]
- },
"spiking": {
"default_initial_value": "0",
"conditions": [
@@ -235,7 +125,7 @@
},
"v": {
"default_initial_value": "v0",
- "time_derivative": "-1 * (v-erev)/tau + syn_i + current_input",
+ "time_derivative": "-1 * (v-erev)/tau + current_input",
"conditions": [
{
"id": "reset",
@@ -246,10 +136,10 @@
}
},
"output_ports": {
- "out_port_v": {
+ "v_output": {
"value": "v"
},
- "out_port_spiking": {
+ "spiking_output": {
"value": "spiking"
}
}
@@ -260,17 +150,9 @@
"shape": [
8
]
- },
- "spike_input": {
- "shape": [
- 8
- ]
}
},
"parameters": {
- "syn_tau": {
- "value": 10
- },
"v0": {
"value": [
-70,
@@ -310,6 +192,54 @@
-20
]
},
+ "spiking": {
+ "default_initial_value": "0",
+ "conditions": [
+ {
+ "id": "is_spiking",
+ "test": "v >= thresh",
+ "value": "1"
+ },
+ {
+ "id": "not_spiking",
+ "test": "v < thresh",
+ "value": "0"
+ }
+ ]
+ },
+ "v": {
+ "default_initial_value": "v0",
+ "time_derivative": "-1 * (v-erev)/tau + current_input",
+ "conditions": [
+ {
+ "id": "reset",
+ "test": "v > thresh",
+ "value": "erev"
+ }
+ ]
+ }
+ },
+ "output_ports": {
+ "v_output": {
+ "value": "v"
+ },
+ "spiking_output": {
+ "value": "spiking"
+ }
+ }
+ },
+ "syn_post": {
+ "input_ports": {
+ "spike_input": {
+ "shape": [
+ 8
+ ]
+ }
+ },
+ "parameters": {
+ "syn_tau": {
+ "value": 10
+ },
"spike_weights": {
"value": [
[
@@ -411,40 +341,11 @@
"value": "weighted_spike"
}
]
- },
- "spiking": {
- "default_initial_value": "0",
- "conditions": [
- {
- "id": "is_spiking",
- "test": "v >= thresh",
- "value": "1"
- },
- {
- "id": "not_spiking",
- "test": "v < thresh",
- "value": "0"
- }
- ]
- },
- "v": {
- "default_initial_value": "v0",
- "time_derivative": "-1 * (v-erev)/tau + syn_i + current_input",
- "conditions": [
- {
- "id": "reset",
- "test": "v > thresh",
- "value": "erev"
- }
- ]
}
},
"output_ports": {
- "out_port_v": {
- "value": "v"
- },
- "out_port_spiking": {
- "value": "spiking"
+ "current_output": {
+ "value": "syn_i"
}
}
}
@@ -453,13 +354,19 @@
"input_edge": {
"sender": "current_input_node",
"receiver": "pre",
- "sender_port": "out_port",
+ "sender_port": "current_output",
+ "receiver_port": "current_input"
+ },
+ "post_internal_edge": {
+ "sender": "syn_post",
+ "receiver": "post",
+ "sender_port": "current_output",
"receiver_port": "current_input"
},
"syn_edge": {
"sender": "pre",
- "receiver": "post",
- "sender_port": "out_port_spiking",
+ "receiver": "syn_post",
+ "sender_port": "spiking_output",
"receiver_port": "spike_input"
}
}
diff --git a/examples/MDF/RNN/IAF_net2.yaml b/examples/MDF/RNN/IAF_net2.yaml
index 67ebb537..ce90e120 100644
--- a/examples/MDF/RNN/IAF_net2.yaml
+++ b/examples/MDF/RNN/IAF_net2.yaml
@@ -41,19 +41,14 @@ IAF_net2:
test: time > start + duration
value: amplitude*0
output_ports:
- out_port:
+ current_output:
value: level
pre:
input_ports:
current_input:
shape:
- 8
- spike_input:
- shape:
- - 8
parameters:
- syn_tau:
- value: 10
v0:
value:
- -70
@@ -86,84 +81,6 @@ IAF_net2:
- -20
- -20
- -20
- spike_weights:
- value:
- - - 1.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - - 0.0
- - 1.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - - 0.0
- - 0.0
- - 1.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - - 0.0
- - 0.0
- - 0.0
- - 1.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 1.0
- - 0.0
- - 0.0
- - 0.0
- - - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 1.0
- - 0.0
- - 0.0
- - - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 1.0
- - 0.0
- - - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 0.0
- - 1.0
- weighted_spike:
- function: MatMul
- args:
- A: spike_weights
- B: spike_input
- syn_i:
- default_initial_value: '0'
- time_derivative: -1 * syn_i
- conditions:
- - id: spike_detected
- test: spike_input > 0
- value: weighted_spike
spiking:
default_initial_value: '0'
conditions:
@@ -175,27 +92,22 @@ IAF_net2:
value: '0'
v:
default_initial_value: v0
- time_derivative: -1 * (v-erev)/tau + syn_i + current_input
+ time_derivative: -1 * (v-erev)/tau + current_input
conditions:
- id: reset
test: v > thresh
value: erev
output_ports:
- out_port_v:
+ v_output:
value: v
- out_port_spiking:
+ spiking_output:
value: spiking
post:
input_ports:
current_input:
shape:
- 8
- spike_input:
- shape:
- - 8
parameters:
- syn_tau:
- value: 10
v0:
value:
- -70
@@ -228,6 +140,35 @@ IAF_net2:
- -20
- -20
- -20
+ spiking:
+ default_initial_value: '0'
+ conditions:
+ - id: is_spiking
+ test: v >= thresh
+ value: '1'
+ - id: not_spiking
+ test: v < thresh
+ value: '0'
+ v:
+ default_initial_value: v0
+ time_derivative: -1 * (v-erev)/tau + current_input
+ conditions:
+ - id: reset
+ test: v > thresh
+ value: erev
+ output_ports:
+ v_output:
+ value: v
+ spiking_output:
+ value: spiking
+ syn_post:
+ input_ports:
+ spike_input:
+ shape:
+ - 8
+ parameters:
+ syn_tau:
+ value: 10
spike_weights:
value:
- - 0.0
@@ -306,35 +247,22 @@ IAF_net2:
- id: spike_detected
test: spike_input > 0
value: weighted_spike
- spiking:
- default_initial_value: '0'
- conditions:
- - id: is_spiking
- test: v >= thresh
- value: '1'
- - id: not_spiking
- test: v < thresh
- value: '0'
- v:
- default_initial_value: v0
- time_derivative: -1 * (v-erev)/tau + syn_i + current_input
- conditions:
- - id: reset
- test: v > thresh
- value: erev
output_ports:
- out_port_v:
- value: v
- out_port_spiking:
- value: spiking
+ current_output:
+ value: syn_i
edges:
input_edge:
sender: current_input_node
receiver: pre
- sender_port: out_port
+ sender_port: current_output
+ receiver_port: current_input
+ post_internal_edge:
+ sender: syn_post
+ receiver: post
+ sender_port: current_output
receiver_port: current_input
syn_edge:
sender: pre
- receiver: post
- sender_port: out_port_spiking
+ receiver: syn_post
+ sender_port: spiking_output
receiver_port: spike_input
diff --git a/examples/MDF/RNN/IAFs.json b/examples/MDF/RNN/IAFs.json
index 01992bee..55508ee9 100644
--- a/examples/MDF/RNN/IAFs.json
+++ b/examples/MDF/RNN/IAFs.json
@@ -37,7 +37,7 @@
}
},
"output_ports": {
- "out_port": {
+ "current_output": {
"value": "level"
}
}
@@ -48,17 +48,9 @@
"shape": [
1
]
- },
- "spike_input": {
- "shape": [
- 1
- ]
}
},
"parameters": {
- "syn_tau": {
- "value": 10
- },
"v0": {
"value": [
-60
@@ -77,31 +69,6 @@
-20
]
},
- "spike_weights": {
- "value": [
- [
- 1.0
- ]
- ]
- },
- "weighted_spike": {
- "function": "MatMul",
- "args": {
- "A": "spike_weights",
- "B": "spike_input"
- }
- },
- "syn_i": {
- "default_initial_value": "0",
- "time_derivative": "-1 * syn_i",
- "conditions": [
- {
- "id": "spike_detected",
- "test": "spike_input > 0",
- "value": "weighted_spike"
- }
- ]
- },
"spiking": {
"default_initial_value": "0",
"conditions": [
@@ -119,7 +86,7 @@
},
"v": {
"default_initial_value": "v0",
- "time_derivative": "-1 * (v-erev)/tau + syn_i + current_input",
+ "time_derivative": "-1 * (v-erev)/tau + current_input",
"conditions": [
{
"id": "reset",
@@ -130,10 +97,10 @@
}
},
"output_ports": {
- "out_port_v": {
+ "v_output": {
"value": "v"
},
- "out_port_spiking": {
+ "spiking_output": {
"value": "spiking"
}
}
@@ -144,17 +111,9 @@
"shape": [
1
]
- },
- "spike_input": {
- "shape": [
- 1
- ]
}
},
"parameters": {
- "syn_tau": {
- "value": 10
- },
"v0": {
"value": [
-60
@@ -173,29 +132,6 @@
-20
]
},
- "spike_weights": {
- "value": [
- 40
- ]
- },
- "weighted_spike": {
- "function": "MatMul",
- "args": {
- "A": "spike_weights",
- "B": "spike_input"
- }
- },
- "syn_i": {
- "default_initial_value": "0",
- "time_derivative": "-1 * syn_i",
- "conditions": [
- {
- "id": "spike_detected",
- "test": "spike_input > 0",
- "value": "weighted_spike"
- }
- ]
- },
"spiking": {
"default_initial_value": "0",
"conditions": [
@@ -213,7 +149,7 @@
},
"v": {
"default_initial_value": "v0",
- "time_derivative": "-1 * (v-erev)/tau + syn_i + current_input",
+ "time_derivative": "-1 * (v-erev)/tau + current_input",
"conditions": [
{
"id": "reset",
@@ -224,26 +160,74 @@
}
},
"output_ports": {
- "out_port_v": {
+ "v_output": {
"value": "v"
},
- "out_port_spiking": {
+ "spiking_output": {
"value": "spiking"
}
}
+ },
+ "syn_post": {
+ "input_ports": {
+ "spike_input": {
+ "shape": [
+ 1
+ ]
+ }
+ },
+ "parameters": {
+ "syn_tau": {
+ "value": 10
+ },
+ "spike_weights": {
+ "value": [
+ 40
+ ]
+ },
+ "weighted_spike": {
+ "function": "MatMul",
+ "args": {
+ "A": "spike_weights",
+ "B": "spike_input"
+ }
+ },
+ "syn_i": {
+ "default_initial_value": "0",
+ "time_derivative": "-1 * syn_i",
+ "conditions": [
+ {
+ "id": "spike_detected",
+ "test": "spike_input > 0",
+ "value": "weighted_spike"
+ }
+ ]
+ }
+ },
+ "output_ports": {
+ "current_output": {
+ "value": "syn_i"
+ }
+ }
}
},
"edges": {
"input_edge": {
"sender": "current_input_node",
"receiver": "pre",
- "sender_port": "out_port",
+ "sender_port": "current_output",
+ "receiver_port": "current_input"
+ },
+ "post_internal_edge": {
+ "sender": "syn_post",
+ "receiver": "post",
+ "sender_port": "current_output",
"receiver_port": "current_input"
},
"syn_edge": {
"sender": "pre",
- "receiver": "post",
- "sender_port": "out_port_spiking",
+ "receiver": "syn_post",
+ "sender_port": "spiking_output",
"receiver_port": "spike_input"
}
}
diff --git a/examples/MDF/RNN/IAFs.yaml b/examples/MDF/RNN/IAFs.yaml
index 0549aaec..ac8de32a 100644
--- a/examples/MDF/RNN/IAFs.yaml
+++ b/examples/MDF/RNN/IAFs.yaml
@@ -25,19 +25,14 @@ IAFs:
test: time > start + duration
value: amplitude*0
output_ports:
- out_port:
+ current_output:
value: level
pre:
input_ports:
current_input:
shape:
- 1
- spike_input:
- shape:
- - 1
parameters:
- syn_tau:
- value: 10
v0:
value:
- -60
@@ -49,21 +44,6 @@ IAFs:
thresh:
value:
- -20
- spike_weights:
- value:
- - - 1.0
- weighted_spike:
- function: MatMul
- args:
- A: spike_weights
- B: spike_input
- syn_i:
- default_initial_value: '0'
- time_derivative: -1 * syn_i
- conditions:
- - id: spike_detected
- test: spike_input > 0
- value: weighted_spike
spiking:
default_initial_value: '0'
conditions:
@@ -75,27 +55,22 @@ IAFs:
value: '0'
v:
default_initial_value: v0
- time_derivative: -1 * (v-erev)/tau + syn_i + current_input
+ time_derivative: -1 * (v-erev)/tau + current_input
conditions:
- id: reset
test: v > thresh
value: erev
output_ports:
- out_port_v:
+ v_output:
value: v
- out_port_spiking:
+ spiking_output:
value: spiking
post:
input_ports:
current_input:
shape:
- 1
- spike_input:
- shape:
- - 1
parameters:
- syn_tau:
- value: 10
v0:
value:
- -60
@@ -107,21 +82,6 @@ IAFs:
thresh:
value:
- -20
- spike_weights:
- value:
- - 40
- weighted_spike:
- function: MatMul
- args:
- A: spike_weights
- B: spike_input
- syn_i:
- default_initial_value: '0'
- time_derivative: -1 * syn_i
- conditions:
- - id: spike_detected
- test: spike_input > 0
- value: weighted_spike
spiking:
default_initial_value: '0'
conditions:
@@ -133,24 +93,55 @@ IAFs:
value: '0'
v:
default_initial_value: v0
- time_derivative: -1 * (v-erev)/tau + syn_i + current_input
+ time_derivative: -1 * (v-erev)/tau + current_input
conditions:
- id: reset
test: v > thresh
value: erev
output_ports:
- out_port_v:
+ v_output:
value: v
- out_port_spiking:
+ spiking_output:
value: spiking
+ syn_post:
+ input_ports:
+ spike_input:
+ shape:
+ - 1
+ parameters:
+ syn_tau:
+ value: 10
+ spike_weights:
+ value:
+ - 40
+ weighted_spike:
+ function: MatMul
+ args:
+ A: spike_weights
+ B: spike_input
+ syn_i:
+ default_initial_value: '0'
+ time_derivative: -1 * syn_i
+ conditions:
+ - id: spike_detected
+ test: spike_input > 0
+ value: weighted_spike
+ output_ports:
+ current_output:
+ value: syn_i
edges:
input_edge:
sender: current_input_node
receiver: pre
- sender_port: out_port
+ sender_port: current_output
+ receiver_port: current_input
+ post_internal_edge:
+ sender: syn_post
+ receiver: post
+ sender_port: current_output
receiver_port: current_input
syn_edge:
sender: pre
- receiver: post
- sender_port: out_port_spiking
+ receiver: syn_post
+ sender_port: spiking_output
receiver_port: spike_input
diff --git a/examples/MDF/RNN/IaF.net.run.png b/examples/MDF/RNN/IaF.net.run.png
index 514495c4b4ba2216ad1ff9cd630dbc30ecabbb42..276c7c23d7795fd168e913e9788268f551c508d4 100644
GIT binary patch
delta 32262
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