Cannot simulate PointNet network with custom set_syn_weight function
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Start with pointnet/default_setters/synaptic_weights.py and pointnet/sonata_adaptors.py, then trace how the custom function's edge_props result reaches pointnet/pointnetwork.py and NEST Connect. Check the expected edge properties and weight array shape against the reported 299430 connections; done means a custom set_syn_weight function runs successfully with the provided edge data.
Written by the indexing model from the issue text.
Description
Hello!
I built a pointnet network for which I used add_properties to define the delays with a given rule. By doing that, i deleted the "nsyn" section in the edge h5 file (which is compensated by adding multiple time a connection in the edge h5 file according to its number of synapses). However, during the simulation of the config file I get this error:
Traceback (most recent call last):
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/BMTK_Simulations/grid_searching_l4l4.py", line 31, in <module>
sim = pointnet.PointSimulator.from_config(configure, graph)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/pointnet/pointsimulator.py", line 243, in from_config
graph.build_recurrent_edges()
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/pointnet/pointnetwork.py", line 167, in build_recurrent_edges
for edge in edge_pop.get_edges():
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/core/sonata_reader/network_reader.py", line 191, in get_edges
for edge in edge_adaptor.get_batches(edge_group):
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/pointnet/sonata_adaptors.py", line 335, in get_batches
type_params[edge_id]['weight'] = weight_fnc(edges, source_nodes, target_nodes)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/pointnet/default_setters/synaptic_weights.py", line 7, in default_weight_fnc
return np.array(edge_props['syn_weight']*edge_props.nsyns)
^^^^^^^^^^^^^^^^
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/pandas/core/generic.py", line 6296, in __getattr__
return object.__getattribute__(self, name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'DataFrame' object has no attribute 'nsyns'
srun: error: node105: task 0: Exited with exit code 1
I tried to overwrite the default set_syn_weight function by building my own set_syn_weight function (which I will also need to use in the future since I want to do a grid searching in order to find an optimal synaptic weight according to a targeted output frequency):
list_grid=[1,2,3,4]
grid_search = {
'exc':list_grid,
'in':[0]*len(list_grid)
}
@synaptic_weight
def set_syn_weight(edge_props, source_nodes, target_nodes):
target_type = target_nodes['cell_line'].unique()[0]
new_syn_weight = grid_search[target_type][current_itr]
weights_table[target_type].append(new_syn_weight)
return np.array(new_syn_weight*edge_props.nsyns)
But I get this error:
Traceback (most recent call last):
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/BMTK_Simulations/grid_searching_l4l4.py", line 95, in <module>
sim = pointnet.PointSimulator.from_config(configure, graph)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/pointnet/pointsimulator.py", line 243, in from_config
graph.build_recurrent_edges()
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/pointnet/pointnetwork.py", line 173, in build_recurrent_edges
self._nest_connect(nest_srcs, nest_trgs, conn_spec='one_to_one', syn_spec=edge.nest_params)
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/pointnet/pointnetwork.py", line 232, in _nest_connect
nest.Connect(nest_srcs, nest_trgs, conn_spec=conn_spec, syn_spec=syn_spec)
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/nest/ll_api.py", line 229, in stack_checker_func
return f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/nest/lib/hl_api_connections.py", line 257, in Connect
connect_arrays(pre, post, weights, delays, synapse_model, syn_param_keys, syn_param_values)
File "pynestkernel.pyx", line 300, in pynestkernel.NESTEngine.connect_arrays
TypeError: weights must be a 1-dimensional NumPy array
srun: error: node200: task 0: Exited with exit code 1
I changed the function with:
return np.array(new_syn_weight*pd.Series([1]))
But then again I get this error:
Traceback (most recent call last):
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/BMTK_Simulations/grid_searching_l4l4.py", line 95, in <module>
sim = pointnet.PointSimulator.from_config(configure, graph)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/pointnet/pointsimulator.py", line 243, in from_config
graph.build_recurrent_edges()
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/pointnet/pointnetwork.py", line 173, in build_recurrent_edges
self._nest_connect(nest_srcs, nest_trgs, conn_spec='one_to_one', syn_spec=edge.nest_params)
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/bmtk/simulator/pointnet/pointnetwork.py", line 232, in _nest_connect
nest.Connect(nest_srcs, nest_trgs, conn_spec=conn_spec, syn_spec=syn_spec)
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/nest/ll_api.py", line 229, in stack_checker_func
return f(*args, **kwargs)
^^^^^^^^^^^^^^^^^^
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/nest/lib/hl_api_connections.py", line 214, in Connect
processed_syn_spec = _process_syn_spec(
^^^^^^^^^^^^^^^^^^
File "/gpfs/users/calicem/.conda/envs/ENV_NEST33/lib/python3.11/site-packages/nest/lib/hl_api_connection_helpers.py", line 89, in _process_syn_spec
raise kernel.NESTError(
nest.lib.hl_api_exceptions.NESTErrors.NESTError: 'weight' has to be an array of dimension 299430.
srun: error: node200: task 0: Exited with exit code 1
How can I build my own set_syn_weight function and avoid this issue ?
I am using NEST 3.3 and BMTK 1.0.8.
Thanks in advance for your help,
Margaux
- Dominant language
- Python
- Stars
- 340
- Forks
- 104
- Avg merge
- 3h 16m
- Merged PRs (30d)
- 16
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from AllenInstitute/bmtk
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
AllenInstitute/bmtk#468 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 Under an hour Newbie friendliness 65/100
AllenInstitute/bmtk#337 ·
Maintainers usually reply within 1 day
-
Difficulty 1/5 1-3 hours Newbie friendliness 68/100
AllenInstitute/bmtk#326 ·
Maintainers usually reply within 1 day
-
tau_syn_basis and weight coefficients for TF synapsesMay be free again @shixnya claimed this 136 days ago, and no pull request is open. Open
AllenInstitute/bmtk#463 · 1 assignee ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 25/100
AllenInstitute/bmtk#457 ·
Maintainers usually reply within 1 day
All issues in AllenInstitute/bmtk
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
pylint-dev/pylint#11791 ·
Maintainers usually reply within 1 day
-
Rasterio granule reads never retry, so one 503 (Service Unavailable) fails the whole requestPossibly taken @chuckwondo claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
developmentseed/titiler-cmr#305 ·
Maintainers usually reply within 1 day
-
community enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
Maintainers usually reply within 1 day