User Tools

Site Tools


neurali:esempio_annarchy2

Differences

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

Link to this comparison view

Next revision
Previous revision
neurali:esempio_annarchy2 [2016/07/03 14:14]
profpro created
neurali:esempio_annarchy2 [2020/06/08 22:20] (current)
Line 1: Line 1:
 +< [[neurali: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 (20x20 neuroni)
 +  * popFocus (20x20 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
 +
 +<code>
 +N = 20
 +popInput = Population(geometry = (N, N), neuron = inputNeuronModel)
 +popFocus = Population(geometry = (N, N), neuron = FocusNeuronModel)
 +</code>
 +
 +
 +===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
 +
 +<code>
 +compile()
 +step()
 +simulate(1111.0)
 +</code>
 +
 +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...
 +
 +<code>
 +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()
 +</code>