Buonomano and Merzenich method of temporal discrimination of stimuli (BuoMerz
)¶
-
class
nmcog.spinnaker.discriminate.BuonomanoMerzenich.
BuoMerz
(intervals)¶ SpiNNaker (sPyNNaker) implementation of Temporal Information Processing.
Architecture:
- Stimulus is sent to a network representing Douglas and Martin’s (1989) cortical IV and III layers.
- Keeping with experimental observations the excitatory:inhibitory element is approximately 4:1.
- The constituent excitatory and inhibitory elements are randomly connected (Buonomano & Merzenich, 1997).
- The elements are based on Integrate-and-fire current units (Buonomano & Merzenich, 1995).
The connection is based on Buonomano & Merzenich 1997 (Fig 3, p135)
Populations excitatory (III) excitatory (IV) inhibitory (III) inhibitory (IV) excitatory (III) 18/200 = 0.09 12/200 = 0.06 excitatory (IV) 18/120 = 0.15 15/120 = 0.125 12/120 = 0.1 10/120 = 0.083 inhibitory (III) 8/50 = 0.16 6/50 = 0.12 inhibitory (IV) 6/30 = 0.2 4/30 = 0.133 Input 15/100 = 0.15 10/100 = 0.1 Note:
- The numerator correspond to the number of units (elements) within the recieving population.
- The denominator is the convergence number of presynaptic inputs for each unit.
- The decimal fraction are the probability values for the FixedProbabilityConnector function.
Comments on connection with output layer:
The excitatory (III) population connects to the output layer (1995) such that it proxies adaptation. The output layer populations recieves signal only at the end of the stimulus, i.e. during second pulse.
Due to limitations with SpNNaker8 here the connection is implemented such that it is made from the start of the simulation. However, only responses from the populations in the output layer at the end of the stimulus is returned.
References:
- Buonomano, D. V., & Merzenich, M. M. (1995). Temporal information transformed into a spatial code by a neural network with realistic properties. Science: 1028-1030. DOI: 10.1126/science.7863330
- Buonomano, D. V., & Merzenich, M. M. (1997). Temporal Information Processing: A Computational Role for Paired-Pulse Facilitation and Slow Inhibition. In J. W. Donahoe & V. Packard Dorsel (Eds.), Neural-Networks Models of Cognition (pp. 129-139). Netherlands, Amsterdam: Elsevier Science B. V.
-
get_results
()¶ Gets the recorded Neo objects. The only exception is for the output layer. Because of the reasons given above, for the output layer rather than a Neo object its SpikeTrain are returned. They are the responses at the end of the stimulus. To help visualizing them along with SpikeTrain from other layers a padding is also returned.
Returns data as a dictionary such that
Key Value “popIn” Neo object for input layer; contains SpikeTrain
andAnalogsignal
“ex4” Neo object for excitatory population LayerIV; contains SpikeTrain
andAnalogsignal
“inh4” Neo object for inhibitory population LayerIV; contains SpikeTrain
andAnalogsignal
“ex3” Neo object for excitatory population LayerIII; contains SpikeTrain
andAnalogsignal
“inh3” Neo object for inhibitory population LayerIII; contains SpikeTrain
andAnalogsignal
“out” Dictionary for output layer with populations under the keys “out”+stimuli, say “out80” “origin” float type representing start of the runtime “end” float type representing end of the runtime Note:
Each population in the output layer (value of “out”) is also a dictionary with keys “spiketrains” and “placeholder_axes”.
The value for “placeholder_axes” is a list containing two lists.
- The first represent t-axis from zero to start of second pulse of the stimuli.
- The second is an array of zeros whose size is the same as the first.
The value for “spiketrains” is the SpikeTrain for all the populations
-
plot_all_layers
(*intv)¶ Visualize spikes for populations in all layers; starting from below: input, excitatory in LayerIV, inhibitory in LayerIV, excitatory in LayerIII, inhibitory in LayerIII and lastly a population in the output layer at the top. y-axis are labelled with respective population and x-axis is the time in milliseconds.
-
plot_output_layer_timeseries
()¶ Visualize spikes from each population in the output layer as a time-series. y-axis represent each unit in a population and x-axis is time in milliseconds.
-
plot_output_layer_timeseries_vertical
()¶ Visualize spikes from each population in the output layer as a time-series. But unlike
plot_output_layer_timeseries()
this one plots one-above-eachother. Left y-axis represent units in a population and right y-axis the respective population.
-
plot_output_layer_vertical
()¶ Visualize spikes from each population in the output layer as one-above-eachother. Left y-axis represent the population and right y-axis the stimulus.
-
setup_inputchannel
(all_intervals)¶ Given a stimulus, i.e. interval values this function creates an input channel for it.
The input channel is such that
___|-interval/stimulus-|___ | | | | origin________| |___________________| |________end |---t0---|-T-| |-T-|---t0---| |------------------runtime--------------------|
Note that the above dual-pulse train represented in
self.input_channel
is used to create a spiking version using the private function__gen_input_src()
.In addition to the
self.input_channel
this function also sets the attributes:self.stim_origin
,self.stim_end
, andself.runtime
.Note:
- Interval value or the inter-pulse interval is the temporal information carried by the stimulus.
- The interval value represents the stimulus; if it is a list of values it is a list of stimuli.
It should be pointed out that
- Regardless of one or more stimulus it is here repesented in a list for the sake of not breaking previous code.
- So this is a practical choice and does not contradict the above mentioned assumptions.