neurali:esempio_annarchy2
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
neurali:esempio_annarchy2 [2016/07/03 14:17] – profpro | neurali:esempio_annarchy2 [2020/06/08 22:20] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | < [[neurali: | ||
+ | |||
+ | http:// | ||
+ | |||
+ | > 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, | ||
+ | | ||
+ | Il modello di neurone per popFocus prevederà la somma pesata dei pesi sinpasi eccitatoriee che provengono dalla // | ||
+ | |||
+ | ==FocusNeuronModel== | ||
+ | |||
+ | tau = 0 | ||
+ | tau * dr/dt + r = sum(exc) + sum(inh) + Uniform(-0.5, | ||
+ | |||
+ | * 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, | ||
+ | projff.connect_one_to_one(weights=1.0, | ||
+ | |||
+ | Sarebbe stato possibile usare un diverso modello di sinapsi per creare le connessioni, | ||
+ | |||
+ | |||
+ | projlat = Projection(pre=focus, | ||
+ | projlat.connect_dog(amp_pos=0.2, | ||
+ | |||
+ | |||
+ | ====Compilazione e simulazione==== | ||
+ | Compilare vuole dire tradurre in C++ le formule | ||
+ | |||
+ | < | ||
+ | compile() | ||
+ | step() | ||
+ | simulate(1111.0) | ||
+ | </ | ||
+ | |||
+ | la funzione " | ||
+ | |||
+ | L' | ||
+ | ====Gli input==== | ||
+ | |||
+ | Questo codice fornisce un input che si muove su una circonferenza, | ||
+ | |||
+ | 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, | ||
+ | |||
+ | 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)/ | ||
+ | # Simulate for 1 ms | ||
+ | step() | ||
+ | </ | ||
neurali/esempio_annarchy2.txt · Last modified: 2020/06/08 22:20 by 127.0.0.1