def get_top_perfs(top_file): perfs = [] f = h5py.File(top_file, 'r') for net_key in f.keys(): net_grp = f[net_key] net = EchoStateNetwork() net.from_hdf5(net_grp) net.compile() W = net.W Win = net.Win input_node = Win.argmax() lperf = float(net_grp['performance']['standard'][()]) (evals, evecs) = np.linalg.eig(W) pdata = PerformanceData() pdata.file_name = top_file pdata.net = net pdata.net_key = net_key pdata.input_node = input_node pdata.logit_perf = lperf pdata.W = W pdata.Win = Win.squeeze() pdata.eigen_values = evals perfs.append(pdata) f.close() perfs.sort(key=operator.attrgetter('logit_perf'), reverse=True) return perfs
def run_morse_nets(stim_file, net_file, input_gain=1.0, noise_std=0.0, num_trials=1, exp_desc='default', net_keys=None, fixed_seed=None): stimset = MorseStimSet() stimset.from_hdf5(stim_file) f = h5py.File(net_file, 'a') burn_time = 100 post_stim_time = 30 pre_stim_time = 30 if net_keys is None: net_keys = f.keys() for net_key in net_keys: if fixed_seed is not None: #use a fixed random seed so each network sees the same set of random stimuli print 'Using fixed random seed..' np.random.seed(fixed_seed) print 'Running network %s' % net_key net_grp = f[net_key] #read network weights from hdf5 net = EchoStateNetwork() net.from_hdf5(net_grp) net.noise_std = noise_std #set the input gain net.connect_input(0, 0, input_gain) #rebuild network and run net.compile() net_sims = run_sim(net, stimset.all_stims, burn_time=burn_time, pre_stim_time=pre_stim_time, post_stim_time=post_stim_time, num_trials=num_trials) #save experiment to network exp_grp = net_grp.create_group(exp_desc) exp_grp['noise_std'] = noise_std exp_grp['num_stims'] = len(net_sims) exp_grp['input_gain'] = input_gain resp_grp = exp_grp.create_group('responses') for stim_key,sim in net_sims.iteritems(): stim_grp = resp_grp.create_group(stim_key) sim.to_hdf5(stim_grp) f.close()