예제 #1
0
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
예제 #2
0
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()