In [29]:
import nengo
import numpy as np
import scipy.optimize

def accuracy(n_neurons=100, dimensions=25, low_rate=50, high_rate=100,
             synapse=0.1, time=2.0, dt=0.001, time_stim=0.1,
             show_plot=False,
             ):
    model = nengo.Network()
    with model:
        ens = nengo.Ensemble(n_neurons=n_neurons, dimensions=dimensions, 
                             max_rates=nengo.dists.Uniform(low_rate, high_rate))
        conn = nengo.Connection(ens, ens, synapse=synapse)
        
        stim = nengo.Node(lambda t: synapse / time_stim if t < time_stim else 0.0)
        nengo.Connection(stim, ens[0], synapse=None)
        probe = nengo.Probe(ens, synapse=synapse)
    
    sim = nengo.Simulator(model, dt=dt)
    sim.run(time, progress_bar=False)
    
    data = sim.data[probe][:,0]
    start_index = int(time_stim / dt)
    
    def curve(t, a, tau, b):
        return a * np.exp(-t / tau) + b
    fit = scipy.optimize.curve_fit(curve, sim.trange()[start_index:], data[start_index:])
    
    fit_a, fit_tau, fit_b = fit[0]
    
    if show_plot:
        plot(sim.trange(), data, label='neurons')
        plot(sim.trange(), curve(sim.trange(), *fit[0]), label='best fit')
        legend(loc='best')
    
    return fit_tau
    
tau = accuracy(show_plot=True)
print 'decay time:', tau


decay time: 0.239261515427

In [41]:
neurons = [10, 20, 50, 100, 200]
N = 10
results_X = []
results_Y = []

for i in range(N):
    for j, n_neurons in enumerate(neurons):
        print i, n_neurons
        results_X.append(n_neurons)
        results_Y.append(accuracy(n_neurons=n_neurons))


0 10
0 20
0 50
0 100
0 200
1 10
1 20
1 50
1 100
1 200
2 10
2 20
2 50
2 100
2 200
3 10
3 20
3 50
3 100
3 200
4 10
4 20
4 50
4 100
4 200
5 10
5 20
5 50
5 100
5 200
6 10
6 20
6 50
6 100
6 200
7 10
7 20
7 50
7 100
7 200
8 10
8 20
8 50
8 100
8 200
9 10
9 20
9 50
9 100
9 200

In [42]:
scatter(results_X, results_Y)
xlabel('n_neurons')
ylabel('decay time')
show()



In [ ]: