Reference
SORN Network
Sorn
The following methods are available via SORN
- class sorn.sorn.Sorn[source]
This class wraps initialization of the network and its parameters
- eta_inhib = 0.001
- eta_ip = 0.01
- eta_stdp = 0.004
- static initialize_activity_vector(ne: int, ni: int)[source]
Initialize the activity vectors X and Y for excitatory and inhibitory neurons
- Parameters
ne (int) – Number of excitatory neurons
ni (int) – Number of inhibitory neurons
- Returns
Array of activity vectors of excitatory population y (array): Array of activity vectors of inhibitory population
- Return type
x (array)
- static initialize_threshold_matrix(te_min: float, te_max: float, ti_min: float, ti_max: float)[source]
Initialize the threshold for excitatory and inhibitory neurons
- Parameters
te_min (float) – Min threshold value for excitatory units
te_max (float) – Min threshold value for inhibitory units
ti_min (float) – Max threshold value for excitatory units
ti_max (float) – Max threshold value for inhibitory units
- Returns
Threshold values for excitatory units ti (array): Threshold values for inhibitory units
- Return type
te (array)
- static initialize_weight_matrix(network_type: str, synaptic_connection: str, self_connection: str, lambd_w: int)[source]
Wrapper for initializing the weight matrices for SORN
- Parameters
network_type (str) – Spare or Dense
synaptic_connection (str) – EE,EI,IE. Note that Spare connection is defined only for EE connections
self_connection (str) – True or False: Synaptic delay or time delay
lambd_w (int) – Average number of incoming and outgoing connections per neuron
- Returns
Array of connection strengths
- Return type
weight_matrix (array)
- lambda_ee = 20
- lambda_ei = 40
- lambda_ie = 100
- mu_ip = 0.1
- ne = 200
- network_type_ee = 'Sparse'
- network_type_ei = 'Sparse'
- network_type_ie = 'Dense'
- ni = 40
- nu = 10
- sigma_ip = 0.0
- te_max = 1.0
- te_min = 0.0
- ti_max = 0.5
- ti_min = 0.0
Plasticity
The following methods are available via Plasticity
- class sorn.sorn.Plasticity[source]
Instance of class Sorn. Inherits the variables and functions defined in class Sorn. It encapsulates all plasticity mechanisms mentioned in the article. Inherits all attributed from parent class Sorn
- static initialize_plasticity()[source]
Initialize weight matrices for plasticity phase based on network configuration
- Parameters
kwargs (self.__dict__) – All arguments are inherited from Sorn attributes
- Returns
Weight matrices WEI, WEE, WIE and threshold matrices Te, Ti and Initial state vectors X,Y
- Return type
tuple(array)
- ip(te: numpy.array, x: numpy.array)[source]
Intrinsic Plasiticity mechanism :param te: Threshold vector of excitatory units :type te: array :param x: Excitatory network activity :type x: array
- Returns
Threshold vector of excitatory units
- Return type
te (array)
- istdp(wei: numpy.array, x: numpy.array, y: numpy.array, cutoff_weights: list)[source]
Apply iSTDP rule, which regulates synaptic strength between the pre inhibitory(Xj) and post Excitatory(Xi) synaptic neurons :param wei: Synaptic strengths from inhibitory to excitatory :type wei: array :param x: Excitatory network activity :type x: array :param y: Inhibitory network activity :type y: array :param cutoff_weights: Maximum and minimum weight ranges :type cutoff_weights: list
- Returns
Synaptic strengths from inhibitory to excitatory
- Return type
wei (array)
- static ss(wee: numpy.array)[source]
Synaptic Scaling or Synaptic Normalization :param wee: Weight matrix :type wee: array
- Returns
Scaled Weight matrix
- Return type
wee (array)
- stdp(wee: numpy.array, x: numpy.array, cutoff_weights: list)[source]
Apply STDP rule : Regulates synaptic strength between the pre(Xj) and post(Xi) synaptic neurons :param wee: Weight matrix :type wee: array :param x: Excitatory network activity :type x: array :param cutoff_weights: Maximum and minimum weight ranges :type cutoff_weights: list
- Returns
Weight matrix
- Return type
wee (array)
- static structural_plasticity(wee: numpy.array)[source]
Add new connection value to the smallest weight between excitatory units randomly :param wee: Weight matrix :type wee: array
- Returns
Weight matrix
- Return type
wee (array)
MatrixCollection
The following methods are available via MatrixCollection
- class sorn.sorn.MatrixCollection(phase: str, state: Optional[dict] = None)[source]
Collect all matrices initialized and updated during simulation(plasiticity and training phases)
- Parameters
phase (str) – Training or Plasticity phase
state (dict) – Network activity, threshold and connection matrices
- Returns
MatrixCollection instance
- network_activity_t(excitatory_net: numpy.array, inhibitory_net: numpy.array, i: int)[source]
Network state at current time step
- Parameters
excitatory_net (array) – Excitatory network activity
inhibitory_net (array) – Inhibitory network activity
i (int) – Time step
- Returns
Updated Excitatory and Inhibitory states
- Return type
tuple(array)
- network_activity_t_1(x: numpy.array, y: numpy.array, i: int)[source]
Network activity at previous time step
- Parameters
x (array) – Excitatory network activity
y (array) – Inhibitory network activity
i (int) – Time step
- Returns
Previous Excitatory and Inhibitory states
- Return type
tuple(array)
- threshold_matrix(te: numpy.array, ti: numpy.array, i: int)[source]
Update threshold matrices
- Parameters
te (array) – Excitatory threshold
ti (array) – Inhibitory threshold
i (int) – Time step
- Returns
Threshold Matrices Te and Ti
- Return type
tuple(array)
- weight_matrix(wee: numpy.array, wei: numpy.array, wie: numpy.array, i: int)[source]
Update weight matrices
- Parameters
wee (array) – Excitatory-Excitatory weight matrix
wei (array) – Inhibitory-Excitatory weight matrix
wie (array) – Excitatory-Inhibitory weight matrix
i (int) – Time step
- Returns
Weight Matrices Wee, Wei, Wie
- Return type
tuple(array)
NetworkState
The following methods are available via NetworkState
- class sorn.sorn.NetworkState(v_t: numpy.array)[source]
The evolution of network states
- Parameters
v_t (array) – External input/stimuli
- Returns
NetworkState instance
- Return type
instance(object)
- excitatory_network_state(wee: numpy.array, wei: numpy.array, te: numpy.array, x: numpy.array, y: numpy.array, white_noise_e: numpy.array)[source]
Activity of Excitatory neurons in the network
- Parameters
wee (array) – Excitatory-Excitatory weight matrix
wei (array) – Inhibitory-Excitatory weight matrix
te (array) – Excitatory threshold
x (array) – Excitatory network activity
y (array) – Inhibitory network activity
white_noise_e (array) – Gaussian noise
- Returns
Current Excitatory network activity
- Return type
x(array)
- incoming_drive(weights: numpy.array, activity_vector: numpy.array)[source]
Excitatory Post synaptic potential towards neurons in the reservoir in the absence of external input
- Parameters
weights (array) – Synaptic strengths
activity_vector (list) – Acitivity of inhibitory or Excitatory neurons
- Returns
Excitatory Post synaptic potential towards neurons
- Return type
incoming(array)
- inhibitory_network_state(wie: numpy.array, ti: numpy.array, y: numpy.array, white_noise_i: numpy.array)[source]
Activity of Excitatory neurons in the network
- Parameters
wee (array) – Excitatory-Excitatory weight matrix
wie (array) – Excitatory-Inhibitory weight matrix
ti (array) – Inhibitory threshold
y (array) – Inhibitory network activity
white_noise_i (array) – Gaussian noise
- Returns
Current Inhibitory network activity
- Return type
y(array)
- recurrent_drive(wee: numpy.array, wei: numpy.array, te: numpy.array, x: numpy.array, y: numpy.array, white_noise_e: numpy.array)[source]
Network state due to recurrent drive received by the each unit at time t+1. Activity of Excitatory neurons without external stimuli
- Parameters
wee (array) – Excitatory-Excitatory weight matrix
wei (array) – Inhibitory-Excitatory weight matrix
te (array) – Excitatory threshold
x (array) – Excitatory network activity
y (array) – Inhibitory network activity
white_noise_e (array) – Gaussian noise
- Returns
Recurrent network state
- Return type
xt(array)
Simulator
The following methods are available via Simulator_
- class sorn.sorn.Simulator_[source]
Simulate SORN using external input/noise using the fresh or pretrained matrices
- Parameters
inputs (np.array, optional) – External stimuli. Defaults to None.
phase (str, optional) – Plasticity phase. Defaults to “plasticity”.
matrices (dict, optional) – Network states, connections and threshold matrices. Defaults to None.
timesteps (int, optional) – Total number of time steps to simulate the network. Defaults to 1.
noise (bool, optional) – If True, noise will be added. Defaults to True.
- Returns
Network states, connections and threshold matrices
X_all(array): Excitatory network activity collected during entire simulation steps
Y_all(array): Inhibitory network activity collected during entire simulation steps
R_all(array): Recurrent network activity collected during entire simulation steps
frac_pos_active_conn(list): Number of positive connection strengths in the network at each time step during simulation
- Return type
last_state(dict)
- run(inputs: Optional[numpy.array] = None, phase: str = 'plasticity', state: Optional[dict] = None, timesteps: Optional[int] = None, noise: bool = True, freeze: Optional[list] = None, callbacks: list = [], **kwargs)[source]
Simulation/Plasticity phase
- Parameters
inputs (np.array, optional) – External stimuli. Defaults to None.
phase (str, optional) – Plasticity phase. Defaults to “plasticity”
state (dict, optional) – Network states, connections and threshold matrices. Defaults to None.
timesteps (int, optional) – Total number of time steps to simulate the network. Defaults to 1.
noise (bool, optional) – If True, noise will be added. Defaults to True.
freeze (list, optional) – List of synaptic plasticity mechanisms which will be turned off during simulation. Defaults to None.
callbacks (list, optional) – Requested values from [“ExcitatoryActivation”, “InhibitoryActivation”, “RecurrentActivation”, “WEE”, “WEI”, “TE”, “EEConnectionCounts”] collected and returned from the simulate sorn object.
- Returns
Network states, connections and threshold matrices
callback_values(dict): Requexted network parameters and activations
- Return type
last_state(dict)
- update_callback_state(*args) None [source]
Trainer
The following methods are available via Trainer_
- class sorn.sorn.Trainer_[source]
Train the network with the fresh or pretrained network matrices and external stimuli
- run(inputs: Optional[numpy.array] = None, phase: str = 'training', state: Optional[dict] = None, timesteps: Optional[int] = None, noise: bool = True, freeze: Optional[list] = None, callbacks: list = [], **kwargs)[source]
Train the network with the fresh or pretrained network matrices and external stimuli
Args: inputs(np.array, optional): External stimuli. Defaults to None.
phase(str, optional): Training phase. Defaults to “training”.
state(dict, optional): Network states, connections and threshold matrices. Defaults to None.
timesteps(int, optional): Total number of time steps to simulate the network. Defaults to 1.
noise(bool, optional): If True, noise will be added. Defaults to True.
freeze(list, optional): List of synaptic plasticity mechanisms which will be turned off during simulation. Defaults to None.
max_workers(int, optional): Maximum workers for multhreading the plasticity steps
- Returns
Network states, connections and threshold matrices
X_all(array): Excitatory network activity collected during entire simulation steps
Y_all(array): Inhibitory network activity collected during entire simulation steps
R_all(array): Recurrent network activity collected during entire simulation steps
frac_pos_active_conn(list): Number of positive connection strengths in the network at each time step during simulation
- Return type
last_state(dict)
- update_callback_state(*args) None [source]
Utility Functions
Plotting
The following methods are available via Plotter
- class sorn.utils.Plotter[source]
Wrapper class to call plotting methods
- static correlation(corr: numpy.array, savefig: bool)[source]
Plot correlation between neurons
- Parameters
corr (array) – Correlation matrix
savefig (bool) – If true will save the plot at the current working directory
- Returns
Neuron Correlation plot
- Return type
matplotlib.pyplot
- static hamming_distance(hamming_dist: list, savefig: bool)[source]
Hamming distance between true netorks states and perturbed network states
- Parameters
hamming_dist (list) – Hamming distance values
savefig (bool) – If True, save the fig at current working directory
- Returns
Hamming distance between true and perturbed network states
- Return type
matplotlib.pyplot
- static hist_firing_rate_network(spike_train: numpy.array, bin_size: int, savefig: bool)[source]
Plot the histogram of firing rate (total number of neurons spike at each time step)
- Parameters
spike_train (array) – Array of spike trains
bin_size (int) – Histogram bin size
savefig (bool) – If True, plot will be saved in the cwd
- Returns
plot object
- static hist_incoming_conn(weights: numpy.array, bin_size: int, histtype: str, savefig: bool)[source]
Plot the histogram of number of presynaptic connections per neuron
- Parameters
weights (array) – Connection weights
bin_size (int) – Histogram bin size
histtype (str) – Same as histtype matplotlib
savefig (bool) – If True plot will be saved as png file in the cwd
- Returns
plot object
- Return type
plot (matplotlib.pyplot)
- static hist_outgoing_conn(weights: numpy.array, bin_size: int, histtype: str, savefig: bool)[source]
Plot the histogram of number of incoming connections per neuron
- Parameters
weights (array) – Connection weights
bin_size (int) – Histogram bin size
histtype (str) – Same as histtype matplotlib
savefig (bool) – If True plot will be saved as png file in the cwd
- Returns
plot object
- static isi_exponential_fit(spike_train: numpy.array, neuron: int, bin_size: int, savefig: bool)[source]
Plot Exponential fit on the inter-spike intervals during training or simulation phase
- Parameters
spike_train (array) – Array of spike trains
neuron (int) – Target neuron
bin_size (int) – Spike train will be splitted into bins of size bin_size
savefig (bool) – If True, plot will be saved in the cwd
- Returns
plot object
- static linear_lognormal_fit(weights: numpy.array, num_points: int, savefig: bool)[source]
Lognormal curve fit on connection weight distribution
- Parameters
weights (array) – Connection weights
num_points (int) – Number of points to be plotted in the x axis
savefig (bool) – If True, plot will be saved in the cwd
- Returns
plot object
- static network_connection_dynamics(connection_counts: numpy.array, savefig: bool)[source]
Plot number of positive connection in the excitatory pool
- Parameters
connection_counts (array) –
savefig (bool) –
- Returns
plot object
- static plot_network(corr: numpy.array, corr_thres: float, fig_name: Optional[str] = None)[source]
Network x graphical visualization of the network using the correlation matrix
- Parameters
corr (array) – Correlation between neurons
corr_thres (array) – Threshold to prune the connection. Smaller the threshold, higher the density of connections
fig_name (array, optional) – Name of the figure. Defaults to None.
- Returns
Plot instance
- Return type
matplotlib.pyplot
- static raster_plot(spike_train: numpy.array, savefig: bool)[source]
Raster plot of spike trains
- Parameters
spike_train (array) – Array of spike trains
with_firing_rates (bool) – If True, firing rate of the network will be plotted
savefig (bool) – If True, plot will be saved in the cwd
- Returns
plot object
- static scatter_plot(spike_train: numpy.array, savefig: bool)[source]
Scatter plot of spike trains
- Parameters
spike_train (list) – Array of spike trains
with_firing_rates (bool) – If True, firing rate of the network will be plotted
savefig (bool) – If True, plot will be saved in the cwd
- Returns
plot object
- static weight_distribution(weights: numpy.array, bin_size: int, savefig: bool)[source]
Plot the distribution of synaptic weights
- Parameters
weights (array) – Connection weights
bin_size (int) – Spike train will be splited into bins of size bin_size
savefig (bool) – If True, plot will be saved in the cwd
- Returns
plot object
Statistics and Analysis
The following methods are available via Statistics
- class sorn.utils.Statistics[source]
Wrapper class for statistical analysis methods
- static autocorr(firing_rates: list, t: int = 2)[source]
Score interpretation - scores near 1 imply a smoothly varying series - scores near 0 imply that there’s no overall linear relationship between a data point and the following one (that is, plot(x[-length(x)],x[-1]) won’t give a scatter plot with any apparent linearity)
scores near -1 suggest that the series is jagged in a particular way: if one point is above the mean, the next is likely to be below the mean by about the same amount, and vice versa.
- Parameters
firing_rates (list) – Firing rates of the network
t (int, optional) – Window size. Defaults to 2.
- Returns
Autocorrelation between neurons given their firing rates
- Return type
array
- static avg_corr_coeff(spike_train: numpy.array)[source]
Measure Average Pearson correlation coeffecient between neurons
- Parameters
spike_train (array) – Neural activity
- Returns
Average correlation coeffecient
- Return type
array
- static fanofactor(spike_train: numpy.array, neuron: int, window_size: int)[source]
Investigate whether neuronal spike generation is a poisson process
- Parameters
spike_train (np.array) – Spike train of neurons in the reservoir
neuron (int) – Target neuron in the pool
window_size (int) – Sliding window size for time step ranges to be considered for measuring the fanofactor
- Returns
Fano factor of the neuron spike train
- Return type
float
- static firing_rate_network(spike_train: numpy.array)[source]
Calculate number of neurons spikes at each time step.Firing rate of the network
- Parameters
spike_train (array) – Array of spike trains
- Returns
firing_rate
- Return type
int
- static firing_rate_neuron(spike_train: numpy.array, neuron: int, bin_size: int)[source]
Measure spike rate of given neuron during given time window
- Parameters
spike_train (array) – Array of spike trains
neuron (int) – Target neuron in the reservoir
bin_size (int) – Divide the spike trains into bins of size bin_size
- Returns
firing_rate
- Return type
int
- static hamming_distance(actual_spike_train: numpy.array, perturbed_spike_train: numpy.array)[source]
Hamming distance between true netorks states and perturbed network states
- Parameters
actual_spike_train (np.array) – True network’s states
perturbed_spike_train (np.array) – Perturbated network’s states
- Returns
Hamming distance between true and perturbed network states
- Return type
float
- static scale_dependent_smoothness_measure(firing_rates: list)[source]
Smoothem the firing rate depend on its scale. Smaller values corresponds to smoother series
- Parameters
firing_rates (list) – List of number of active neurons per time step
- Returns
Float value signifies the smoothness of the semantic changes in firing rates
- Return type
sd_diff (list)
- static scale_independent_smoothness_measure(firing_rates: list)[source]
Smoothem the firing rate independent of its scale. Smaller values corresponds to smoother series
- Parameters
firing_rates (list) – List of number of active neurons per time step
- Returns
Float value signifies the smoothness of the semantic changes in firing rates
- Return type
coeff_var (list)
- static spike_source_entropy(spike_train: numpy.array, num_neurons: int)[source]
Measure the uncertainty about the origin of spike from the network using entropy
- Parameters
spike_train (np.array) – Spike train of neurons
num_neurons (int) – Number of neurons in the reservoir
- Returns
Spike source entropy of the network
- Return type
int
- static spike_time_intervals(spike_train)[source]
Generate spike time intervals spike_trains
- Parameters
spike_train (array) – Network activity
- Returns
Inter spike intervals for each neuron in the reservoir
- Return type
list
- static spike_times(spike_train: numpy.array)[source]
Get the time instants at which neuron spikes
- Parameters
spike_train (array) – Spike trains of neurons
- Returns
Spike time of each neurons in the pool
- Return type
(array)