示例#1
0
# Setup state and spike monitor:
state_mon = StateMonitor(neuron, ['u'], record=True)
spike_mon = SpikeMonitor(neuron)

# Add neurons to the net:
net.add([neuron, state_mon, spike_mon])

# Set simulation time and run the model:
#defaultclock.dt = 0.01*ms
t_sim = 5000 * ms
net.run(t_sim)

# Store the values:
t_ = state_mon.t
u_ = state_mon.u
s_ = spike_mon.spike_trains()

# Calculate frequencies from the simulation:
f_experiment = []
for i in range(len(I_values)):
    f_experiment.append(1 / np.mean(np.diff(s_[i])))
f_experiment = np.array(f_experiment)
f_experiment = f_experiment
np.nan_to_num(f_experiment, copy=False)

# Calculate theoretical frequencies (Equation from task 1a):
f_theory = (-tau * np.log((u_thresh - u_rest - I_values * Rm) /
                          (u_reset - u_rest - I_values * Rm)) + t_ref)**-1
f_theory = f_theory / Hz
np.nan_to_num(f_theory, copy=False)
示例#2
0
        spikeinitial_t = array(spikemon.t)
        spikeinitial_out = array(spikemonout.i)
        spikeinitial_out_t = array(spikemonout.t)
        initial = 0

    for pattern in range(N2):

        P = error(spikemonout, sd[:, pattern], pattern, so[:, pattern])
        if P > 0.95:
            spikefinal_out = array(spikemonout.i)
            spikefinal_out_t = array(spikemonout.t)

        P_total[pattern, testindex] = P
        for i in range(N):

            spike_input = spikemon.spike_trains()
            si[:, pattern] = np.zeros(int(Tmax / dt) + 1)
            for ti in spike_input[i]:
                si[int(float(ti) * 1000 / 0.1), pattern] = 1

            spike_trains_out = spikemonout.spike_trains()
            so = np.zeros((int(Tmax / dt) + 1, N2))
            for ti in spike_trains_out[pattern]:
                so[int(float(ti) * 1000 / 0.1), pattern] = 1

            conv = convolve(A * si[:, pattern], Tw)
            #junky=lr*(sd[:,pattern]-so[:,pattern])
            junky2 = (sd[:, pattern] - so[:, pattern]) * conv
            dwdt[i, pattern] = sum(
                (1.0 / N) * (lr * (sd[:, pattern] - so[:, pattern]) +
                             (sd[:, pattern] - so[:, pattern]) * conv))
# plots
fig, axes = plt.subplots(3, figsize=(6, 8), sharex=True)

# raster plot
axes[0].plot(spike_monitor_exc.t / ms, spike_monitor_exc.i, ".k", ms=1)
axes[0].plot(spike_monitor_inh.t / ms,
             spike_monitor_inh.i + len(exc_neurons),
             ".k",
             ms=1)
axes[0].set_ylabel("Neuron No.")
axes[0].set_ylim(0, len(exc_neurons) + len(inh_neurons))

# network activity
net_activity = np.histogram(
    np.concatenate(
        list(spike_monitor_exc.spike_trains().values()) +
        list(spike_monitor_inh.spike_trains().values())) / ms,
    bins=np.arange(burnin, duration + burnin,
                   1))[0] / (len(exc_neurons) + len(inh_neurons))
axes[1].plot(np.arange(0, len(net_activity)) + burnin, net_activity, "k")
net_activity_min = 0
net_activity_max = 0.2
axes[1].set_ylim(net_activity_min, net_activity_max)
axes[1].set_ylabel("Net activity")

# network activity inset
axins = axes[1].inset_axes([0.05, 0.35, 0.2, 0.6])
axins.plot(np.arange(0, len(net_activity)) + burnin, net_activity, "k")
inset_min = 1220
inset_max = 1260
axins.set_xlim(inset_min + burnin, inset_max + burnin)
示例#4
0
        spikeinitial_out = array(spikemonout.i)
        spikeinitial_out_t = array(spikemonout.t)
        initial = 0

    for pattern in range(N2):

        P = error(spikemonout, sd[:, pattern], pattern, so[:, pattern])
        if P > 0.95:
            spikefinal_out = array(spikemonout.i)
            spikefinal_out_t = array(spikemonout.t)

        P_total[pattern, testindex] = P
        #input spikes into bit stream
        for i in range(NH):

            spike_hidden = spikemonhidden.spike_trains()
            sh = np.zeros((int(Tmax / dt) + 1, N2))
            for ti in spike_hidden[i]:
                sh[int(float(ti) * 1000 / 0.1), pattern] = 1

            spike_trains_out = spikemonout.spike_trains()
            so = np.zeros((int(Tmax / dt) + 1, N2))
            for ti in spike_trains_out[pattern]:
                so[int(float(ti) * 1000 / 0.1), pattern] = 1

            conv = convolve(A * sh[:, pattern], Tw)
            dwdt[i, pattern] = sum(
                (1.0 / NH) * (lr * (sd[:, pattern] - so[:, pattern]) +
                              (sd[:, pattern] - so[:, pattern]) * conv))
            S.w[i, pattern] = S.w[i, pattern] + dwdt[i, pattern]