def test_script(self):
        """
        test that tests the printing of v from a pre determined recording
        :return:
        """
        p.setup(timestep=1.0, min_delay=1.0, max_delay=144.0)
        n_neurons = 128 * 128  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_cond_exp", 256)

        cell_params_lif = {'cm': 0.25,
                           'i_offset': 0.0,
                           'tau_m': 20.0,
                           'tau_refrac': 2.0,
                           'tau_syn_E': 5.0,
                           'tau_syn_I': 5.0,
                           'v_reset': -70.0,
                           'v_rest': -65.0,
                           'v_thresh': -50.0,
                           'e_rev_E': 0.,
                           'e_rev_I': -80.
                           }

        populations = list()
        projections = list()

        weight_to_spike = 0.035
        delay = 17

        spikes = read_spikefile('test.spikes', n_neurons)
        print spikes
        spike_array = {'spike_times': spikes}

        populations.append(p.Population(
            n_neurons, p.SpikeSourceArray, spike_array, label='inputSpikes_1'))
        populations.append(p.Population(
            n_neurons, p.IF_cond_exp, cell_params_lif, label='pop_1'))
        projections.append(p.Projection(
            populations[0], populations[1], p.OneToOneConnector(
                weights=weight_to_spike, delays=delay)))
        populations[1].record()

        p.run(1000)

        spikes = populations[1].getSpikes(compatible_output=True)

        if spikes is not None:
            print spikes
            pylab.figure()
            pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
            pylab.xlabel('Time/ms')
            pylab.ylabel('spikes')
            pylab.title('spikes')
            pylab.show()
        else:
            print "No spikes received"

        p.end()
예제 #2
0
    def test_recording_numerious_element(self):
        p.setup(timestep=1.0, min_delay=1.0, max_delay=144.0)
        n_neurons = 20  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {
            'cm': 0.25,
            'i_offset': 0.0,
            'tau_m': 20.0,
            'tau_refrac': 2.0,
            'tau_syn_E': 5.0,
            'tau_syn_I': 5.0,
            'v_reset': -70.0,
            'v_rest': -65.0,
            'v_thresh': -50.0
        }

        populations = list()
        projections = list()

        boxed_array = numpy.zeros(shape=(0, 2))
        spike_array = list()
        for neuron_id in range(0, n_neurons):
            spike_array.append(list())
            for random_time in range(0, 20):
                random_time2 = random.randint(0, 5000)
                boxed_array = numpy.append(boxed_array,
                                           [[neuron_id, random_time2]],
                                           axis=0)
                spike_array[neuron_id].append(random_time)
        spike_array_params = {'spike_times': spike_array}
        populations.append(
            p.Population(n_neurons,
                         p.IF_curr_exp,
                         cell_params_lif,
                         label='pop_1'))
        populations.append(
            p.Population(n_neurons,
                         p.SpikeSourceArray,
                         spike_array_params,
                         label='inputSpikes_1'))

        projections.append(
            p.Projection(populations[1], populations[0],
                         p.OneToOneConnector()))

        populations[1].record()

        p.run(5000)

        spike_array_spikes = populations[1].getSpikes()
        boxed_array = boxed_array[numpy.lexsort(
            (boxed_array[:, 1], boxed_array[:, 0]))]
        numpy.testing.assert_array_equal(spike_array_spikes, boxed_array)
        p.end()
    def test_recording_numerious_element_over_limit(self):
        p.setup(timestep=1.0, min_delay=1.0, max_delay=144.0)
        n_neurons = 2000  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {'cm': 0.25,
                           'i_offset': 0.0,
                           'tau_m': 20.0,
                           'tau_refrac': 2.0,
                           'tau_syn_E': 5.0,
                           'tau_syn_I': 5.0,
                           'v_reset': -70.0,
                           'v_rest': -65.0,
                           'v_thresh': -50.0
                           }

        populations = list()
        projections = list()

        boxed_array = numpy.zeros(shape=(0, 2))
        spike_array = list()
        for neuron_id in range(0, n_neurons):
            spike_array.append(list())
            for random_time in range(0, 200000):
                random_time2 = random.randint(0, 50000)
                boxed_array = numpy.append(
                    boxed_array, [[neuron_id, random_time2]], axis=0)
                spike_array[neuron_id].append(random_time)
        spike_array_params = {'spike_times': spike_array}
        populations.append(p.Population(n_neurons, p.IF_curr_exp,
                                        cell_params_lif,
                           label='pop_1'))
        populations.append(p.Population(n_neurons, p.SpikeSourceArray,
                                        spike_array_params,
                           label='inputSpikes_1'))

        projections.append(p.Projection(populations[1], populations[0],
                           p.OneToOneConnector()))

        populations[1].record()

        p.run(50000)

        spike_array_spikes = populations[1].getSpikes()
        boxed_array = boxed_array[numpy.lexsort((boxed_array[:, 1],
                                                 boxed_array[:, 0]))]
        numpy.testing.assert_array_equal(spike_array_spikes, boxed_array)
        p.end()
예제 #4
0
    def test_recording_1_element(self):
        p.setup(timestep=1.0, min_delay=1.0, max_delay=144.0)
        n_neurons = 200  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {
            'cm': 0.25,
            'i_offset': 0.0,
            'tau_m': 20.0,
            'tau_refrac': 2.0,
            'tau_syn_E': 5.0,
            'tau_syn_I': 5.0,
            'v_reset': -70.0,
            'v_rest': -65.0,
            'v_thresh': -50.0
        }

        populations = list()
        projections = list()

        spike_array = {'spike_times': [[0]]}
        populations.append(
            p.Population(n_neurons,
                         p.IF_curr_exp,
                         cell_params_lif,
                         label='pop_1'))
        populations.append(
            p.Population(1,
                         p.SpikeSourceArray,
                         spike_array,
                         label='inputSpikes_1'))

        projections.append(
            p.Projection(populations[1], populations[0],
                         p.AllToAllConnector()))

        populations[1].record()

        p.run(5000)

        spike_array_spikes = populations[1].getSpikes()
        boxed_array = numpy.zeros(shape=(0, 2))
        boxed_array = numpy.append(boxed_array, [[0, 0]], axis=0)
        numpy.testing.assert_array_equal(spike_array_spikes, boxed_array)

        p.end()
예제 #5
0
    def test_get_weights(self):
        # Population parameters
        cell_params = {
            'cm': 0.2,  # nF
            'i_offset': 0.2,
            'tau_m': 20.0,
            'tau_refrac': 5.0,
            'tau_syn_E': 5.0,
            'tau_syn_I': 10.0,
            'v_reset': -60.0,
            'v_rest': -60.0,
            'v_thresh': -50.0
        }

        # Reduce number of neurons to simulate on each core
        sim.set_number_of_neurons_per_core(sim.IF_curr_exp, 10)

        # Build inhibitory plasticity  model
        stdp_model = sim.STDPMechanism(
            timing_dependence=sim.SpikePairRule(tau_plus=20.0,
                                                tau_minus=12.7,
                                                nearest=True),
            weight_dependence=sim.AdditiveWeightDependence(w_min=0.0,
                                                           w_max=1.0,
                                                           A_plus=0.05),
            mad=True)

        # Build plastic network
        plastic_ex_pop, plastic_ie_projection =\
            self.build_network(sim.SynapseDynamics(slow=stdp_model),
                               cell_params)

        # Run simulation
        sim.run(1000)

        # Get plastic spikes and save to disk
        plastic_spikes = plastic_ex_pop.getSpikes(compatible_output=True)
        #numpy.save("plastic_spikes.npy", plastic_spikes)

        plastic_weights = plastic_ie_projection.getWeights(format="array")
        #  mean_weight = numpy.average(plastic_weights)

        # End simulation on SpiNNaker
        sim.end()
예제 #6
0
    def test_recording_poisson_spikes_rate_0(self):

        p.setup(timestep=1.0, min_delay=1.0, max_delay=144.0)
        n_neurons = 256  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {
            'cm': 0.25,
            'i_offset': 0.0,
            'tau_m': 20.0,
            'tau_refrac': 2.0,
            'tau_syn_E': 5.0,
            'tau_syn_I': 5.0,
            'v_reset': -70.0,
            'v_rest': -65.0,
            'v_thresh': -50.0
        }

        populations = list()
        projections = list()

        populations.append(
            p.Population(n_neurons,
                         p.IF_curr_exp,
                         cell_params_lif,
                         label='pop_1'))
        populations.append(
            p.Population(n_neurons,
                         p.SpikeSourcePoisson, {'rate': 0},
                         label='inputSpikes_1'))

        projections.append(
            p.Projection(populations[1], populations[0],
                         p.OneToOneConnector()))

        populations[1].record()

        p.run(5000)

        spikes = populations[1].getSpikes()
        print spikes

        p.end()
    def test_get_weights(self):
        # Population parameters
        cell_params = {
            'cm': 0.2,  # nF
            'i_offset': 0.2,
            'tau_m': 20.0,
            'tau_refrac': 5.0,
            'tau_syn_E': 5.0,
            'tau_syn_I': 10.0,
            'v_reset': -60.0,
            'v_rest': -60.0,
            'v_thresh': -50.0
        }

        # Reduce number of neurons to simulate on each core
        sim.set_number_of_neurons_per_core(sim.IF_curr_exp, 100)

        # Build inhibitory plasticity  model
        stdp_model = sim.STDPMechanism(
            timing_dependence=sim.SpikePairRule(
                tau_plus=20.0, tau_minus=12.7, nearest=True),
            weight_dependence=sim.AdditiveWeightDependence(
                w_min=0.0, w_max=1.0, A_plus=0.05),
            mad=True
        )

        # Build plastic network
        plastic_ex_pop, plastic_ie_projection =\
            self.build_network(sim.SynapseDynamics(slow=stdp_model), 
                               cell_params)

        # Run simulation
        sim.run(10000)

        # Get plastic spikes and save to disk
        plastic_spikes = plastic_ex_pop.getSpikes(compatible_output=True)
        #numpy.save("plastic_spikes.npy", plastic_spikes)

        plastic_weights = plastic_ie_projection.getWeights(format="array")
        #  mean_weight = numpy.average(plastic_weights)

        # End simulation on SpiNNaker
        sim.end()
예제 #8
0
    def simulate(self, spinnaker, input_spike_times):

        # Cell parameters
        cell_params = {
            'tau_m': 20.0,
            'v_rest': -60.0,
            'v_reset': -60.0,
            'v_thresh': -40.0,
            'tau_syn_E': 2.0,
            'tau_syn_I': 2.0,
            'tau_refrac': 2.0,
            'cm': 0.25,
            'i_offset': 0.0,
        }

        rng = p.NumpyRNG(seed=28375)
        v_init = p.RandomDistribution('uniform', [-60, -40], rng)

        p.setup(timestep=1.0, min_delay=1.0, max_delay=10.0)

        pop = p.Population(1, p.IF_curr_exp, cell_params, label='population')
        pop.randomInit(v_init)
        pop.record()
        pop.record_v()

        noise = p.Population(1, p.SpikeSourceArray,
                             {"spike_times": input_spike_times})

        p.Projection(noise,
                     pop,
                     p.OneToOneConnector(weights=0.4, delays=1),
                     target='excitatory')

        # Simulate
        p.run(self.simtime)

        pop_voltages = pop.get_v(compatible_output=True)
        pop_spikes = pop.getSpikes(compatible_output=True)

        p.end()
        return pop_voltages, pop_spikes
예제 #9
0
def main():
    # setup timestep of simulation and minimum and maximum synaptic delays
    Frontend.setup(timestep=simulationTimestep, min_delay=minSynapseDelay, max_delay=maxSynapseDelay, threads=4)

    # create a spike sources
    retinaLeft = createSpikeSource("RetL")
    retinaRight = createSpikeSource("RetR")
    
    # create network and attach the spike sources 
    network, (liveConnectionNetwork, liveConnectionRetinas) = createCooperativeNetwork(retinaLeft=retinaLeft, retinaRight=retinaRight)

    # non-blocking run for time in milliseconds
    print "Simulation started..."
    Frontend.run(simulationTime)                                          
    print "Simulation ended."
    
    # plot results  
    #
#     plotExperiment(retinaLeft, retinaRight, network)
    # finalise program and simulation
    Frontend.end()
예제 #10
0
    def test_recording_1_element(self):
        p.setup(timestep=1.0, min_delay=1.0, max_delay=144.0)
        n_neurons = 200  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {'cm': 0.25,
                           'i_offset': 0.0,
                           'tau_m': 20.0,
                           'tau_refrac': 2.0,
                           'tau_syn_E': 5.0,
                           'tau_syn_I': 5.0,
                           'v_reset': -70.0,
                           'v_rest': -65.0,
                           'v_thresh': -50.0
                           }

        populations = list()
        projections = list()

        spike_array = {'spike_times': [[0]]}
        populations.append(p.Population(n_neurons, p.IF_curr_exp,
                                        cell_params_lif,
                           label='pop_1'))
        populations.append(p.Population(1, p.SpikeSourceArray, spike_array,
                           label='inputSpikes_1'))

        projections.append(p.Projection(populations[0], populations[0],
                           p.OneToOneConnector()))

        populations[1].record()

        p.run(5000)

        spike_array_spikes = populations[1].getSpikes()
        boxed_array = numpy.zeros(shape=(0, 2))
        boxed_array = numpy.append(boxed_array, [[0, 0]], axis=0)
        numpy.testing.assert_array_equal(spike_array_spikes, boxed_array)

        p.end()
    def simulate(self, spinnaker, input_spike_times):

        # Cell parameters
        cell_params = {
            'tau_m': 20.0,
            'v_rest': -60.0,
            'v_reset': -60.0,
            'v_thresh': -40.0,
            'tau_syn_E': 2.0,
            'tau_syn_I': 2.0,
            'tau_refrac': 2.0,
            'cm': 0.25,
            'i_offset': 0.0,
        }

        rng = p.NumpyRNG(seed=28375)
        v_init = p.RandomDistribution('uniform', [-60, -40], rng)

        p.setup(timestep=1.0, min_delay=1.0, max_delay=10.0)

        pop = p.Population(1, p.IF_curr_exp, cell_params, label='population')
        pop.randomInit(v_init)
        pop.record()
        pop.record_v()

        noise = p.Population(1, p.SpikeSourceArray,
                             {"spike_times": input_spike_times})

        p.Projection(noise, pop, p.OneToOneConnector(weights=0.4, delays=1),
                     target='excitatory')

        # Simulate
        p.run(self.simtime)

        pop_voltages = pop.get_v(compatible_output=True)
        pop_spikes = pop.getSpikes(compatible_output=True)

        p.end()
        return pop_voltages, pop_spikes
    def test_recording_poisson_spikes_rate_0(self):

        p.setup(timestep=1.0, min_delay=1.0, max_delay=144.0)
        n_neurons = 256  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {'cm': 0.25,
                           'i_offset': 0.0,
                           'tau_m': 20.0,
                           'tau_refrac': 2.0,
                           'tau_syn_E': 5.0,
                           'tau_syn_I': 5.0,
                           'v_reset': -70.0,
                           'v_rest': -65.0,
                           'v_thresh': -50.0
                           }

        populations = list()
        projections = list()

        populations.append(p.Population(n_neurons, p.IF_curr_exp,
                                        cell_params_lif,
                           label='pop_1'))
        populations.append(p.Population(n_neurons, p.SpikeSourcePoisson,
                                        {'rate': 0},
                           label='inputSpikes_1'))

        projections.append(p.Projection(populations[1], populations[0],
                           p.OneToOneConnector()))

        populations[1].record()

        p.run(5000)

        spikes = populations[1].getSpikes()
        print spikes

        p.end()
예제 #13
0
def main():
    # setup timestep of simulation and minimum and maximum synaptic delays
    Frontend.setup(timestep=simulationTimestep, min_delay=minSynapseDelay, max_delay=maxSynapseDelay, threads=4)

    # create a spike sources
    retinaLeft = createSpikeSource("RetL")
    retinaRight = createSpikeSource("RetR")
    
    # create network and attach the spike sources 
    network = createCooperativeNetwork(retinaLeft=retinaLeft, retinaRight=retinaRight)
    
    # run simulation for time in milliseconds
    print "Simulation started..."
    Frontend.run(simulationTime)   
    
#     print network[0][1].label
#     spikeList = network[0][1].getSpikes()
#     print spikeList
    # finalise program and simulation
    Frontend.end()
    print "Simulation ended."
    
    from NetworkVisualiser import logFile
    logFile.close()
예제 #14
0
import spynnaker.pyNN as sim

sim.setup(timestep=1.0, min_delay=1.0, max_delay=1.0)

simtime = 1000

pg_pop1 = sim.Population(2, sim.SpikeSourcePoisson,
                         {'rate': 10.0, 'start':0,
                          'duration':simtime}, label="pg_pop1")
pg_pop2 = sim.Population(2, sim.SpikeSourcePoisson,
                         {'rate': 10.0, 'start':0,
                          'duration':simtime}, label="pg_pop2")

pg_pop1.record()
pg_pop2.record()

sim.run(simtime)

spikes1 = pg_pop1.getSpikes(compatible_output=True)
spikes2 = pg_pop2.getSpikes(compatible_output=True)

print spikes1
print spikes2

sim.end()
spikeArray = {'spike_times': [[1050, 1060, 1500,1700, 1900, 2200]]}
populations.append(p.Population(nNeurons, p.IF_curr_exp, cell_params_lif,
                   label='pop_1'))
populations.append(p.Population(1, p.SpikeSourceArray, spikeArray,
                   label='inputSpikes_1'))

projections.append(p.Projection(populations[0], populations[0],
                   p.FromListConnector(loopConnections)))
projections.append(p.Projection(populations[1], populations[0],
                   p.FromListConnector(injectionConnection)))

populations[0].record_v()
populations[0].record_gsyn()
populations[0].record()

p.run(runtime)
p.run(runtime)
p.run(runtime)

v = populations[0].get_v(compatible_output=True)
gsyn = populations[0].get_gsyn(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)


if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
    pylab.title('spikes')
예제 #16
0
def run():

  Frontend.run(run_time)

  Frontend.end()
for i in range(0, n_pops):
    projections.append(p.Projection(populations[i], populations[i],
                                    p.FromListConnector(connections)))
    projections.append(p.Projection(populations[i], populations[((i + 1) % n_pops)],
                                    p.FromListConnector(pop_jump_connection)))

projections.append(p.Projection(populations[n_pops], populations[0],
                                p.FromListConnector(injectionConnection)))

#populations[0].record_v()
#populations[0].record_gsyn()

for pop_index in range(0, n_pops):
    populations[pop_index].record()

p.run(25000)

v = None
gsyn = None
spikes = None

#v = populations[0].get_v(compatible_output=True)
#gsyn = populations[0].get_gsyn(compatible_output=True)
total_spikes = None
total_spikes = populations[0].getSpikes(compatible_output=True)
for pop_index in range(1, n_pops):
    spikes = populations[pop_index].getSpikes(compatible_output=True)
    if spikes is not None:
        for spike in spikes:
            spike[0] += (nNeurons * pop_index)
        total_spikes = numpy.concatenate((total_spikes, spikes), axis=0)
예제 #18
0
                        label='inputSpikes_On')
post_pop = sim.Population(postpop_size,
                          sim.IF_curr_exp,
                          cell_params_lif,
                          label='post_1')

connectionsOn = sim.Projection(
    ON_pop, post_pop,
    sim.FromListConnector(convert_weights_to_list(weights_import, delay)))
#inhibitory between the neurons
connection_I = sim.Projection(post_pop,
                              post_pop,
                              sim.AllToAllConnector(weights=0.08, delays=1),
                              target='inhibitory')
post_pop.record()
sim.run(simtime)

# == Get the Simulated Data =================================================
post_spikes = post_pop.getSpikes(compatible_output=True)
sim.end()


def GetFiringPattern(spike, low, high):
    spikeT = np.transpose(spike)
    time_stamp = spikeT[1]
    target_index = ((time_stamp - low) >= 0) & ((time_stamp - high) < 0)
    firingTable = np.unique(spikeT[0][target_index])
    firingRate = len(np.unique(spikeT[0][target_index]))
    return firingRate, firingTable

예제 #19
0
def run_test(w_list, cell_para, spike_source_data):
    #Du.set_trace()
    pop_list = []
    p.setup(timestep=1.0, min_delay=1.0, max_delay=3.0)
    #input poisson layer
    input_size = w_list[0].shape[0]
    #print w_list[0].shape[0]
    #print w_list[1].shape[0]

    list = []
    for j in range(input_size):
        list.append(spike_source_data[j])
    pop_in = p.Population(input_size, p.SpikeSourceArray,
                          {'spike_times': list})

    pop_list.append(pop_in)

    #for j in range(input_size):
    #pop_in[j].spike_times = spike_source_data[j]

    #pop_in = p.Population(input_size, p.SpikeSourceArray, {'spike_times' : []})
    #for j in range(input_size):
    #    pop_in[j].spike_times = spike_source_data[j]
    #pop_list.append(pop_in)

    #count =0
    #print w_list[0].shape[0]
    for w in w_list:
        input_size = w.shape[0]
        #count = count+1
        #print count
        output_size = w.shape[1]
        #pos_w = np.copy(w)
        #pos_w[pos_w < 0] = 0
        #neg_w = np.copy(w)
        #neg_w[neg_w > 0] = 0
        conn_list_exci = []
        conn_list_inhi = []
        #k_size=in_size-out_size+1
        for x_ind in range(input_size):
            for y_ind in range(output_size):
                weights = w[x_ind][y_ind]
                #for i in range(w.shape[1]):
                if weights > 0:
                    conn_list_exci.append((x_ind, y_ind, weights, 1.))
                elif weights < 0:
                    conn_list_inhi.append((x_ind, y_ind, weights, 1.))
        #print output_size
        pop_out = p.Population(output_size, p.IF_curr_exp, cell_para)
        if len(conn_list_exci) > 0:
            p.Projection(pop_in,
                         pop_out,
                         p.FromListConnector(conn_list_exci),
                         target='excitatory')
        if len(conn_list_inhi) > 0:
            p.Projection(pop_in,
                         pop_out,
                         p.FromListConnector(conn_list_inhi),
                         target='inhibitory')
        #p.Projection(pop_in, pop_out, p.AllToAllConnector(weights = pos_w), target='excitatory')
        #p.Projection(pop_in, pop_out, p.AllToAllConnector(weights = neg_w), target='inhibitory')
        pop_list.append(pop_out)
        pop_in = pop_out

    pop_out.record()
    run_time = np.ceil(np.max(spike_source_data)[0] / 1000.) * 1000
    #print run_time
    p.run(run_time)
    spikes = pop_out.getSpikes(compatible_output=True)
    return spikes
    def test_get_voltage(self):
        """
        test that tests the getting of v from a pre determined recording
        :return:
        """
        p.setup(timestep=0.1, min_delay=1.0, max_delay=14.40)
        n_neurons = 200  # number of neurons in each population
        runtime = 500
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {'cm': 0.25,
                           'i_offset': 0.0,
                           'tau_m': 20.0,
                           'tau_refrac': 2.0,
                           'tau_syn_E': 5.0,
                           'tau_syn_I': 5.0,
                           'v_reset': -70.0,
                           'v_rest': -65.0,
                           'v_thresh': -50.0
                           }

        populations = list()
        projections = list()

        weight_to_spike = 2.0
        delay = 1.7

        loop_connections = list()
        for i in range(0, n_neurons):
            single_connection = (i, ((i + 1) % n_neurons), weight_to_spike,
                                 delay)
            loop_connections.append(single_connection)

        injection_connection = [(0, 0, weight_to_spike, 1)]
        spike_array = {'spike_times': [[0]]}
        populations.append(p.Population(n_neurons, p.IF_curr_exp, cell_params_lif,
                           label='pop_1'))
        populations.append(p.Population(1, p.SpikeSourceArray, spike_array,
                           label='inputSpikes_1'))

        projections.append(p.Projection(populations[0], populations[0],
                           p.FromListConnector(loop_connections)))
        projections.append(p.Projection(populations[1], populations[0],
                           p.FromListConnector(injection_connection)))

        populations[0].record_v()
        populations[0].record_gsyn()
        populations[0].record()

        p.run(runtime)

        v = populations[0].get_v(compatible_output=True)

        current_file_path = os.path.dirname(os.path.abspath(__file__))
        current_file_path = os.path.join(current_file_path, "v.data")
        pre_recorded_data = p.utility_calls.read_in_data_from_file(
            current_file_path, 0, n_neurons, 0, runtime)

        p.end()

        for spike_element, read_element in zip(v, pre_recorded_data):
            self.assertEqual(round(spike_element[0], 1),
                             round(read_element[0], 1))
            self.assertEqual(round(spike_element[1], 1),
                             round(read_element[1], 1))
            self.assertEqual(round(spike_element[2], 1),
                             round(read_element[2], 1))
    def test_inhibitory_connector_memory(self):
        p.setup(timestep=0.1, min_delay=1, max_delay=10.0)
        weight_to_spike = 10
        delay = 1
        cell_params_lif = {
            'cm': 0.25,
            'i_offset': 0.0,
            'tau_m': 20.0,
            'tau_refrac': 1.0,
            'tau_syn_E': 5.0,
            'tau_syn_I': 8.0,
            'v_reset': -70.0,
            'v_rest': -65.0,
            'v_thresh': -50.0
        }
        spike_array = {'spike_times': [0]}
        mem_access = {'spike_times': [10]}

        p_initial_spike = p.Population(1,
                                       p.SpikeSourceArray,
                                       spike_array,
                                       label="Initial spike pop")
        p_mem = p.Population(1, p.IF_curr_exp, cell_params_lif, label="Memory")
        p_out = p.Population(1, p.IF_curr_exp, cell_params_lif, label="Output")
        p_bridge = p.Population(1,
                                p.IF_curr_exp,
                                cell_params_lif,
                                label="Bridge")
        p_inhibitor = p.Population(1,
                                   p.IF_curr_exp,
                                   cell_params_lif,
                                   label="Inhibitor")
        p_access = p.Population(1,
                                p.SpikeSourceArray,
                                mem_access,
                                label="Access memory spike pop")

        p_out.record()
        p_mem.record()
        p_inhibitor.record()
        p_initial_spike.record()
        p_access.record()

        pr_initial_spike1 = p.Projection(
            p_initial_spike, p_mem,
            p.OneToOneConnector(weight_to_spike, delay))
        pr_initial_spike2 = p.Projection(
            p_initial_spike, p_inhibitor,
            p.OneToOneConnector(weight_to_spike, delay))

        pr_mem_access = p.Projection(p_access,
                                     p_inhibitor,
                                     p.OneToOneConnector(
                                         weight_to_spike, delay),
                                     target='inhibitory')

        pr_inhibitor_self = p.Projection(
            p_inhibitor, p_inhibitor,
            p.OneToOneConnector(weight_to_spike, delay))
        pr_inhibitor_bridge = p.Projection(p_inhibitor,
                                           p_bridge,
                                           p.OneToOneConnector(
                                               weight_to_spike, delay),
                                           target='inhibitory')

        pr_mem_self = p.Projection(p_mem, p_mem,
                                   p.OneToOneConnector(weight_to_spike, delay))
        pr_mem_bridge = p.Projection(
            p_mem, p_bridge, p.OneToOneConnector(weight_to_spike, delay))

        pr_bridge_output = p.Projection(
            p_bridge, p_out, p.OneToOneConnector(weight_to_spike, delay))

        pr_bridge_inhibitor = p.Projection(
            p_bridge, p_inhibitor, p.OneToOneConnector(weight_to_spike, delay))

        p_mem.record_v()
        p_mem.record_gsyn()
        p_mem.record()
        p.run(30)

        v = None
        gsyn = None
        spikes = None

        v = p_mem.get_v(compatible_output=True)
        gsyn = p_mem.get_gsyn(compatible_output=True)
        spikes = p_mem.getSpikes(compatible_output=True)

        if spikes != None:
            print spikes
            pylab.figure()
            pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
            pylab.xlabel('Time/ms')
            pylab.ylabel('spikes')
            pylab.title('spikes')
            pylab.show()
        else:
            print "No spikes received"

        # Make some graphs
        ticks = len(v) / 1

        if v != None:
            pylab.figure()
            pylab.xlabel('Time/ms')
            pylab.ylabel('v')
            pylab.title('v')
            for pos in range(0, 1, 20):
                v_for_neuron = v[pos * ticks:(pos + 1) * ticks]
                pylab.plot([i[1] for i in v_for_neuron],
                           [i[2] for i in v_for_neuron])
            pylab.show()

        if gsyn != None:
            pylab.figure()
            pylab.xlabel('Time/ms')
            pylab.ylabel('gsyn')
            pylab.title('gsyn')
            for pos in range(0, 1, 20):
                gsyn_for_neuron = gsyn[pos * ticks:(pos + 1) * ticks]
                pylab.plot([i[1] for i in gsyn_for_neuron],
                           [i[2] for i in gsyn_for_neuron])
            pylab.show()

        p.end()
예제 #22
0
sim.Projection(input_spikes, pop_lsm_exc,
               sim.FromListConnector(input_connections_exc))

input_connections_inh = [(i, translate_inh_idx[i], input_weight, 0)
                         for i in range(number_of_spikes)
                         if i in inh_neuron_idx]
sim.Projection(input_spikes, pop_lsm_inh,
               sim.FromListConnector(input_connections_inh))

pop_lsm_exc.record_v()
pop_lsm_exc.record()

pop_lsm_inh.record_v()
pop_lsm_inh.record()

sim.run(500 * simulation_timestep)

v_exc = pop_lsm_exc.get_v(compatible_output=True)
v_inh = pop_lsm_inh.get_v(compatible_output=True)

spikes_exc = pop_lsm_exc.getSpikes(compatible_output=True)
spikes_inh = pop_lsm_inh.getSpikes(compatible_output=True)

pylab.figure()
pylab.plot([i[1] for i in spikes_exc],
           [exc_neuron_idx[int(i[0])] for i in spikes_exc], "r.")
pylab.plot([i[1] for i in spikes_inh],
           [inh_neuron_idx[int(i[0])] for i in spikes_inh], "b.")
pylab.xlabel('Time/ms')
pylab.ylabel('spikes')
pylab.title('spikes')
    def __init__(self):

        # initial call to set up the front end (pynn requirement)
        Frontend.setup(timestep=1.0, min_delay=1.0, max_delay=144.0)

        use_c_visualiser = True
        use_spike_injector = True

        # neurons per population and the length of runtime in ms for the
        # simulation, as well as the expected weight each spike will contain
        self.n_neurons = 100

        # set up gui
        p = None
        if use_spike_injector:
            from multiprocessing import Process
            from multiprocessing import Event
            ready = Event()
            p = Process(target=GUI, args=[self.n_neurons, ready])
            p.start()
            ready.wait()

        # different runtimes for demostration purposes
        run_time = None
        if not use_c_visualiser and not use_spike_injector:
            run_time = 1000
        elif use_c_visualiser and not use_spike_injector:
            run_time = 10000
        elif use_c_visualiser and use_spike_injector:
            run_time = 100000
        elif not use_c_visualiser and use_spike_injector:
            run_time = 10000

        weight_to_spike = 2.0

        # neural parameters of the IF_curr model used to respond to injected
        # spikes.
        # (cell params for a synfire chain)
        cell_params_lif = {'cm': 0.25,
                           'i_offset': 0.0,
                           'tau_m': 20.0,
                           'tau_refrac': 2.0,
                           'tau_syn_E': 5.0,
                           'tau_syn_I': 5.0,
                           'v_reset': -70.0,
                           'v_rest': -65.0,
                           'v_thresh': -50.0
                           }

        ##################################
        # Parameters for the injector population.  This is the minimal set of
        # parameters required, which is for a set of spikes where the key is
        # not important.  Note that a virtual key *will* be assigned to the
        # population, and that spikes sent which do not match this virtual key
        # will be dropped; however, if spikes are sent using 16-bit keys, they
        # will automatically be made to match the virtual key.  The virtual
        # key assigned can be obtained from the database.
        ##################################
        cell_params_spike_injector = {

            # The port on which the spiNNaker machine should listen for
            # packets. Packets to be injected should be sent to this port on
            # the spiNNaker machine
            'port': 12345
        }

        ##################################
        # Parameters for the injector population.  Note that each injector
        # needs to be given a different port.  The virtual key is assigned
        # here, rather than being allocated later.  As with the above, spikes
        # injected need to match this key, and this will be done automatically
        # with 16-bit keys.
        ##################################
        cell_params_spike_injector_with_key = {

            # The port on which the spiNNaker machine should listen for
            # packets. Packets to be injected should be sent to this port on
            # the spiNNaker machine
            'port': 12346,

            # This is the base key to be used for the injection, which is used
            # to allow the keys to be routed around the spiNNaker machine.
            # This assignment means that 32-bit keys must have the high-order
            # 16-bit set to 0x7; This will automatically be prepended to
            # 16-bit keys.
            'virtual_key': 0x70000
        }

        # create synfire populations (if cur exp)
        pop_forward = Frontend.Population(
            self.n_neurons, Frontend.IF_curr_exp,
            cell_params_lif, label='pop_forward')
        pop_backward = Frontend.Population(
            self.n_neurons, Frontend.IF_curr_exp,
            cell_params_lif, label='pop_backward')

        # Create injection populations
        injector_forward = None
        injector_backward = None
        if use_spike_injector:
            injector_forward = Frontend.Population(
                self.n_neurons, ExternalDevices.SpikeInjector,
                cell_params_spike_injector_with_key,
                label='spike_injector_forward')
            injector_backward = Frontend.Population(
                self.n_neurons, ExternalDevices.SpikeInjector,
                cell_params_spike_injector, label='spike_injector_backward')
        else:
            spike_times = []
            for _ in range(0, self.n_neurons):
                spike_times.append([])
            spike_times[0] = [0]
            spike_times[20] = [(run_time / 100) * 20]
            spike_times[40] = [(run_time / 100) * 40]
            spike_times[60] = [(run_time / 100) * 60]
            spike_times[80] = [(run_time / 100) * 80]
            cell_params_forward = {'spike_times': spike_times}
            spike_times_backwards = []
            for _ in range(0, self.n_neurons):
                spike_times_backwards.append([])
            spike_times_backwards[0] = [(run_time / 100) * 80]
            spike_times_backwards[20] = [(run_time / 100) * 60]
            spike_times_backwards[40] = [(run_time / 100) * 40]
            spike_times_backwards[60] = [(run_time / 100) * 20]
            spike_times_backwards[80] = [0]
            cell_params_backward = {'spike_times': spike_times_backwards}
            injector_forward = Frontend.Population(
                self.n_neurons, Frontend.SpikeSourceArray,
                cell_params_forward,
                label='spike_injector_forward')
            injector_backward = Frontend.Population(
                self.n_neurons, Frontend.SpikeSourceArray,
                cell_params_backward, label='spike_injector_backward')

        # Create a connection from the injector into the populations
        Frontend.Projection(
            injector_forward, pop_forward,
            Frontend.OneToOneConnector(weights=weight_to_spike))
        Frontend.Projection(
            injector_backward, pop_backward,
            Frontend.OneToOneConnector(weights=weight_to_spike))

        # Synfire chain connections where each neuron is connected to its next
        # neuron
        # NOTE: there is no recurrent connection so that each chain stops once
        # it reaches the end
        loop_forward = list()
        loop_backward = list()
        for i in range(0, self.n_neurons - 1):
            loop_forward.append((i, (i + 1) %
                                 self.n_neurons, weight_to_spike, 3))
            loop_backward.append(((i + 1) %
                                  self.n_neurons, i, weight_to_spike, 3))
        Frontend.Projection(pop_forward, pop_forward,
                            Frontend.FromListConnector(loop_forward))
        Frontend.Projection(pop_backward, pop_backward,
                            Frontend.FromListConnector(loop_backward))

        # record spikes from the synfire chains so that we can read off valid
        # results in a safe way afterwards, and verify the behavior
        pop_forward.record()
        pop_backward.record()

        # Activate the sending of live spikes
        ExternalDevices.activate_live_output_for(
            pop_forward, database_notify_host="localhost",
            database_notify_port_num=19996)
        ExternalDevices.activate_live_output_for(
            pop_backward, database_notify_host="localhost",
            database_notify_port_num=19996)

        if not use_c_visualiser:
            # if not using the c visualiser, then a new spynnaker live spikes
            # connection is created to define that there are python code which
            # receives the outputted spikes.
            live_spikes_connection_receive = SpynnakerLiveSpikesConnection(
                receive_labels=["pop_forward", "pop_backward"],
                local_port=19999, send_labels=None)

            # Set up callbacks to occur when spikes are received
            live_spikes_connection_receive.add_receive_callback(
                "pop_forward", receive_spikes)
            live_spikes_connection_receive.add_receive_callback(
                "pop_backward", receive_spikes)
        # Run the simulation on spiNNaker
        Frontend.run(run_time)

        # Retrieve spikes from the synfire chain population
        spikes_forward = pop_forward.getSpikes()
        spikes_backward = pop_backward.getSpikes()

        # If there are spikes, plot using matplotlib
        if len(spikes_forward) != 0 or len(spikes_backward) != 0:
            pylab.figure()
            if len(spikes_forward) != 0:
                pylab.plot([i[1] for i in spikes_forward],
                           [i[0] for i in spikes_forward], "b.")
            if len(spikes_backward) != 0:
                pylab.plot([i[1] for i in spikes_backward],
                           [i[0] for i in spikes_backward], "r.")
            pylab.ylabel('neuron id')
            pylab.xlabel('Time/ms')
            pylab.title('spikes')
            pylab.show()
        else:
            print "No spikes received"

        # Clear data structures on spiNNaker to leave the machine in a clean
        # state for future executions
        Frontend.end()
        if use_spike_injector:
            p.join()
    def test_print_spikes(self):
        machine_time_step = 0.1

        p.setup(timestep=machine_time_step, min_delay=1.0, max_delay=14.40)
        n_neurons = 20  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)


        cell_params_lif = {'cm': 0.25,
                           'i_offset': 0.0,
                           'tau_m': 20.0,
                           'tau_refrac': 2.0,
                           'tau_syn_E': 5.0,
                           'tau_syn_I': 5.0,
                           'v_reset': -70.0,
                           'v_rest': -65.0,
                           'v_thresh': -50.0
                           }

        populations = list()
        projections = list()

        weight_to_spike = 2.0
        delay = 1.7

        loop_connections = list()
        for i in range(0, n_neurons):
            single_connection = (i, ((i + 1) % n_neurons), weight_to_spike,
                                 delay)
            loop_connections.append(single_connection)

        injection_connection = [(0, 0, weight_to_spike, 1)]
        spike_array = {'spike_times': [[0]]}
        populations.append(p.Population(n_neurons, p.IF_curr_exp,
                                        cell_params_lif,
                           label='pop_1'))
        populations.append(p.Population(1, p.SpikeSourceArray, spike_array,
                           label='inputSpikes_1'))

        projections.append(p.Projection(populations[0], populations[0],
                           p.FromListConnector(loop_connections)))
        projections.append(p.Projection(populations[1], populations[0],
                           p.FromListConnector(injection_connection)))

        populations[0].record_v()
        populations[0].record_gsyn()
        populations[0].record()

        p.run(500)

        spikes = populations[0].getSpikes(compatible_output=True)

        current_file_path = os.path.dirname(os.path.abspath(__file__))
        current_file_path = os.path.join(current_file_path, "spikes.data")
        spike_file = populations[0].printSpikes(current_file_path)

        spike_reader = p.utility_calls.read_spikes_from_file(
            current_file_path, min_atom=0, max_atom=n_neurons,
            min_time=0, max_time=500)
        read_in_spikes = spike_reader.spike_times
        p.end()
        os.remove(current_file_path)

        for spike_element, read_element in zip(spikes, read_in_spikes):
            self.assertEqual(round(spike_element[0], 1),
                             round(read_element[0], 1))
            self.assertEqual(round(spike_element[1], 1),
                             round(read_element[1], 1))
예제 #25
0
 def start_sim(self,sim_time):
     #simulation setup
     self.simtime = sim_time
     sim.setup(timestep=self.setup_cond["timestep"], min_delay=self.setup_cond["min_delay"], max_delay=self.setup_cond["max_delay"])
     #initialise the neuron population
     spikeArrayOn = {'spike_times': self.in_spike}
     pre_pop = sim.Population(self.pre_pop_size, sim.SpikeSourceArray,
                     spikeArrayOn, label='inputSpikes_On')
     post_pop= sim.Population(self.post_pop_size,sim.IF_curr_exp,
                      self.cell_params_lif, label='post_1')
     stdp_model = sim.STDPMechanism(timing_dependence=sim.SpikePairRule(tau_plus= self.stdp_param["tau_plus"],
                                                 tau_minus= self.stdp_param["tau_minus"],
                                                 nearest=True),
                                     weight_dependence=sim.MultiplicativeWeightDependence(w_min= self.stdp_param["w_min"],
                                                            w_max= self.stdp_param["w_max"],
                                                            A_plus= self.stdp_param["A_plus"],
                                                            A_minus= self.stdp_param["A_minus"]))
     #initialise connectiviity of neurons
     #exitatory connection between pre-synaptic and post-synaptic neuron population                                                              
     if(self.inhibitory_spike_mode):
         connectionsOn  = sim.Projection(pre_pop, post_pop, sim.AllToAllConnector(weights = self.I_syn_weight,delays=1,
                                         allow_self_connections=False),
                                         target='inhibitory')
     else: 
         if(self.STDP_mode):
             if(self.allsameweight):
                 connectionsOn = sim.Projection(pre_pop, post_pop, 
                                            sim.AllToAllConnector(weights = self.E_syn_weight,delays=1),
                                             synapse_dynamics=sim.SynapseDynamics(slow=stdp_model),target='excitatory')
             else:
                 connectionsOn = sim.Projection(pre_pop, post_pop, 
                                            sim.FromListConnector(self.conn_list),
                                             synapse_dynamics=sim.SynapseDynamics(slow=stdp_model),target='excitatory')
         else:
             if(self.allsameweight):
                 connectionsOn  = sim.Projection(pre_pop, post_pop, sim.AllToAllConnector(weights = self.E_syn_weight,delays=1),
                                                                      target='excitatory')
             else:
                 connectionsOn  = sim.Projection(pre_pop, post_pop, sim.FromListConnector(self.conn_list),
                                                                      target='excitatory')
             #sim.Projection.setWeights(self.E_syn_weight)
     
     #inhibitory between the neurons post-synaptic neuron population
     connection_I  = sim.Projection(post_pop, post_pop, sim.AllToAllConnector(weights = self.I_syn_weight,delays=1,
                                                          allow_self_connections=False),
                                                          target='inhibitory')
     pre_pop.record()                                                     
     post_pop.record()
     post_pop.record_v()
     sim.run(self.simtime)
     self.pre_spikes = pre_pop.getSpikes(compatible_output=True)
     self.post_spikes = post_pop.getSpikes(compatible_output=True)
     self.post_spikes_v = post_pop.get_v(compatible_output=True)
     self.trained_weights = connectionsOn.getWeights(format='array')
     sim.end()
     #print self.conn_list
     #print self.trained_weights
     '''scipy.io.savemat('trained_weight.mat',{'initial_weight':self.init_weights,
                                            'trained_weight':self.trained_weights
                                    })'''
     scipy.io.savemat('trained_weight0.mat',{'trained_weight':self.trained_weights
                                    })
    def test_get_spikes(self):
        """
        test for get spikes
        :return:
        """
        p.setup(timestep=0.1, min_delay=1.0, max_delay=14.40)
        n_neurons = 200  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {
            'cm': 0.25,
            'i_offset': 0.0,
            'tau_m': 20.0,
            'tau_refrac': 2.0,
            'tau_syn_E': 5.0,
            'tau_syn_I': 5.0,
            'v_reset': -70.0,
            'v_rest': -65.0,
            'v_thresh': -50.0
        }

        populations = list()
        projections = list()

        weight_to_spike = 2.0
        delay = 1.7

        loop_connections = list()
        for i in range(0, n_neurons):
            single_connection = (i, ((i + 1) % n_neurons), weight_to_spike,
                                 delay)
            loop_connections.append(single_connection)

        injection_connection = [(0, 0, weight_to_spike, 1)]
        spike_array = {'spike_times': [[0]]}
        populations.append(
            p.Population(n_neurons,
                         p.IF_curr_exp,
                         cell_params_lif,
                         label='pop_1'))
        populations.append(
            p.Population(1,
                         p.SpikeSourceArray,
                         spike_array,
                         label='inputSpikes_1'))

        projections.append(
            p.Projection(populations[0], populations[0],
                         p.FromListConnector(loop_connections)))
        projections.append(
            p.Projection(populations[1], populations[0],
                         p.FromListConnector(injection_connection)))

        populations[0].record_v()
        populations[0].record_gsyn()
        populations[0].record()

        p.run(500)

        spikes = populations[0].getSpikes(compatible_output=True)
        pre_recorded_spikes = [[0, 3.5], [1, 6.7], [2, 9.9], [3, 13.1],
                               [4, 16.3], [5, 19.5], [6, 22.7], [7, 25.9],
                               [8, 29.1], [9, 32.3], [10, 35.5], [11, 38.7],
                               [12, 41.9], [13, 45.1], [14, 48.3], [15, 51.5],
                               [16, 54.7], [17, 57.9], [18, 61.1], [19, 64.3],
                               [20, 67.5], [21, 70.7], [22, 73.9], [23, 77.1],
                               [24, 80.3], [25, 83.5], [26, 86.7], [27, 89.9],
                               [28, 93.1], [29, 96.3], [30, 99.5], [31, 102.7],
                               [32, 105.9], [33, 109.1], [34, 112.3],
                               [35, 115.5], [36, 118.7], [37, 121.9],
                               [38, 125.1], [39, 128.3], [40, 131.5],
                               [41, 134.7], [42, 137.9], [43, 141.1],
                               [44, 144.3], [45, 147.5], [46, 150.7],
                               [47, 153.9], [48, 157.1], [49, 160.3],
                               [50, 163.5], [51, 166.7], [52, 169.9],
                               [53, 173.1], [54, 176.3], [55, 179.5],
                               [56, 182.7], [57, 185.9], [58, 189.1],
                               [59, 192.3], [60, 195.5]]

        p.end()

        for spike_element, read_element in zip(spikes, pre_recorded_spikes):
            self.assertEqual(round(spike_element[0], 1),
                             round(read_element[0], 1))
            self.assertEqual(round(spike_element[1], 1),
                             round(read_element[1], 1))
    for neuron_id in neuron_ids:
        print "Received spike at time", time, "from", label, "-", neuron_id
# Set up the live connection for sending spikes
live_spikes_connection = SpynnakerLiveSpikesConnection(
    receive_labels=None, local_port=19999, send_labels=["spike_injector_forward"])
# Set up callbacks to occur at the start of simulation
live_spikes_connection.add_start_callback("spike_injector_forward", send_input_forward)
# if not using the c visualiser, then a new spynnaker live spikes connection
# is created to define that there are python code which receives the
# outputted spikes.
live_spikes_connection = SpynnakerLiveSpikesConnection(
    receive_labels=["pop_forward"], local_port=19996, send_labels=None)
# Set up callbacks to occur when spikes are received
live_spikes_connection.add_receive_callback("pop_forward", receive_spikes)
# Run the simulation on spiNNaker
Frontend.run(run_time)
# Retrieve spikes from the synfire chain population
spikes_forward = pop_forward.getSpikes()
# If there are spikes, plot using matplotlib
if len(spikes_forward) != 0:
    pylab.figure()
    if len(spikes_forward) != 0:
        pylab.plot([i[1] for i in spikes_forward],
                   [i[0] for i in spikes_forward], "b.")
    pylab.ylabel('neuron id')
    pylab.xlabel('Time/ms')
    pylab.title('spikes')
    pylab.show()
else:
    print "No spikes received"
# Clear data structures on spiNNaker to leave the machine in a clean state for
예제 #28
0
# Plastic Connections between pre_pop and post_pop
stdp_model = p.STDPMechanism(
  timing_dependence = p.SpikePairRule(tau_plus = 20.0, tau_minus = 50.0),
  weight_dependence = p.AdditiveWeightDependence(w_min = 0, w_max = 1, A_plus=0.02, A_minus = 0.02)
)

p.Projection(pre_pop, post_pop, p.OneToOneConnector(),
  synapse_dynamics = p.SynapseDynamics(slow= stdp_model)
)

# Record spikes
pre_pop.record()
post_pop.record()

# Run simulation
p.run(sim_time)

# Dump data
#pre_pop.printSpikes("results/stdp_pre.spikes")
#post_pop.printSpikes("results/stdp_post.spikes")
#pre_pop.print_v("results/stdp_pre.v")
#post_pop.print_v("results/stdp_post.v")

def plot_spikes(spikes, title):
  if spikes != None:
      pylab.figure()
      pylab.xlim((0, sim_time))
      pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".") 
      pylab.xlabel('Time/ms')
      pylab.ylabel('spikes')
      pylab.title(title)
예제 #29
0
                     p.FromListConnector(connections)))
    projections.append(
        p.Projection(populations[i], populations[((i + 1) % n_pops)],
                     p.FromListConnector(pop_jump_connection)))

projections.append(
    p.Projection(populations[n_pops], populations[0],
                 p.FromListConnector(injectionConnection)))

#populations[0].record_v()
#populations[0].record_gsyn()

for pop_index in range(0, n_pops):
    populations[pop_index].record()

p.run(25000)

v = None
gsyn = None
spikes = None

#v = populations[0].get_v(compatible_output=True)
#gsyn = populations[0].get_gsyn(compatible_output=True)
total_spikes = None
total_spikes = populations[0].getSpikes(compatible_output=True)
for pop_index in range(1, n_pops):
    spikes = populations[pop_index].getSpikes(compatible_output=True)
    if spikes is not None:
        for spike in spikes:
            spike[0] += (nNeurons * pop_index)
        total_spikes = numpy.concatenate((total_spikes, spikes), axis=0)
    p.Population(nNeurons, p.IF_curr_exp, cell_params_lif, label='pop_1'))
populations.append(
    p.Population(1, p.SpikeSourceArray, spikeArray, label='inputSpikes_1'))

projections.append(
    p.Projection(populations[0], populations[0],
                 p.FromListConnector(loopConnections)))
projections.append(
    p.Projection(populations[1], populations[0],
                 p.FromListConnector(injectionConnection)))

populations[0].record_v()
populations[0].record_gsyn()
populations[0].record()

p.run(runtime)
p.run(runtime)
p.run(runtime)

v = populations[0].get_v(compatible_output=True)
gsyn = populations[0].get_gsyn(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
    pylab.title('spikes')
    pylab.show()
예제 #31
0
        # Plastic Connection between pre_pop and post_pop
        # Sjostrom visual cortex min-triplet params
        stdp_model = sim.STDPMechanism(
            timing_dependence = sim.PfisterSpikeTripletRule(tau_plus = 16.8, tau_minus = 33.7, tau_x = 101, tau_y = 114),
            weight_dependence = sim.AdditiveWeightDependence(w_min = 0.0, w_max = 1.0, A_plus = param_scale * 0.0, A_minus = param_scale * 7.1e-3, A3_plus = param_scale * 6.5e-3, A3_minus = param_scale * 0.0)
        )

        projections[-1].append(sim.Projection(pre_pop, post_pop, sim.OneToOneConnector(weights = start_w),
            synapse_dynamics = sim.SynapseDynamics(slow = stdp_model)
        ))

print("Simulating for %us" % (sim_time / 1000))

# Run simulation
sim.run(sim_time)

# Read weights from each parameter value being tested
weights = []
for projection_delta_t in projections:
    weights.append([p.getWeights()[0] for p in projection_delta_t])

# End simulation on SpiNNaker
sim.end(stop_on_board=True)

#-------------------------------------------------------------------
# Plotting
#-------------------------------------------------------------------
# Sjostrom et al. (2001) experimental data
data_w = [
    [ -0.29, -0.41, -0.34, 0.56, 0.75 ],
    sim.Projection(ex_pop, ex_pop, sim.FixedProbabilityConnector(0.02, weights=0.03), target='excitatory')

    # Make inhibitory->inhibitory projections
    sim.Projection(in_pop, in_pop, sim.FixedProbabilityConnector(0.02, weights=-0.3), target='inhibitory')
    
    # Make inhibitory->excitatory projections
    ie_projection = sim.Projection(in_pop, ex_pop, sim.FixedProbabilityConnector(0.02, weights=0), target='inhibitory', synapse_dynamics = dynamics)

    return ex_pop, ie_projection


# Build static network
static_ex_pop,_ = build_network(None)

# Run for 1s
sim.run(1000)

# Get static spikes and save to disk
static_spikes = static_ex_pop.getSpikes(compatible_output=True)

# Build inhibitory plasticity  model
stdp_model = sim.STDPMechanism(
    timing_dependence = q.Vogels2011Rule(alpha=0.12,tau=20.0),
    weight_dependence = sim.AdditiveWeightDependence(w_min=0.0, w_max=1.0, A_plus=0.05),
    mad=True
)

# Build plastic network
plastic_ex_pop, plastic_ie_projection = build_network(sim.SynapseDynamics(slow = stdp_model))

# Run simulation
예제 #33
0
                A_plus=param_scale * 0.0,
                A_minus=param_scale * 7.1e-3,
                A3_plus=param_scale * 6.5e-3,
                A3_minus=param_scale * 0.0))

        projections[-1].append(
            sim.Projection(
                pre_pop,
                post_pop,
                sim.OneToOneConnector(weights=start_w),
                synapse_dynamics=sim.SynapseDynamics(slow=stdp_model)))

print("Simulating for %us" % (sim_time / 1000))

# Run simulation
sim.run(sim_time)

# Read weights from each parameter value being tested
weights = []
for projection_delta_t in projections:
    weights.append([p.getWeights()[0] for p in projection_delta_t])

# End simulation on SpiNNaker
sim.end(stop_on_board=True)

#-------------------------------------------------------------------
# Plotting
#-------------------------------------------------------------------
# Sjostrom et al. (2001) experimental data
data_w = [[-0.29, -0.41, -0.34, 0.56, 0.75], [-0.04, 0.14, 0.29, 0.53, 0.56]]
data_e = [[0.08, 0.11, 0.1, 0.32, 0.19], [0.05, 0.1, 0.14, 0.11, 0.26]]
예제 #34
0
pop_forward.record()
pop_backward.record()

# Activate the sending of live spikes
ExternalDevices.activate_live_output_for(pop_forward,
                                         database_notify_host="localhost",
                                         database_notify_port_num=19997)
ExternalDevices.activate_live_output_for(pop_backward,
                                         database_notify_host="localhost",
                                         database_notify_port_num=19997)

# Create a condition to avoid overlapping prints
print_condition = Condition()

# Run the simulation on spiNNaker
Frontend.run(run_time)

# Retrieve spikes from the synfire chain population
spikes_forward = pop_forward.getSpikes()
spikes_backward = pop_backward.getSpikes()

# If there are spikes, plot using matplotlib
if len(spikes_forward) != 0 or len(spikes_backward) != 0:
    pylab.figure()
    if len(spikes_forward) != 0:
        pylab.plot([i[1] for i in spikes_forward],
                   [i[0] for i in spikes_forward], "b.")
    if len(spikes_backward) != 0:
        pylab.plot([i[1] for i in spikes_backward],
                   [i[0] for i in spikes_backward], "r.")
    pylab.ylabel('neuron id')
예제 #35
0
populations.append(
    p.Population(nNeurons, p.IF_curr_exp, cell_params_lif, label='pop_1'))
populations.append(
    p.Population(1, p.SpikeSourceArray, spikeArray, label='inputSpikes_1'))

projections.append(
    p.Projection(populations[0], populations[0],
                 p.AllToAllConnector(weights=weight_to_spike, delays=delay)))
projections.append(
    p.Projection(populations[1], populations[0],
                 p.FromListConnector([(0, 0, 4, injection_delay)])))

populations[0].record_v()
populations[0].record()

p.run(90)

v = None
gsyn = None
spikes = None

v = populations[0].get_v(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)

if spikes != None:
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
    pylab.title('spikes')
    pylab.show()
    def test_get_spikes(self):
        """
        test for get spikes
        :return:
        """
        p.setup(timestep=1, min_delay=1.0, max_delay=14.40)
        n_neurons = 200  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {'cm': 0.25,
                           'i_offset': 0.0,
                           'tau_m': 20.0,
                           'tau_refrac': 2.0,
                           'tau_syn_E': 5.0,
                           'tau_syn_I': 5.0,
                           'v_reset': -70.0,
                           'v_rest': -65.0,
                           'v_thresh': -50.0
                           }

        populations = list()
        projections = list()

        weight_to_spike = 2.0
        delay = 1.7

        loop_connections = list()
        for i in range(0, n_neurons):
            single_connection = (i, ((i + 1) % n_neurons), weight_to_spike, delay)
            loop_connections.append(single_connection)

        injection_connection = [(0, 0, weight_to_spike, 1)]
        spike_array = {'spike_times': [[0]]}
        populations.append(p.Population(n_neurons, p.IF_curr_exp, cell_params_lif,
                           label='pop_1'))
        populations.append(p.Population(1, p.SpikeSourceArray, spike_array,
                           label='inputSpikes_1'))

        projections.append(p.Projection(populations[0], populations[0],
                           p.FromListConnector(loop_connections)))
        projections.append(p.Projection(populations[1], populations[0],
                           p.FromListConnector(injection_connection)))

        populations[0].record_v()
        populations[0].record_gsyn()
        populations[0].record()

        p.run(500)

        spikes = populations[0].getSpikes(compatible_output=True)
        pre_recorded_spikes = [
            [0, 3.5], [1, 6.7], [2, 9.9], [3, 13.1], [4, 16.3],
            [5, 19.5], [6, 22.7], [7, 25.9], [8, 29.1],
            [9, 32.3], [10, 35.5], [11, 38.7], [12, 41.9],
            [13, 45.1], [14, 48.3], [15, 51.5], [16, 54.7],
            [17, 57.9], [18, 61.1], [19, 64.3], [20, 67.5],
            [21, 70.7], [22, 73.9], [23, 77.1], [24, 80.3],
            [25, 83.5], [26, 86.7], [27, 89.9], [28, 93.1],
            [29, 96.3], [30, 99.5], [31, 102.7], [32, 105.9],
            [33, 109.1], [34, 112.3], [35, 115.5], [36, 118.7],
            [37, 121.9], [38, 125.1], [39, 128.3], [40, 131.5],
            [41, 134.7], [42, 137.9], [43, 141.1], [44, 144.3],
            [45, 147.5], [46, 150.7], [47, 153.9], [48, 157.1],
            [49, 160.3], [50, 163.5], [51, 166.7], [52, 169.9],
            [53, 173.1], [54, 176.3], [55, 179.5], [56, 182.7],
            [57, 185.9], [58, 189.1], [59, 192.3], [60, 195.5]]

        p.end()

        for spike_element, read_element in zip(spikes, pre_recorded_spikes):
            self.assertEqual(round(spike_element[0], 1),
                             round(read_element[0], 1))
            self.assertEqual(round(spike_element[1], 1),
                             round(read_element[1], 1))
spikeArray = {'spike_times': [[0, 1050]]}
populations.append(p.Population(nNeurons, p.IF_curr_exp, cell_params_lif,
                   label='pop_1'))
populations.append(p.Population(1, p.SpikeSourceArray, spikeArray,
                   label='inputSpikes_1'))

projections.append(p.Projection(populations[0], populations[0],
                   p.FromListConnector(loopConnections)))
projections.append(p.Projection(populations[1], populations[0],
                   p.FromListConnector(injectionConnection)))

populations[0].record_v()
populations[0].record_gsyn()
populations[0].record()

p.run(runtime)

v = None
gsyn = None
spikes = None

v = populations[0].get_v(compatible_output=True)
gsyn = populations[0].get_gsyn(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
    connections.append(singleConnection)

injectionConnection = [(0, 0, weight_to_spike, 1)]
spikeArray = {'spike_times': [[0]]}
populations.append(p.Population(nNeurons, p.IF_curr_exp, cell_params_lif, label='pop_1'))
populations[0].set_constraint(p.PlacerChipAndCoreConstraint(x=0, y=0, p=1))
populations.append(p.Population(1, p.SpikeSourceArray, spikeArray, label='inputSpikes_1'))

projections.append(p.Projection(populations[0], populations[0], p.FromListConnector(connections)))
projections.append(p.Projection(populations[1], populations[0], p.FromListConnector(injectionConnection)))

populations[0].record_v()
#populations[0].record_gsyn()
#populations[0].record()

p.run(200)

v = None
gsyn = None
spikes = None

v = populations[0].get_v(compatible_output=True)
#gsyn = populations[0].get_gsyn(compatible_output=True)
#spikes = populations[0].getSpikes(compatible_output=True)

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".") 
    pylab.xlabel('Time/ms')
    #pylab.xticks([0, 500, 1000, 2000, 3000, 4000, 5000])
예제 #39
0
def main():
    minutes = 0
    seconds = 30
    milliseconds = 0
    run_time = minutes*60*1000 + seconds*1000 + milliseconds

    weight_to_spike = 4.

    model = sim.IF_curr_exp
    cell_params = {'cm'        : 0.25, # nF
                    'i_offset'  : 0.0,
                    'tau_m'     : 10.0,
                    'tau_refrac': 2.0,
                    'tau_syn_E' : 2.5,
                    'tau_syn_I' : 2.5,
                    'v_reset'   : -70.0,
                    'v_rest'    : -65.0,
                    'v_thresh'  : -55.4
                    }
    # Available resolutions
    # 16, 32, 64, 128
    mode = ExternalDvsEmulatorDevice.MODE_64
    cam_res = int(mode)
    cam_fps = 90
    frames_per_saccade = cam_fps/3 - 1
    polarity = ExternalDvsEmulatorDevice.MERGED_POLARITY
    output_type = ExternalDvsEmulatorDevice.OUTPUT_TIME
    history_weight = 1.0
    behaviour = VirtualCam.BEHAVE_ATTENTION
    vcam = VirtualCam("./mnist", behaviour=behaviour, fps=cam_fps, 
                      resolution=cam_res, frames_per_saccade=frames_per_saccade)
                      
    cam_params = {'mode': mode,
                  'polarity': polarity,
                  'threshold': 12,
                  'adaptive_threshold': False,
                  'fps': cam_fps,
                  'inhibition': False,
                  'output_type': output_type,
                  'save_spikes': "./spikes_from_cam.pickle",
                  'history_weight': history_weight,
                  #'device_id': 0, # for an OpenCV webcam device
                  #'device_id': 'path/to/video/file', # to encode pre-recorded video
                  'device_id': vcam,
                 }
    if polarity == ExternalDvsEmulatorDevice.MERGED_POLARITY:
        num_neurons = 2*(cam_res**2)
    else:
        num_neurons = cam_res**2
      
    sim.setup(timestep=1.0, min_delay=1.0, max_delay=10.0)

    target = sim.Population(num_neurons, model, cell_params)

    stimulation = sim.Population(num_neurons, DvsEmulatorDevice, cam_params,
                                 label="Webcam population")

    connector = sim.OneToOneConnector(weights=weight_to_spike)

    projection = sim.Projection(stimulation, target, connector)

    target.record()
        
    sim.run(run_time)

    
    spikes = target.getSpikes(compatible_output=True)

    sim.end()
    #stimulation._vertex.stop()
    
    
    print ("Raster plot of the spikes that Spinnaker echoed back")
    fig = pylab.figure()
    
    spike_times = [spike_time for (neuron_id, spike_time) in spikes]
    spike_ids   = [neuron_id  for (neuron_id, spike_time) in spikes]
    
    pylab.plot(spike_times, spike_ids, ".", markerfacecolor="None",
               markeredgecolor="Blue", markersize=3)
    
    pylab.show()
rconn = 0.1
ext_conn = FixedProbabilityConnector(rconn, weights=0.1)

pynn.Projection(input_interface, reservoir,
                pynn.AllToAllConnector(weights=0.5, delays=1))

pynn.Projection(reservoir, readout_neurons,
                pynn.AllToAllConnector(weights=0.5, delays=1))

readout_neurons.record()
readout_neurons.record_v()

# run the network and measure the time it takes
timer.start()

pynn.run(simulation_time)

simCPUTime = timer.diff()

spikes = readout_neurons.getSpikes()

pynn.end()

# Plot
import pylab

spike_times = [spike[1] for spike in spikes]
spike_ids = [spike[0] for spike in spikes]

pylab.plot(spike_times, spike_ids, ".")
pylab.xlabel('Time (ms)')
populations[0].set_constraint(p.PlacerChipAndCoreConstraint(x=0, y=0, p=1))
populations.append(
    p.Population(1, p.SpikeSourceArray, spikeArray, label='inputSpikes_1'))

projections.append(
    p.Projection(populations[0], populations[0],
                 p.FromListConnector(connections)))
projections.append(
    p.Projection(populations[1], populations[0],
                 p.FromListConnector(injectionConnection)))

#populations[0].record_v()
#populations[0].record_gsyn()
populations[0].record()

p.run(200)

v = None
gsyn = None
spikes = None

#v = populations[0].get_v(compatible_output=True)
#gsyn = populations[0].get_gsyn(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    #pylab.xticks([0, 500, 1000, 2000, 3000, 4000, 5000])
예제 #42
0
    loopConnections.append(singleConnection)

injectionConnection = [(0, 0, weight_to_spike, 1)]
spikeArray = {'spike_times': [[0]]}
populations.append(p.Population(nNeurons, p.IF_curr_exp, cell_params_lif, label='pop_1'))
populations[0].set_constraint(p.PlacerRadialPlacementFromChipConstraint(3, 3))
populations.append(p.Population(1, p.SpikeSourceArray, spikeArray, label='inputSpikes_1'))

projections.append(p.Projection(populations[0], populations[0], p.FromListConnector(loopConnections)))
projections.append(p.Projection(populations[1], populations[0], p.FromListConnector(injectionConnection)))

#populations[0].record_v()
#populations[0].record_gsyn()
populations[0].record()

p.run(5000)

v = None
gsyn = None
spikes = None

#v = populations[0].get_v(compatible_output=True)
#gsyn = populations[0].get_gsyn(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".") 
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
    p.Population(nNeurons, p.IF_curr_exp, cell_params_lif, label='pop_2'))

#projections.append(p.Projection(populations[0], populations[1], p.OneToOneConnector(weights=weight_to_spike, delays=delay)))
projections.append(
    p.Projection(
        populations[0], populations[1],
        p.AllToAllConnector(weights=weight_to_spike, delays=injection_delay)))
projections.append(
    p.Projection(populations[1], populations[2],
                 p.OneToOneConnector(weights=weight_to_spike, delays=delay)))
#projections.append(p.Projection(populations[1], populations[0], p.FromListConnector([(0, 0, weight_to_spike, injection_delay)])))

populations[1].record_v()
populations[1].record()

p.run(100)

v = None
gsyn = None
spikes = None

v = populations[1].get_v(compatible_output=True)
spikes = populations[1].getSpikes(compatible_output=True)

if spikes != None:
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
    pylab.xlim(0, 100)
    pylab.ylim(0, 3)
예제 #44
0
                                    populations[0], p.AllToAllConnector()))
    population_index += 1

for processor in range(2, 16):
    populations.append(p.Population(nNeurons, p.SpikeSourceArray, spikeArray,
                                    label='inputSpikes_1:{}'.format(processor)))
    populations[population_index].set_mapping_constraint({'x':7, 'y':7})
    projections.append(p.Projection(populations[population_index],
                                    populations[1], p.AllToAllConnector()))
    population_index += 1
for processor in range(2, 16):
    populations.append(p.Population(nNeurons, p.SpikeSourceArray, spikeArray,
                                    label='inputSpikes_1:{}'.format(processor)))
    populations[population_index].set_mapping_constraint({'x':6, 'y':6})
    projections.append(p.Projection(populations[population_index],
                                    populations[1], p.AllToAllConnector()))
    population_index += 1
for processor in range(2, 16):
    populations.append(p.Population(nNeurons, p.SpikeSourceArray, spikeArray,
                                    label='inputSpikes_1:{}'.format(processor)))
    populations[population_index].set_mapping_constraint({'x':5, 'y':5})
    projections.append(p.Projection(populations[population_index],
                                    populations[1], p.AllToAllConnector()))
    population_index += 1

run_time = 100
print "Running for {} ms".format(run_time)
p.run(run_time)

p.end()
예제 #45
0
    def test_script(self):
        """
        test that tests the printing of v from a pre determined recording
        :return:
        """
        p.setup(timestep=0.1, min_delay=1.0, max_delay=14.0)
        n_neurons = 128 * 128  # number of neurons in each population
        p.set_number_of_neurons_per_core("IF_cond_exp", 256)

        cell_params_lif = {
            'cm': 0.25,
            'i_offset': 0.0,
            'tau_m': 20.0,
            'tau_refrac': 2.0,
            'tau_syn_E': 5.0,
            'tau_syn_I': 5.0,
            'v_reset': -70.0,
            'v_rest': -65.0,
            'v_thresh': -50.0,
            'e_rev_E': 0.,
            'e_rev_I': -80.
        }

        populations = list()
        projections = list()

        weight_to_spike = 0.035
        delay = 1.7

        spikes = read_spikefile('test.spikes', n_neurons)
        print spikes
        spike_array = {'spike_times': spikes}

        populations.append(
            p.Population(n_neurons,
                         p.SpikeSourceArray,
                         spike_array,
                         label='inputSpikes_1'))
        populations.append(
            p.Population(n_neurons,
                         p.IF_cond_exp,
                         cell_params_lif,
                         label='pop_1'))
        projections.append(
            p.Projection(
                populations[0], populations[1],
                p.OneToOneConnector(weights=weight_to_spike, delays=delay)))
        populations[1].record()

        p.run(100)

        spikes = populations[1].getSpikes(compatible_output=True)

        if spikes is not None:
            print spikes
            pylab.figure()
            pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
            pylab.xlabel('Time/ms')
            pylab.ylabel('spikes')
            pylab.title('spikes')
            pylab.show()
        else:
            print "No spikes received"

        p.end()
weight_to_spike = 2
#delay = 3.1
injection_delay = 2
delay = 10

spikeArray = {'spike_times': [[0]]}
populations.append(p.Population(nNeurons, p.IF_curr_exp, cell_params_lif, label='pop_1'))
populations.append(p.Population(1, p.SpikeSourceArray, spikeArray, label='inputSpikes_1'))

projections.append(p.Projection(populations[0], populations[0], p.AllToAllConnector(weights=weight_to_spike, delays=delay)))
projections.append(p.Projection(populations[1], populations[0], p.FromListConnector([(0, 0, 4, injection_delay)])))

populations[0].record_v()
populations[0].record()

p.run(90)

v = None
gsyn = None
spikes = None

v = populations[0].get_v(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)

if spikes != None:
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
    pylab.title('spikes')
    pylab.show()
                                   label=spikeInjectionPopLabel2)
populations.append(pop_spikes_in_2)

pop_spikes_out_1.record()
#ExternalDevices.activate_live_output_for(pop_spikes_out_1)
pop_spikes_out_2.record()
#ExternalDevices.activate_live_output_for(pop_spikes_out_2)

projections.append(
    spynn.Projection(pop_spikes_in_1, pop_spikes_out_1,
                     spynn.OneToOneConnector(weights=weight_to_spike)))
projections.append(
    spynn.Projection(pop_spikes_in_2, pop_spikes_out_2,
                     spynn.OneToOneConnector(weights=weight_to_spike)))

spynn.run(runTimeMs + 1000)  #add extra second to get all downstream spikes

spikes1 = pop_spikes_out_1.getSpikes(compatible_output=True)
spikes2 = pop_spikes_out_2.getSpikes(compatible_output=True)
#For raster plot of all together, we need to convert neuron ids to be global not local to each pop
for j in spikes2:
    j[0] = j[0] + nNeurons1

totalSpikes = len(spikes1) + len(spikes1)
print 'Total spikes generated: ', totalSpikes
if totalSpikes > 0:
    print "Last spike pop 1: ", spikes1[len(spikes1) - 1]
    print "Last spike pop 2: ", spikes2[len(spikes2) - 1]
    #print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes1], [i[0] for i in spikes1],
populations.append(p.Population(1, p.SpikeSourceArray, spikeArray, label="inputSpikes_1"))
# populations[0].set_mapping_constraint({"x": 1, "y": 0})

projections.append(p.Projection(populations[0], populations[0], p.FromListConnector(connections)))
projections.append(p.Projection(populations[1], populations[0], p.FromListConnector(injectionConnection)))

q.activate_live_output_for(populations[0])
populations[0].set_constraint(p.PlacerChipAndCoreConstraint(0, 0, 4))
populations[1].set_constraint(p.PlacerChipAndCoreConstraint(0, 0, 5))

run_time = 100
print "Running for {} ms".format(run_time)

populations[0].record()
p.run(run_time)

v = None
gsyn = None
spikes = None
spikes = populations[0].getSpikes(compatible_output=True)
# print(projections[0].getWeights())
# print(projections[0].getDelays())
# print delays

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.ylabel("neuron id")
    pylab.xlabel("Time/ms")
예제 #49
0
    def test_from_file_connector(self):
        # create files as needed for tests
        #  From_File_Generator.create_files()

        pop_size = 32

        min_weight = 0.1
        max_weight = 5.0
        rng_weights = p.NumpyRNG(seed=369121518)
        weight_dependence_n = \
            p.RandomDistribution(
                distribution='uniform',
                parameters=[1.0 + min_weight, 1.0 + max_weight],
                rng=rng_weights)
        weight_dependence_e = \
            p.RandomDistribution(distribution='uniform',
                                 parameters=[min_weight, max_weight],
                                 rng=rng_weights)

        file_num_i_p2 = 2
        file_num_p1_p2 = 2
        runtime = 10000.0
        stim_start = 0.0
        stim_rate = 10
        pops_to_observe = ['mapped_pop_1', 'mapped_pop_2']

        # Simulation Setup
        p.setup(timestep=1.0, min_delay=1.0, max_delay=11.0)

        # Neural Parameters
        tau_m = 24.0    # (ms)
        cm = 1
        v_rest = -65.0     # (mV)
        v_thresh = -45.0     # (mV)
        v_reset = -65.0     # (mV)
        t_refrac = 3.0       # (ms) (clamped at v_reset)
        tau_syn_exc = 3.0
        tau_syn_inh = tau_syn_exc * 3

        # cell_params will be passed to the constructor of the Population Object

        cell_params = {'tau_m': tau_m,
                       'cm': cm,
                       'v_init': v_reset,
                       'v_rest': v_rest,
                       'v_reset': v_reset,
                       'v_thresh': v_thresh,
                       'tau_syn_E': tau_syn_exc,
                       'tau_syn_I': tau_syn_inh,
                       'tau_refrac': t_refrac,
                       'i_offset': 0}

        observed_pop_list = []
        inputs = p.Population(pop_size, p.SpikeSourcePoisson,
                              {'duration': runtime, 'start': stim_start,
                               'rate': stim_rate},
                              label="inputs")

        if 'inputs' in pops_to_observe:
            inputs.record()
            observed_pop_list.append(inputs)

        mapped_pop_1 = p.Population(pop_size, p.IF_curr_exp, cell_params,
                                    label="mapped_pop_1")
        if 'mapped_pop_1' in pops_to_observe:
            mapped_pop_1.record()
            observed_pop_list.append(mapped_pop_1)

        pop_inhibit = p.Population(pop_size, p.IF_curr_exp, cell_params,
                                   label="pop_inhibit")

        if 'pop_inhibit' in pops_to_observe:
            pop_inhibit.record()
            observed_pop_list.append(pop_inhibit)

        mapped_pop_2 = p.Population(pop_size, p.IF_curr_exp, cell_params,
                                    label="mapped_pop_2")
        if 'mapped_pop_2' in pops_to_observe:
            mapped_pop_2.record()
            observed_pop_list.append(mapped_pop_2)

        p.Projection(inputs, mapped_pop_1,
                     p.OneToOneConnector(weights=weight_dependence_n,
                                         delays=1.0),
                     target='excitatory')

        p.Projection(mapped_pop_1, pop_inhibit,
                     p.OneToOneConnector(
                         weights=weight_dependence_e, delays=1.0),
                     target='excitatory')

        p.Projection(pop_inhibit, mapped_pop_2,
                     p.FromFileConnector(conn_file="List_I_p2_form_%d.txt"
                                         % file_num_i_p2),
                     target='inhibitory')

        p.Projection(mapped_pop_1, mapped_pop_2,
                     p.FromFileConnector(conn_file="List_I_p2_form_%d.txt"
                                                   % file_num_p1_p2),
                     target='excitatory')

        #  From_File_Generator.remove_files()

        p.run(runtime)

        for pop in observed_pop_list:
            data = numpy.asarray(pop.getSpikes())
            current_file_path = os.path.dirname(os.path.abspath(__file__))
            current_pop_file_path = os.path.join(current_file_path,
                                                 "{}.data".format(pop.label))
            #  pop.printSpikes(current_pop_file_path)
            pre_recorded_data = p.utility_calls.read_spikes_from_file(
                current_pop_file_path, 0, pop_size, 0, runtime)

            for spike_element, read_element in zip(data, pre_recorded_data):
                    self.assertEqual(round(spike_element[0], 1),
                                     round(read_element[0], 1))
                    self.assertEqual(round(spike_element[1], 1),
                                     round(read_element[1], 1))
    def test_get_voltage(self):
        """
        test that tests the getting of v from a pre determined recording
        :return:
        """
        p.setup(timestep=1, min_delay=1.0, max_delay=14.40)
        n_neurons = 200  # number of neurons in each population
        runtime = 500
        p.set_number_of_neurons_per_core("IF_curr_exp", n_neurons / 2)

        cell_params_lif = {
            'cm': 0.25,
            'i_offset': 0.0,
            'tau_m': 20.0,
            'tau_refrac': 2.0,
            'tau_syn_E': 5.0,
            'tau_syn_I': 5.0,
            'v_reset': -70.0,
            'v_rest': -65.0,
            'v_thresh': -50.0
        }

        populations = list()
        projections = list()

        weight_to_spike = 2.0
        delay = 1.7

        loop_connections = list()
        for i in range(0, n_neurons):
            single_connection = (i, ((i + 1) % n_neurons), weight_to_spike,
                                 delay)
            loop_connections.append(single_connection)

        injection_connection = [(0, 0, weight_to_spike, 1)]
        spike_array = {'spike_times': [[0]]}
        populations.append(
            p.Population(n_neurons,
                         p.IF_curr_exp,
                         cell_params_lif,
                         label='pop_1'))
        populations.append(
            p.Population(1,
                         p.SpikeSourceArray,
                         spike_array,
                         label='inputSpikes_1'))

        projections.append(
            p.Projection(populations[0], populations[0],
                         p.FromListConnector(loop_connections)))
        projections.append(
            p.Projection(populations[1], populations[0],
                         p.FromListConnector(injection_connection)))

        populations[0].record_v()
        populations[0].record_gsyn()
        populations[0].record()

        p.run(runtime)

        v = populations[0].get_v(compatible_output=True)

        current_file_path = os.path.dirname(os.path.abspath(__file__))
        current_file_path = os.path.join(current_file_path, "v.data")
        pre_recorded_data = p.utility_calls.read_in_data_from_file(
            current_file_path, 0, n_neurons, 0, runtime)

        p.end()

        for spike_element, read_element in zip(v, pre_recorded_data):
            self.assertEqual(round(spike_element[0], 1),
                             round(read_element[0], 1))
            self.assertEqual(round(spike_element[1], 1),
                             round(read_element[1], 1))
            self.assertEqual(round(spike_element[2], 1),
                             round(read_element[2], 1))
예제 #51
0
def estimate_kb(cell_params_lif):
    cell_para = copy.deepcopy(cell_params_lif)
    random.seed(0)
    p.setup(timestep=1.0, min_delay=1.0, max_delay=16.0)
    run_s = 10.
    runtime = 1000. * run_s
    max_rate = 1000.
    ee_connector = p.OneToOneConnector(weights=1.0, delays=2.0)

    pop_list = []
    pop_output = []
    pop_source = []
    x = np.arange(0., 1.01, 0.1)
    count = 0
    trail = 10

    for i in x:
        for j in range(trail):  #trails for average
            pop_output.append(p.Population(1, p.IF_curr_exp, cell_para))
            poisson_spikes = poisson_generator(i * max_rate, 0, runtime)
            pop_source.append(
                p.Population(1, p.SpikeSourceArray,
                             {'spike_times': poisson_spikes}))
            p.Projection(pop_source[count],
                         pop_output[count],
                         ee_connector,
                         target='excitatory')
            pop_output[count].record()
            count += 1

    count = 0
    for i in x:
        cell_para['i_offset'] = i
        pop_list.append(p.Population(1, p.IF_curr_exp, cell_para))
        pop_list[count].record()
        count += 1
    pop_list[count - 1].record_v()

    p.run(runtime)

    rate_I = np.zeros(count)
    rate_P = np.zeros(count)
    rate_P_max = np.zeros(count)
    rate_P_min = np.ones(count) * 1000.
    for i in range(count):
        spikes = pop_list[i].getSpikes(compatible_output=True)
        rate_I[i] = len(spikes) / run_s
        for j in range(trail):
            spikes = pop_output[i * trail +
                                j].getSpikes(compatible_output=True)
            spike_num = len(spikes) / run_s
            rate_P[i] += spike_num
            if spike_num > rate_P_max[i]:
                rate_P_max[i] = spike_num
            if spike_num < rate_P_min[i]:
                rate_P_min[i] = spike_num
        rate_P[i] /= trail
    '''
    #plot_spikes(spikes, 'Current = 10. mA')
    plt.plot(x, rate_I, label='current',)
    plt.plot(x, rate_P, label='Poisson input')
    plt.fill_between(x, rate_P_min, rate_P_max, facecolor = 'green', alpha=0.3)
    '''
    x0 = np.where(rate_P > 1.)[0][0]
    x1 = 4
    k = (rate_P[x1] - rate_P[x0]) / (x[x1] - x[x0])
    '''
    plt.plot(x, k*(x-x[x0])+rate_P[x0], label='linear')
    plt.legend(loc='upper left', shadow=True)
    plt.grid('on')
    plt.show()
    '''
    p.end()
    return k, x[x0], rate_P[x0]
populations[0].record()
ExternalDevices.activate_live_output_for(populations[0])

projections.append(
    FrontEnd.Projection(populations[1], populations[0], FrontEnd.OneToOneConnector(weights=weight_to_spike))
)

loopConnections = list()
for i in range(0, nNeurons - 1):
    singleConnection = (i, ((i + 1) % nNeurons), weight_to_spike, 3)
    loopConnections.append(singleConnection)

projections.append(FrontEnd.Projection(populations[0], populations[0], FrontEnd.FromListConnector(loopConnections)))


FrontEnd.run(run_time)

spikes = populations[0].getSpikes(compatible_output=True)

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.ylabel("neuron id")
    pylab.xlabel("Time/ms")
    pylab.title("spikes")
    pylab.show()
else:
    print "No spikes received"

FrontEnd.end()
예제 #53
0
 def run(self):
     # run simulation for time in milliseconds
     ps.run(self.simulation_time)
    singleConnection = (i, ((i + 1) % nNeurons), weight_to_spike, delay)
    connections.append(singleConnection)

injectionConnection = [(0, 0, weight_to_spike, 1)]
spikeArray = {'spike_times': [[0]]}
populations.append(p.Population(nNeurons, p.IF_curr_exp, cell_params_lif, label='pop_1'))
populations.append(p.Population(1, p.SpikeSourceArray, spikeArray, label='inputSpikes_1'))

projections.append(p.Projection(populations[0], populations[0], p.FromListConnector(connections)))
projections.append(p.Projection(populations[1], populations[0], p.FromListConnector(injectionConnection)))

#populations[0].record_v()
#populations[0].record_gsyn()
populations[0].record()

p.run(1000)

v = None
gsyn = None
spikes = None

#v = populations[0].get_v(compatible_output=True)
#gsyn = populations[0].get_gsyn(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
# Record excitatory spikes
ex_pop.record()

# Make excitatory->inhibitory projections
sim.Projection(ex_pop, in_pop, sim.FixedProbabilityConnector(0.02, weights=0.03), target='excitatory')
sim.Projection(ex_pop, ex_pop, sim.FixedProbabilityConnector(0.02, weights=0.03), target='excitatory')

# Make inhibitory->inhibitory projections
sim.Projection(in_pop, in_pop, sim.FixedProbabilityConnector(0.02, weights=-0.3), target='inhibitory')

# Build inhibitory plasticity  model
stdp_model = sim.STDPMechanism(
    timing_dependence = extra_sim.Vogels2011Rule(alpha=0.12,tau=20.0),
    weight_dependence = sim.AdditiveWeightDependence(w_min=0.0, w_max=1.0, A_plus=0.0005),
    mad=True
)

# Make inhibitory->excitatory projections
sim.Projection(in_pop, ex_pop, sim.FixedProbabilityConnector(0.02, weights=0), target='inhibitory', 
               synapse_dynamics=sim.SynapseDynamics(slow=stdp_model))

# Activate live output for excitatory spikes
ext.activate_live_output_for(ex_pop)
ext.activate_live_output_for(in_pop)

# Run simulation
sim.run(5000)

# End simulation on SpiNNaker
sim.end()
예제 #56
0
spikeArray = {'spike_times': [[0]]}
populations.append(p.Population(nNeurons, p.IF_curr_exp, cell_params_lif,
                   label='pop_1'))
populations.append(p.Population(1, p.SpikeSourceArray, spikeArray,
                   label='inputSpikes_1'))

projections.append(p.Projection(populations[0], populations[0],
                   p.FromListConnector(loopConnections)))
projections.append(p.Projection(populations[1], populations[0],
                   p.FromListConnector(injectionConnection)))

populations[0].record_v()
populations[0].record_gsyn()
populations[0].record()

p.run(5000)

v = None
gsyn = None
spikes = None

v = populations[0].get_v(compatible_output=True)
gsyn = populations[0].get_gsyn(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
spikeArray = {'spike_times': [[0, 1050]]}
populations.append(p.Population(nNeurons, p.IF_curr_exp, cell_params_lif,
                   label='pop_1'))
populations.append(p.Population(1, p.SpikeSourceArray, spikeArray,
                   label='inputSpikes_1'))

projections.append(p.Projection(populations[0], populations[0],
                   p.FromListConnector(loopConnections)))
projections.append(p.Projection(populations[1], populations[0],
                   p.FromListConnector(injectionConnection)))

populations[0].record_v()
populations[0].record_gsyn()
populations[0].record()

p.run(runtime)

v = None
gsyn = None
spikes = None

v = populations[0].get_v(compatible_output=True)
gsyn = populations[0].get_gsyn(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
    p.Population(nNeurons, p.IF_curr_exp, cell_params_lif, label='pop_1'))
populations.append(
    p.Population(1, p.SpikeSourceArray, spikeArray, label='inputSpikes_1'))

projections.append(
    p.Projection(populations[0], populations[0],
                 p.FromListConnector(loopConnections)))
projections.append(
    p.Projection(populations[1], populations[0],
                 p.FromListConnector(injectionConnection)))

populations[0].record_v()
populations[0].record_gsyn()
populations[0].record()

p.run(runtime)

v = None
gsyn = None
spikes = None

v = populations[0].get_v(compatible_output=True)
gsyn = populations[0].get_gsyn(compatible_output=True)
spikes = populations[0].getSpikes(compatible_output=True)

if spikes is not None:
    print spikes
    pylab.figure()
    pylab.plot([i[1] for i in spikes], [i[0] for i in spikes], ".")
    pylab.xlabel('Time/ms')
    pylab.ylabel('spikes')
spike_sourceE = sim.Population(1, sim.SpikeSourceArray, {'spike_times': [float(i) for i in range(5,105,10)]})
spike_sourceI = sim.Population(1, sim.SpikeSourceArray, {'spike_times': [float(i) for i in range(155,255,10)]})

sim.Projection(spike_sourceE, exp_cell, sim.OneToOneConnector(weights=0.15, delays=2.0), target='excitatory')
sim.Projection(spike_sourceI, exp_cell, sim.OneToOneConnector(weights=-0.15, delays=4.0), target='inhibitory')
sim.Projection(spike_sourceE, stoc_cell, sim.OneToOneConnector(weights=0.15, delays=2.0), target='excitatory')
sim.Projection(spike_sourceI, stoc_cell, sim.OneToOneConnector(weights=-0.15, delays=4.0), target='inhibitory')

stoc_cell.record_gsyn()
exp_cell.record_gsyn()
stoc_cell.record_v()
exp_cell.record_v()
stoc_cell.record()
exp_cell.record()

sim.run(200.0)

v_delta = stoc_cell.get_v()
i_delta = stoc_cell.get_gsyn()
v_exp = exp_cell.get_v()
i_exp = exp_cell.get_gsyn()

# Plot
fig, axis = pylab.subplots(2)

axis[0].plot(v_delta[:,1], v_delta[:,2], label="Stochastic")
axis[0].plot(v_exp[:,1], v_exp[:,2], label="Static")
axis[0].set_title("Voltage")
axis[0].legend()

axis[1].plot(i_delta[:,1], i_delta[:,2], label="Stochastic")