Exemplo n.º 1
0
def Test(net, mnist, start, end, N_hidden, T, v0, u0, I0, ge0, \
        neuron_names, synapse_names, state_monitor_names, spike_monitor_names, parameters):

    hit, miss = 0, 0
    hit_ind, miss_ind = np.zeros(10, dtype=int), np.zeros(10, dtype=int)

    print "Testing"
    #for number in range(start, end):
    number = start - 1
    count = 0
    while count < end - start:
        number += 1
        #pudb.set_trace()
        label = mnist[1][number]
        if label[0] == 0 or label[0] == 1:
            count += 1
            print "\tlabel = ", label,
            print "\tnumber = ", number
            net = snn.Run(net, mnist, number, T, v0, u0, I0, ge0, \
                        neuron_names, synapse_names, state_monitor_names, \
                        spike_monitor_names, parameters)
            S_l, S_i = _netoutput(net, spike_monitor_names, N_hidden)
            S_d = init.out(label)
            print "\t\tS_l = ", S_l
            print "\t\tS_d = ", S_d
            print "\t\tS_i = ", S_i
            index = init.out_inverse(S_d)
            result = Compare(S_l, S_d)
            if result == True:
                hit_ind[index] += 1
                hit += 1
            else:
                miss_ind[index] += 1
                miss += 1

    return hit, miss, hit_ind, miss_ind
Exemplo n.º 2
0
def ReSuMe(net, mnist, start, end, Pc, N_hidden, T, N_h, N_o, v0, u0, I0, ge0, neuron_names, synapse_names, state_monitor_names, spike_monitor_names, parameters):

    trained = False
    N = len(mnist[0])
    N_hidden_last = len(net[neuron_names[-2]])
    N_out = len(net[neuron_names[-1]])

    N_h = 1
    N_o = 1
    correct = 0
    while True:
        print "========================== R O U N D =========================="
        correct = 0
        number = start - 1
        count = 0
        while count < end - start:

            dw = np.zeros(len(net[synapse_names[-1]]))

            number += 1
            label = mnist[1][number]
            if label[0] == 0 or label[0] == 1:
                count += 1
                print "number = ", number
                k = 0
                for i in range(1):

                    k += 1
                    N_h = init.out(mnist[1][number][0])
                    desired_index = number / 2

                    lst = range(N_hidden_last)
                    rnd.shuffle(lst)

                    net = snn.Run(net, mnist, number, T, v0, u0, I0, ge0, \
                                neuron_names, synapse_names, state_monitor_names, \
                                spike_monitor_names, parameters)

                    S_l, S_i = _netoutput(net, spike_monitor_names, N_hidden)
                    S_d = init.out(label)
                    if len(S_l[0]) == S_d[0]:
                        net.restore()
                        correct += 1
                        break

                    print "\t\tS_l = ", S_l
                    print "\t\tS_d = ", S_d
                    print "\t\tS_i = ", S_i

                    modified = False
                    w = net[synapse_names[-1]].w[:]
                    j = 0
                    if min(S_i) == []:
                        pudb.set_trace()
                    t_in_tmp = np.copy(S_i / br.ms)
                    t_in = t_in_tmp.flatten()
                    dw = _set_out_spike(net, j, t_in, S_l[j], S_d[j], N_hidden)
                    if type(dw) == np.ndarray:
                        print "\t\t\tdw = ", dw
                        modified = True
                        w += dw
                    net.restore()
                    net[synapse_names[-1]].w[:] = w.clip(0.1)
                    net.store()
                    if modified == False:
                        break

        if correct >= 0.8*(end - start):
            break

    init._save_weights(net, synapse_names, 0, len(synapse_names))
    F = open("weights/trained.txt", 'w')
    F.write("True")
    F.close()

    return net