lava
lava copied to clipboard
Implementing synaptic delay in Dense() object.
Objective of issue: Prioritize implementation of synpatic delay in Dense()
object.
Lava version:
- [ ] 0.4.0 (feature release)
- [ ] 0.3.1 (bug fixes)
- [x] 0.3.0 (current version)
- [ ] 0.2.0
- [ ] 0.1.2
I'm submitting a ...
- [ ] bug report
- [x] feature request
- [ ] documentation request
Current behavior:
- Synaptic delays are currently not supported by the
Dense()
object. Synaptic delays can be useful in manual SNN algorithm design using LIF neurons.
Expected behavior:
- Would expect:
dense = Dense(.., delay=5)
to generate a synaptic connection that induces a delay of 5 timesteps before submitting a spike to the output neuron.
Steps to reproduce:
Related code: https://github.com/lava-nc/lava/blob/main/src/lava/proc/dense/process.py
# ToDo: (DR) Implement a ProcModel that supports synaptic delays. a_buff
# must then be adjusted to the length of the delay.
# ToDo: (DR) Revisit the implementation of w_scale so that less of this
# computation is exposed at the level of the Process.
Other information:
- If there is a work-around to simulate a synaptic delay among LIF neurons, please let me know, it would be valuable until the delay is implemented. I thought perhaps including an array of neurons and synapses between the input and output neuron of the
Dense()
object, might be able to simulate the delay. Alternatively, perhaps there exist other objects that do support the delay between LIF neurons. - If you have suggestions on where to start implementing a delay for the
Dense()
object, and or relevant dependencies, please do share.
Thank you everyone for your work on this wonderful platform!
Hello,
I have been working on implementing synaptic delays for lava, and have a working version of it. Instead of directly modifying the Dense() process, I copied the code for that and made a modified I called Delay(). I use a 2D matrix of delays similar to how the weights are input into the Dense() process. I'd be more than happy to share the code that I have so far, and submit a pull request for implementing it once it is finished (it still needs to be tested and optimized).
This sounds great. We haven't been able to prioritize support for delays ourselves so far. Thus we are glad that community members are adding new such features. Submitting a PR is the way to move this forward. Once submitted, members of our team will take a look and give feedback on the PR. It might make sense to either factor our shared code with DENSE or simply merge it with DENSE.