Data-Driven Spiking Neural Network Optimization in Julia
Seeking collaborators
Brainhack Australasia
The project is for everyone who wants to try to do data fitting of neuron models without Python+external simulation tools. The project is for people who have been frustrated by writing support code in Python for externally supported simulator tools, and who would like to see efficient cellular and network data fitting happening all inside one language.
The project intends to consolidate neural electro-physiology tools and support that have existed in Julia for a while by applying tools by example.
It has a basis in Julia-lang which might be novel and exciting for many people, yet, the scope of the project is meta-package, meaning that many of the goals of the project are beginner-friendly.
git clone https://github.com/russelljjarvis/SpikeNetOpt.jl
Data fitting a spiking neural network by exploring the effect of the parameter that controls connectome graph structure:
cd examples
julia sdo_network.jl
Single cell data fitting against spike times:
cd test
julia single_cell_opt_adexp.jl
julia single_cell_opt_izhi.jl
https://github.com/russelljjarvis/SpikeNetOpt.jl
Refactor optimizer design from bespoke specific examples to a general user interface.
Make scatter plot animation of optimizer succeeding.
Use existing Python/BluePyOpt code to draw the GA evaluated error surface.
Properly cite this code and borrow from BPO /notebook here: https://github.com/BlueBrain/BluePyOpt/blob/master/examples/simplecell/simplecell-paperfig.ipynb Python code Cell 26 draws the error surface.
Sciunit scoring has tools, for scaling and normalizing feature measurements, some of these are trivial and some are elaborate. https://github.com/scidash/sciunit/blob/master/sciunit/scores/complete.py#L247-L329
Implement in Julia sciunits RelativeDifferenceScore, naming convention, and implementation. Note Julia is not Object orientated, so skip over Python’s inheritance, if it seems necessary to use a container use Julia struct. It might be helpful to re-implement multiple sciunit scores in Julia, but the most immediately useful one is RelativeDifferenceScore
https://mattermost.brainhack.org/brainhack/channels/spikenetoptjl
I will create a contributing.md in the interim.
At the moment single-cell model fitting occurs on Allen Brain Observatory data (these are cached in JLD files), I have written a Python API included in the Julia code repository (python is called from Julia).
This project would really benefit from experimental multicellular spike train data.
https://observatory.brain-map.org/visualcoding/sdk/index
5
I have started using the all contributors tool which makes all contributions to the repository visible (including raising issues via GitHub, or even ideas conveyed outside of GitHub). Also, I can write a reference letter for substantive contribution.
https://github.com/all-contributors/all-contributors
https://user-images.githubusercontent.com/7786645/142357325-60ffea1c-5ef1-4553-a392-7530792cfba0.png
Why Julia? Python package management is already complicated, reproducible model optimization is made worse by combining Python with external simulators.
Image source: https://xkcd.com/1987/
coding_methods, documentation, method_development, visualization
1_basic structure
data_visualisation, neural_networks, reproducible_scientific_methods, single_neuron_models, other
Python space: NetworkUnit, NeuronDataWithoutBorders, Neo Analog Signal. (note to be pragmatic, this project still uses some Python)
Julia space: ClearStacktrace.jl (makes error messages much easier to read) SignalAnalysis.jl, Evolutionary.jl, SpikingNeuralNetworks.jl, SpikeSynchrony.jl, PyCall.jl
Julia, Python.
other
0_no_git_skills, 1_commit_push, 2_branches_PRs, 3_continuous_integration
Although some Python is used to corroborate/validate optimized models, crucially no Python is used in the optimization loops, as calling Python with PyCall is not fast.
Julia has enough tools to support fitting spiking neural network models to data. Python speed necessitates external simulators to do network simulation. It would be more developer-friendly to do fast, efficient data fitting of spike trains to network models in one language, let us try to do that here.