User Tools

Site Tools


neurali:esempio_annarchy2

< annarchy

http://annarchy.readthedocs.io/en/latest/example/NeuralField.html

Richiede pyqtgraph

Esempio ANNarchy 1

Ogni strato (layer) che compone la rete viene detto population

  • popInput (20×20 neuroni)
  • popFocus (20×20 neuroni)

Ogni popolazione viene realizzata a partire da un modello di neurone diverso

  • inputNeuronModel
  • focusNeuroModel

Per iniziare

from ANNarchy import *

In questo esempio si ipotizza che la prima popolazione fornisca in input solo un rumore bianco uniforme alla seconda popolazione

Il modello di neurone per popInput prevederà valore positivo, di questa somma:

inputNeuronModel
baseline = 0.0
r = pos(baseline + Uniform(-0.5, 0.5))

Il modello di neurone per popFocus prevederà la somma pesata dei pesi sinpasi eccitatoriee che provengono dalla popInput e inibitorie che provengono da popFocus stesso

FocusNeuronModel
tau = 0
tau * dr/dt + r = sum(exc) + sum(inh) + Uniform(-0.5, 0.5) : min=0.0, max=1.0
  • exc sinapsi eccitatori
  • inh sinapsi inibitoria

Utilizzare i due modelli per creare due popolazioni

N = 20
popInput = Population(geometry = (N, N), neuron = inputNeuronModel)
popFocus = Population(geometry = (N, N), neuron = FocusNeuronModel)

Connessioni

Come per creare le popolazioni si è usato un modello di neurone, anche per creare le connessioni si deve usare un modello di sinapsi (e poi definire il tipo di connessione 1:1)

projff = Projection(pre=inp, post=focus, target='exc')
projff.connect_one_to_one(weights=1.0, delays = 20.0)

Sarebbe stato possibile usare un diverso modello di sinapsi per creare le connessioni, dopo target, ma si è usata la sinapsi predefinita… quale sarebbe quella predefinita?….

projlat = Projection(pre=focus, post=focus, target='inh')
projlat.connect_dog(amp_pos=0.2, sigma_pos=0.1, amp_neg=0.1, sigma_neg=0.7)

Compilazione e simulazione

Compilare vuole dire tradurre in C++ le formule

compile()
step()
simulate(1111.0)

la funzione “step” simula solo per 1 ms.

L'ultima riga simula per 1.1 secondi, ma non produce effetti perché mancano gli input

Gli input

Questo codice fornisce un input che si muove su una circonferenza, grazie ad un semplice loop infinito scritto in python

Contemporaneamente alla generazione di input, viene iterata anche la simulazione stessa usando step. Si noterà che un loop in Python fa pena e sarà necessario compilare…

angle = 0.0
x, y = np.meshgrid(np.linspace(0, 19, 20), np.linspace(0, 19, 20))

while True:
    angle += 1.0/5000.0
    # Compute the center of the bubble
    cx = 10.0 * ( 1.0 + 0.5 * np.cos(2.0 * np.pi * angle ) )
    cy = 10.0 * ( 1.0 + 0.5 * np.sin(2.0 * np.pi * angle ) )
    # Clamp the bubble into pop.baseline
    inp.baseline = (np.exp(-((x-cx)**2 + (y-cy)**2)/8.0))
    # Simulate for 1 ms
    step()
neurali/esempio_annarchy2.txt · Last modified: 2020/06/08 22:20 (external edit)