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
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))
In [42]:
scatter(results_X, results_Y)
xlabel('n_neurons')
ylabel('decay time')
show()
In [ ]: