Hello,
I hope you are doing well.
A colleague of mine is working on a supervised STDP model, which has already been successfully tested on the CPU.
The next step is to implement and test the method on SpiNNaker. For this purpose, by following the application notes and discussions in the Google group I installed the toolchain. However, the implementation appears to be much more complex than we initially expected.
As a temporary solution and proof of concept, we decided to use the existing STDP mechanism.
The model requires each input to be processed twice:
1- During the first pass, output spikes are collected while using the weights from the previous step as static weights. Based on the spike timings and the desired outputs (for each input), an error signal is generated to update the A_plus and A_minus parameters.
2- In the second pass, the updated timing_dependence parameters are used, and the data is passed through the network to update the weights (using STDPMechanism in the projections) for the next input.
To achieve this, I used a loop over the input data. In each iteration of the loop, the model is defined after calling the setup() function, the simulation is run for the first pass, and then the simulation is ended. After updating the parameters, the model is rerun for the second pass.
Unfortunately, at this stage, the results do not align with the CPU-based simulation. Additionally, this approach is extremely slow due to its inefficiency.
I have two questions:
1- Is there a better way to speed up the simulation? (instead of setup-run-end)
2- If I want to implement a custom timing and weight update rule, which files need to be copied and modified besides timing_pair_impl.c, timing_pair_impl.h, weight_additive_one_term_impl.h, and weight_additive_one_term_impl.c?
Any guidance or suggestions would be greatly appreciated.
Best regards,
Mazdak FATAHI