Simulation and analysis of Spiking Neural Networks (SNNs)
Project description
🧠 Spiking Neural Network (SNN) – Reservoir Model
Questa classe implementa un modello di Spiking Neural Network (SNN) basato su neuroni LIF e struttura reservoir, con topologia small-world generata tramite il modello di Watts-Strogatz. Il flusso operativo tipico del modello è il seguente:
- Istanziare una rete SNN.
- Fornire una matrice binaria
input_spike_timescon shape(num_input_neurons, time_steps)dove1indica la stimolazione di un neurone di input a un certo tempo. - A ogni passo temporale, viene iniettata una corrente pari alla soglia nei neuroni di input attivati.
⚠️ I neuroni di input sono selezionati casualmente tra i primi neuroni e il loro numero è pari al numero di righe di
input_spike_times.
⚠️ I neuroni di output sono selezionati casualmente tra i neuroni nascosti, ma è anche possibile specificarli manualmente passando un vettore di indici conset_output_neurons().
⚙️ Parametri settabili (SimulationParams)
| Parametro | Tipo | Descrizione | Restrizioni e default |
|---|---|---|---|
num_neurons |
int |
Numero totale di neuroni nella rete (input + hidden + output) | ≥ 1. Richiesto solo se adjacency_matrix non è fornito |
num_output_neurons |
int |
Numero di neuroni di output selezionati automaticamente dal reservoir | ≥ 1. Richiesto solo se output_neurons non è fornito |
output_neurons |
np.ndarray[int] |
Indici dei neuroni di output scelti manualmente | Array 1D di interi in [0, num_neurons). Richiesto solo se num_output_neurons non è fornito |
membrane_threshold |
float |
Soglia di potenziale per generare uno spike | > 0 |
leak_coefficient |
float |
Fattore di decadimento del potenziale a ogni timestep | Intervallo [0, 1) |
refractory_period |
int |
Numero di passi temporali dopo uno spike durante i quali un neurone non può emettere un altro spike | ≥ 0 |
duration |
int |
Durata totale della simulazione in timestep | ≥ 1 se specificato. Default: lunghezza di input_spike_times |
input_spike_times |
np.ndarray[int] |
Matrice binaria (neuroni × tempo) con le stimolazioni in input | Array 2D di 0/1 |
membrane_potentials |
np.ndarray[float] |
Potenziali iniziali dei neuroni | Array 1D con valori in [0, membrane_threshold] |
adjacency_matrix |
scipy.sparse |
Matrice di adiacenza pesata della rete neurale | Matrice quadrata, pesi float. Richiesto solo se num_neurons non è fornito |
mean_weight |
float |
Peso medio delle connessioni sinaptiche | > 0. Richiesto solo se adjacency_matrix non è fornito |
weight_variance |
float |
Varianza dei pesi sinaptici | ≥ 0. Richiesto solo se adjacency_matrix non è fornito. Default: 0.1 * mean_weight |
current_amplitude |
float |
Ampiezza della corrente di input | Qualsiasi numero reale. Default: membrane_threshold |
small_world_graph_p |
float |
Probabilità di ri-connessione nella topologia small-world (Watts-Strogatz) | Intervallo [0, 1]. Richiesto solo se is_random_uniform è False |
small_world_graph_k |
int |
Ogni nodo inizialmente connesso a k vicini nella topologia small-world |
Intero pari ≥ 2. Richiesto solo se is_random_uniform è False |
connection_prob |
float |
Probabilità di connessione casuale | Intervallo [0, 1]. Richiesto solo se is_random_uniform è True |
is_random_uniform |
bool |
Se True, genera una rete casuale uniforme; altrimenti usa una topologia small-world |
Default: False. Esclusivo con small_world_graph_k e small_world_graph_p se True |
🧩 Metodi principali
▶️ Simulazione
-
simulate()
Esegue la simulazione per l’intera durata temporale e restituisce un array bidimensionale NumPy (np.ndarray):- matrice binaria di dimensione
[tempo × neuroni_output], in cui ogni riga rappresenta un timestep e ogni colonna un neurone di output. L’elemento è1se il neurone ha generato uno spike in quell’istante,0altrimenti.
- matrice binaria di dimensione
-
get_spike_time_lists_output()
Restituisce una lista di liste: ciascuna sottolista contiene gli istanti temporali (timestep) in cui ogni neurone di output ha generato uno spike. -
set_input_spike_times(input_spike_times)
Imposta la matrice binaria degli spike di input (forma[neuroni_input (0/1) × tempo]).
Aggiorna automaticamente la durata della simulazione (duration) se non già impostata. -
set_membrane_potentials(membrane_potentials)
Imposta i potenziali iniziali di membrana per ciascun neurone.
L'array deve essere 1D con lunghezza uguale al numero di neuroni (num_neurons). -
set_output_neurons(indices)
Imposta manualmente i neuroni di output specificando i loro indici (array di interi).
Verifica che gli indici siano validi (0 ≤ indice < num_neurons). -
reset()
Azzera lo stato interno della rete per eseguire una nuova simulazione.
Ripristina i potenziali di membrana iniziali, azzera spike matrix, spike count e timer refrattario, mantenendo inalterati tutti gli altri parametri (topologia, neuroni di output, ecc.).
📈 Feature extraction (dopo la simulazione)
Ogni metodo di estrazione delle feature restituisce un array unidimensionale NumPy (np.ndarray) contenente una feature per ciascun neurone di output.
-
extract_features_from_spikes()
Estrae tutte le principali feature dai neuroni di output (spike count, entropy, isi, etc.) -
get_spike_counts()
Totale spike per neurone. -
get_mean_spike_times(),get_first_spike_times(),get_last_spike_times()
Statistiche temporali sui momenti degli spike. -
get_mean_isi_per_neuron(),get_isi_variance_per_neuron()
Statistiche sugli intervalli tra spike (ISI). -
get_spike_entropy_per_neuron()
Entropia della distribuzione temporale degli spike. -
get_spike_rates()
Tasso medio di spike (spike/time). -
get_autocorrelation_first_lag()
Autocorrelazione al primo lag (indicatore di regolarità). -
get_burstiness()
Burstiness index (variazione nell’ISI). -
get_spike_symmetry()
Simmetria spike tra prima e seconda metà temporale. -
get_spike_histogram_moments()
Media, skewness e curtosi di un istogramma temporale degli spike.
🧪 Utility
-
calculate_mean_isi()
ISI medio su tutti i neuroni. -
reset_synaptic_weights(mean, std)
Rigenera tutti i pesi sinaptici esistenti da una distribuzione normale.
💾 Salvataggio/Caricamento
-
save_topology(),load_topology()
Salva/carica la matrice dei pesi sinaptici (adjacency_matrix) su disco nel formato.npz(matrice sparsa SciPy). -
save_membrane_potentials(),load_membrane_potentials()
Salva/carica i potenziali di membrana in formato.npy. -
save_output_neurons(),load_output_neurons()
Salva/carica gli indici dei neuroni di output in formato.npy. -
set_topology(sparse_matrix),get_topology()
Imposta o restituisce la matrice dei pesi sinaptici. (Nota:set_topology()non è esplicito nel codice ma può essere aggiunto facilmente.) -
set_membrane_potentials(array),get_membrane_potentials()
Imposta o restituisce i potenziali di membrana. -
set_output_neurons(indices),get_output_neurons()
Imposta o restituisce gli indici dei neuroni di output.
ℹ️ Nota: I metodi
load_topology(),load_output_neurons()eload_membrane_potentials()
sono disponibili anche come funzioni standalone, utili per caricare dati prima di istanziare l’oggettoSNN.
📁 File di output
| Funzione | Percorso di default |
|---|---|
| Topologia sinaptica | dati/snn_matrices.npz |
| Potenziali di membrana | dati/membrane_potentials.npy |
| Neuroni di output | dati/output_neurons.npy |
params = SimulationParams(
num_neurons=2000,
num_output_neurons=35,
input_spike_times=my_input,
leak_coefficient=1 / 10000,
refractory_period=2,
membrane_threshold=2.0,
is_random_uniform=False,
small_world_graph_p=0.2,
small_world_graph_k=int(0.10 * 2000 * 2),
mean_weight=0.00745167232 * 1.05
)
snn = SNN(params)
output = snn.simulate()
features = snn.extract_features_from_spikes()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snn_reservoir_py-0.1.0.tar.gz.
File metadata
- Download URL: snn_reservoir_py-0.1.0.tar.gz
- Upload date:
- Size: 24.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8258ec4389630723267c1a645de4084241b032d749b0eea4b6bb3f1f852ab59
|
|
| MD5 |
084078611aa0465c5c2fcf92b7d87132
|
|
| BLAKE2b-256 |
2c8a104052b9ed4b0712df1f9e06038857076593608067c988005875ac91d7b9
|
File details
Details for the file snn_reservoir_py-0.1.0-py3-none-any.whl.
File metadata
- Download URL: snn_reservoir_py-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a789e5afe05524dc0b21e570da90bcfa3445c22219e84c08795c2ba6a0d07df5
|
|
| MD5 |
2e971d0c3ac760193dd4a1ad14631461
|
|
| BLAKE2b-256 |
070d7663486b264937f98e6f233e3af06a4fd0dc2b11fd4e67b472e5dddce85a
|