brian simulator
DESCRIPTION
BRIAN Simulator. 11/4/11. NEURON is cool, but…. …it’s not suited particularly well for large network simulations What if you want to look at properties of thousands of neurons interacting with one another? What about changing properties of synapses through time?. BRIAN Simulator. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/1.jpg)
BRIAN Simulator
11/4/11
![Page 2: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/2.jpg)
NEURON is cool, but…
• …it’s not suited particularly well for large network simulations
• What if you want to look at properties of thousands of neurons interacting with one another?
• What about changing properties of synapses through time?
![Page 3: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/3.jpg)
BRIAN Simulator
• BRIAN allows for efficient simulations of large neural networks
• Includes nice routines for setting up random connectivity, recording spike times, changing synaptic weights as a function of activity
• www.briansimulator.org– Should be able to run from the unzipped brian
directory– http://www.briansimulator.org/docs/installation.ht
ml
![Page 4: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/4.jpg)
Make sure it works!from brian import * brian_sample_run()
![Page 5: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/5.jpg)
Building blocks of BRIAN
• Model consists of:– Equations– NeuronGroup – a group of neurons which obeys
those equations– Connection – a way to define connection matrices
between neurons– SpikeMonitor (and others) – a way to measure
properties of the simulated network
![Page 6: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/6.jpg)
My First BRIAN Model
• To start, let’s walk through the example code on briansimulator.org homepage
• Copy this text into IDLE (or whichever .py editor you’re using)
• Make sure it runs first!
from brian import *eqs = '''dv/dt = (ge+gi-(v+49*mV))/(20*ms) :
voltdge/dt = -ge/(5*ms) : voltdgi/dt = -gi/(10*ms) : volt'''P = NeuronGroup(4000, eqs, threshold=-
50*mV, reset=-60*mV)P.v = -60*mVPe = P.subgroup(3200)Pi = P.subgroup(800)Ce = Connection(Pe, P, 'ge',
weight=1.62*mV, sparseness=0.02)Ci = Connection(Pi, P, 'gi', weight=-
9*mV, sparseness=0.02)M = SpikeMonitor(P)run(1*second)raster_plot(M)show()
![Page 7: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/7.jpg)
My First BRIAN Model• First – we set up the model• Notice the units! These are important
in BRIAN, they help ensure everything you’re modeling makes sense
• Equations are written as strings, these are executed by the differential equation solver in BRIAN– Unit names/abbreviations are
reserved keywords in BRIAN• Create our NeuronGroup using this
model– Define number of neurons, model
used, threshold & reversal potentials• Questions:
– What is the reversal potential here?– How does this model differ from HH?
from brian import *eqs = '''dv/dt = (ge+gi-(v+49*mV))/(20*ms) :
voltdge/dt = -ge/(5*ms) : voltdgi/dt = -gi/(10*ms) : volt'''P = NeuronGroup(4000, eqs, threshold=-
50*mV, reset=-60*mV)P.v = -60*mVPe = P.subgroup(3200)Pi = P.subgroup(800)Ce = Connection(Pe, P, 'ge',
weight=1.62*mV, sparseness=0.02)Ci = Connection(Pi, P, 'gi', weight=-
9*mV, sparseness=0.02)M = SpikeMonitor(P)run(1*second)raster_plot(M)show()
![Page 8: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/8.jpg)
My First BRIAN Model• Initialize the neurons to
starting potentials• Connect them
– Here, constant weight, random connectivity from each subpopulation (excitatory & inhibitory) to all neurons
• Which state variable to propagate to in “target” neuron: ‘ge’ for excitatory synapses, ‘gi’ for inhibitory
from brian import *eqs = '''dv/dt = (ge+gi-(v+49*mV))/(20*ms) :
voltdge/dt = -ge/(5*ms) : voltdgi/dt = -gi/(10*ms) : volt'''P = NeuronGroup(4000, eqs, threshold=-
50*mV, reset=-60*mV)P.v = -60*mVPe = P.subgroup(3200)Pi = P.subgroup(800)Ce = Connection(Pe, P, 'ge',
weight=1.62*mV, sparseness=0.02)Ci = Connection(Pi, P, 'gi', weight=-
9*mV, sparseness=0.02)M = SpikeMonitor(P)run(1*second)raster_plot(M)show()
![Page 9: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/9.jpg)
My First BRIAN Model• Hook up your
electrophysiology equipment (here, measure spike times)– Can also record population
rate, ISI – search documentation for Monitor
– Only this info is saved from the simulation
• Run the simulation!• Plot
– Other plotting tools (hist_plot, Autocorrelograms, pylab, etc)
from brian import *eqs = '''dv/dt = (ge+gi-(v+49*mV))/(20*ms) :
voltdge/dt = -ge/(5*ms) : voltdgi/dt = -gi/(10*ms) : volt'''P = NeuronGroup(4000, eqs, threshold=-
50*mV, reset=-60*mV)P.v = -60*mVPe = P.subgroup(3200)Pi = P.subgroup(800)Ce = Connection(Pe, P, 'ge',
weight=1.62*mV, sparseness=0.02)Ci = Connection(Pi, P, 'gi', weight=-
9*mV, sparseness=0.02)M = SpikeMonitor(P)run(1*second)raster_plot(M)show()
![Page 10: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/10.jpg)
My First BRIAN Model
from brian import *eqs = '''dv/dt = (ge+gi-(v+49*mV))/(20*ms) : voltdge/dt = -ge/(5*ms) : voltdgi/dt = -gi/(10*ms) : volt'''P = NeuronGroup(4000, eqs, threshold=-50*mV, reset=-
60*mV)P.v = -60*mVPe = P.subgroup(3200)Pi = P.subgroup(800)Ce = Connection(Pe, P, 'ge', weight=1.62*mV,
sparseness=0.02)Ci = Connection(Pi, P, 'gi', weight=-9*mV,
sparseness=0.02)M = SpikeMonitor(P)R = PopulationRateMonitor(P,.01*second)H = ISIHistogramMonitor(P,bins =
[0*ms,5*ms,10*ms,15*ms,20*ms,25*ms,30*ms,35*ms,40*ms])
run(1*second)raster_plot(M)hist_plot(H)plt.figure()plt.plot(R.times,R.rate)plt.xlabel(‘time (s)’)plt.ylabel(‘firing rate (Hz)’)show()
![Page 11: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/11.jpg)
Exercise: Can you make HW 4’s networks in BRIAN?
• Try with both HH-style and integrate and fire models
• Use documentation at briansimulator.org for help (especially Connection and Equations)– Hint: search HodgkinHuxley
and Library Models• Let’s use simplified
exponential synapses– Time constant tau = 3 ms for
excitatory, 6 ms for inhibitory
Feedforward Inhibition
Feedback Inhibition
![Page 12: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/12.jpg)
Exercise: Can you make HW 4’s networks in BRIAN?
Feedforward Inhibition
Feedback Inhibition
![Page 13: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/13.jpg)
Spike timing dependent plasticity
![Page 14: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/14.jpg)
• Sets up network of Poisson spiking neurons, all projecting to a single neuron
• Each synapse implements an STDP rule
• By end of simulation, synapses become either strong or weak
stdp1.py
timeFirin
g ra
te (H
z)Fi
nal w
eigh
t
Final weight
Synapse numberCo
unt
![Page 15: BRIAN Simulator](https://reader036.vdocument.in/reader036/viewer/2022062502/56816753550346895ddc052a/html5/thumbnails/15.jpg)
stdp2.py
• Only difference is that we’ve changed how pre-before-post and post-before-pre synapses are weighted (and, in model code, stdp2 uses ExponentialSTDP, to make things easier)
timeFirin
g ra
te (H
z)Fi
nal w
eigh
t
Final weight
Synapse number
Coun
t