Auryn simulator

Simulator for spiking neural networks with synaptic plasticity

User Tools

Site Tools


tutorials:tutorial_1

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tutorials:tutorial_1 [2016/09/01 22:39] – [Visualizing the output] updates fig width zenketutorials:tutorial_1 [2017/04/24 19:16] (current) – Changes links to fzenke.net zenke
Line 1: Line 1:
-====== Tutorial 1 ======+====== Tutorial 1: Single neuron with Poisson input ======
  
 Here you will learn to simulate a single AdEx neuron and record spikes and membrane potentials. Here you will learn to simulate a single AdEx neuron and record spikes and membrane potentials.
Line 8: Line 8:
 <code c++> <code c++>
 int main(int ac, char* av[]) int main(int ac, char* av[])
 +{
      
 } }
Line 17: Line 18:
 using namespace auryn; using namespace auryn;
 int main(int ac, char* av[]) int main(int ac, char* av[])
 +{
   auryn_init( ac, av );   auryn_init( ac, av );
          
-  +  // the simulation code will go here
      
   auryn_free();   auryn_free();
 } }
 </code> </code>
-For convenience we also set our current namespace to Auryn's namespace.+For convenience we also set our current namespace to Auryn's namespace. You also might want to specify an output directory, a simulation name and maybe the name of the logfile. All these information can be passed as additional parameters to [[http://fzenke.net/auryn/doxygen/current/auryn__global_8cpp.html|auryn_init]]. This hasn't been done here for simplicity.
  
  
Line 31: Line 33:
 ===== Building the network model ===== ===== Building the network model =====
  
-To actually have you simulation do something we will now define the following network model:+To actually have your simulation do somethingwe want to build the following network model:
 {{ :tutorials:tutorial1_model.png |}} {{ :tutorials:tutorial1_model.png |}}
 in which a single AdEx neuron receives input from 100 Poisson neurons. in which a single AdEx neuron receives input from 100 Poisson neurons.
- +We will do this in three steps. First, we define all the populations of neurons which generate or receive spikes. Second, we will connect these classes with synaptic connections. Finally, we will define some special classes which will allow us to readout information from the simulation and store it to disk.
 ==== Adding the neural populations ==== ==== Adding the neural populations ====
  
Line 51: Line 52:
 AdExGroup * neuron = new AdExGroup(1); AdExGroup * neuron = new AdExGroup(1);
 </code> </code>
-Here the one sais that we want only one neuron in the group. For network simulations you will typically have more than one. You would write 2000 or whatever number of neurons you want.+Here the "1" sais that we want only one neuron in the group. For network simulations you will typically have more than one. You would write 2000 or whatever number of neurons you want.
  
 ==== Connecting neural populations ==== ==== Connecting neural populations ====
Line 71: Line 72:
  
  
-Now we are almost done setting up our model, but the simulation would run without any output.  +Now we are almost done setting up our model, but the simulation would still run without producing any output.  
-However, we would like to record the input and output spikes and the postsynaptic voltage.+Let's say we want to record the input and output spikes and the postsynaptic voltage.
 This is how we rig our [[manual:Monitor|Monitors]]. This is how we rig our [[manual:Monitor|Monitors]].
  
Line 82: Line 83:
 The last arguments for each of those is the filename where we want to write the output. The ''fn'' function provided by ''sys'' returns a file name and makes it parallel save (which will become important later). The last arguments for each of those is the filename where we want to write the output. The ''fn'' function provided by ''sys'' returns a file name and makes it parallel save (which will become important later).
  
-===== Simulate the model =====+One comment is in order: Writing output to disk is computationally expensive. It's often possible to speed up a simulation substantially by reducing the amount of data that's saved. Choose the variables you want to record carefully and you will be rewarded with code that runs much faster. 
 + 
 + 
 +===== Simulating the model =====
  
 Now all that's left to do is to tell the Auryn kernel how long we want to run our simulation. Let's say we want to run for 2 seconds. We write: Now all that's left to do is to tell the Auryn kernel how long we want to run our simulation. Let's say we want to run for 2 seconds. We write:
Line 88: Line 92:
 sys->run(2); sys->run(2);
 </code> </code>
- +where sys is the global pointer variable pointing to the Auryn kernel (which was initialized by ''auryn_init(ac,av)'' above).
 ===== Running the simulation ===== ===== Running the simulation =====
  
Line 105: Line 108:
 </code> </code>
  
-===== Visualizing the output =====+ 
 + 
 +====== Visualizing the output ======
  
 Each monitor has written its own output file. Let's take a look at the membrane potential, which is the file with the [[manual:mem]] extension. Each monitor has written its own output file. Let's take a look at the membrane potential, which is the file with the [[manual:mem]] extension.
  
-I like plotting things in [[gnuplot]], but you might have your own preferences such as Python matplotlib or something else. The [[manual:ras]] and [[manual:mem]] files are human readable ASCII files (you can just open them with an editor to see their structure) so most plotters should work.+I like plotting things in [[http://gnuplot.info/|gnuplot]], but you might have your own preferences such as Python matplotlib or something else. The [[manual:ras]] and [[manual:mem]] files are human readable ASCII files (you can just open them with an editor to see their structure) so most plotters should work.
  
 Here is my voltage trace as plotted by Gnuplot: Here is my voltage trace as plotted by Gnuplot:
Line 121: Line 126:
 https://github.com/fzenke/auryn/blob/master/examples/sim_tutorial1.cpp https://github.com/fzenke/auryn/blob/master/examples/sim_tutorial1.cpp
  
-===== Exercises =====+ 
 + 
 +In the [[Tutorial 2|next section]] you will learn how to simulate a recurrent network model instead of single neuron. 
 + 
 + 
 +====== Exercises ======
   * Play with different rate values for the Poisson processes   * Play with different rate values for the Poisson processes
   * Replace the AdEx by an Izhikevich neuron   * Replace the AdEx by an Izhikevich neuron
   * Add a second Poisson input population which provides inhibitory input to the output neuron   * Add a second Poisson input population which provides inhibitory input to the output neuron
   * Simulate 2 or more neurons and connect them with sparse connectivity (see [[manual:SparseConnection]]). Then visualize the different voltage traces (note that you will have to define a different [[manual:VoltageMonitor]] instance for each neuron you record from).   * Simulate 2 or more neurons and connect them with sparse connectivity (see [[manual:SparseConnection]]). Then visualize the different voltage traces (note that you will have to define a different [[manual:VoltageMonitor]] instance for each neuron you record from).
tutorials/tutorial_1.1472769545.txt.gz · Last modified: 2016/09/01 22:39 by zenke