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
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