Beispiel #1
0
    def Save_Simulation_As(self, event=None):

        self.canvas.Show(False)
        dlg = FileDialog(self,
                         "Save Simulation As...",
                         default_dir=os.getcwd() + "/sims/",
                         wildcard='DAT Files|*.dat|All Files|*.*',
                         save=1)
        result = dlg.ShowModal()
        if result == 'ok':
            filename = dlg.GetPaths()[0]
        else:
            filename = None

        dlg.Destroy()

        if filename:
            d = zpickle.load(self.tmpfile)
            self.params['save_sim_file'] = filename
            d['params'] = self.params
            zpickle.save(d, filename)

            self.modified = False

            self.ResetTitle()

        self.canvas.Show(True)

        return filename
Beispiel #2
0
    def __load_sim__(self, lfname):

        sim = zpickle.load(lfname)

        params = sim['params']

        params['save_sim_file'] = self.params['save_sim_file']
        params['load_sim_file'] = ''
        params['continue'] = False

        try:
            params['initial_weights'] = sim['weights']
            params['initial_moments'] = sim['moments']
        except KeyError:
            self.params = params
            return 1

        params['load_sim_file'] = self.tmpfile
        params['continue'] = True
        sim['params'] = params
        self.params = params

        zpickle.save(sim, self.tmpfile)

        return 0
Beispiel #3
0
def run_sim_client(params=None, url='http://localhost:4242'):

    from xmlrpclib import ServerProxy
    import pickle

    server = ServerProxy('http://localhost:4242')

    if not params:
        params = default_params()

    params_bytes = pickle.dumps(params, 0)

    if params['load_sim_file']:
        fid = open(params['load_sim_file'], 'rb')
        bytes = fid.read()
        fid.close()

        lf_bytes = pickle.dumps(bytes, 0)
    else:
        lf_bytes = ''

    sim_bytes = server.run_sim_server(params_bytes, lf_bytes)

    sim = pickle.loads(sim_bytes)

    print 'Save: %s' % params['save_sim_file']
    zpickle.save(sim, params['save_sim_file'])

    return sim
Beispiel #4
0
    def Save_Simulation_As(self,event=None):
        
        self.canvas.Show(False)
        dlg = FileDialog(self, "Save Simulation As...",default_dir=os.getcwd()+"/sims/",
                        wildcard='DAT Files|*.dat|All Files|*.*',save=1)
        result = dlg.ShowModal()
        if result == 'ok':
            filename = dlg.GetPaths()[0]
        else:
            filename=None
            
        dlg.Destroy()

            
        if filename:
            d=zpickle.load(self.tmpfile)
            self.params['save_sim_file']=filename
            d['params']=self.params
            zpickle.save(d,filename)
            
            self.modified=False
            
            self.ResetTitle()
        
        self.canvas.Show(True)
            
        return filename
Beispiel #5
0
    def __load_sim__(self,lfname):
        
        sim=zpickle.load(lfname)

        params=sim['params']
        
        params['save_sim_file']=self.params['save_sim_file']
        params['load_sim_file']=''
        params['continue']=False
        
        try:
            params['initial_weights']=sim['weights']
            params['initial_moments']=sim['moments']
        except KeyError:
            self.params=params
            return 1

        params['load_sim_file']=self.tmpfile
        params['continue']=True
        sim['params']=params
        self.params=params
        
        zpickle.save(sim,self.tmpfile)
        
        return 0
Beispiel #6
0
def save_sim(sim_params, N, C):

    sim_params = deepcopy(sim_params)
    sim_params['display'] = None
    d = {'sim_params': sim_params, 'N': N, 'C': C}

    zpickle.save(d, sim_params['save_sim_file'])
Beispiel #7
0
    def Save_Simulation(self, event=None):

        if not self.modified:
            return

        sfname = self.params['save_sim_file']
        def_sfname = default_params()['save_sim_file']
        if sfname == def_sfname:
            filename = self.Save_Simulation_As()

        else:
            filename = sfname
            d = zpickle.load(self.tmpfile)
            d['params'] = self.params
            zpickle.save(d, sfname)

            self.modified = False

            self.ResetTitle()

        return filename
Beispiel #8
0
    def Save_Simulation(self,event=None):
        
        if not self.modified:
            return
        
        sfname=self.params['save_sim_file']
        def_sfname=default_params()['save_sim_file']
        if sfname==def_sfname:
            filename=self.Save_Simulation_As()
            
            
        else:
            filename=sfname
            d=zpickle.load(self.tmpfile)
            d['params']=self.params
            zpickle.save(d,sfname)
            
            self.modified=False
            
            self.ResetTitle()

        return filename
Beispiel #9
0
def run_sim(params=None,parent=None):
    
    if not params:
        params=default_params()
    elif isinstance(params,basestring):
        fname=params
        d=zpickle.load(fname)
    
        params=d['params']
        
    
    if parent:
        save_sim_file=params['tmpfile']
        params['display']=1
    else:
        save_sim_file=params['save_sim_file']
        if params['load_sim_file']==params['tmpfile']:
            params['load_sim_file']=''
            
    if not save_sim_file:
        save_sim_file='sims/untitled.dat'

        
        
    # Deal the random number seed here
    
    if params['random_seed']=='clock':
        numpy.random.seed(None)
    else:
        numpy.random.seed(params['random_seed'])
        
    params['actual_random_seed']=numpy.random.get_state()
    params['random_seed2']=int(round(numpy.random.rand()*1e6))
    
    start_time=time.time()
    end_time=None
    sim_time=None
    
    num_channels=len(params['pattern_input'])
    
    num_moments=get_num_moments(params)
    
    
    layer=0
    test_stimulus=params['test_stimulus'][layer]['type']
    
    total_num_inputs=0
    for p in params['pattern_input']:
        total_num_inputs=total_num_inputs+p['num_inputs']
        

    num_neurons=prod(params['num_neurons'])
    
    if params['load_sim_file']:
        
        d=zpickle.load(params['load_sim_file'])
        load_sim_params=d['params']
        
        weights=d['weights']
        moments=d['moments']
        initial_weights=d['weights']
        initial_moments=d['moments']
        t_mat=None
        
        if params['continue']:
            t_mat=d['t_mat']
            moments_mat=d['moments_mat']
            response_mat=d['response_mat']
            weights_mat=d['weights_mat']
            
            if not t_mat:
                moments_mat=None
                response_mat=None
        else:
            params['initial_weights']=weights
            params['initial_moments']=moments
    else:
        params['continue']=0
        
        full_mask=[]
        for p in params['pattern_input']:
            full_mask.append(get_circle_mask(p['num_inputs']))
            
        full_mask=numpy.array(full_mask).ravel()
        
        if not params['initial_weights']:
            params['initial_weights']=[numpy.asarray(numpy.random.rand(num_neurons,total_num_inputs)*(params['initial_weight_range'][1]-params['initial_weight_range'][0])+params['initial_weight_range'][0],numpy.float64)]
            params['initial_weights'][layer]=params['initial_weights'][layer]*(full_mask.repeat(num_neurons))

            
        initial_weights=params['initial_weights']
        
        if not params['initial_moments']:
            params['initial_moments']=[numpy.asarray(numpy.random.rand(num_moments,num_neurons)*(params['initial_moment_range'][1]-params['initial_moment_range'][0])+params['initial_moment_range'][0],numpy.float64)]

        initial_moments=params['initial_moments']
        
        moments_mat=numpy.dstack( (initial_moments[0],) )
        
        t_mat=None
    
    
    if not t_mat:  # not loaded from file
        
        t_mat=[0]
        start_epoch=1
        moments_mat=numpy.dstack( (initial_moments[0],) )
        
        if params['keep_every_epoch']:
            weights_mat=[initial_weights]
        else:
            weights_mat=[]
            

        response_mat=[]
        response_var=[]
        
        
        test_stimulus_type=params['test_stimulus'][layer]['type']
        if test_stimulus_type==1: # test OR single
 
            response_var=test_OR_single(params,initial_weights)
            if not response_var:
                params['test_stimulus'][layer]['type']=0
            else:
                for r in response_var:
                    response_mat.append([r[0]])
        
        
    else:
        start_epoch=len(t_mat)
        test_stimulus_type=params['test_stimulus'][layer]['type']
        response_var=[]
        if test_stimulus_type==1: # test OR single
            
            response_var=test_OR_single(params,initial_weights)
            if not response_var:
                params['test_stimulus'][layer]['type']=0
            else:
                for r,m in zip(response_var,response_mat):
                    m.append(r[0])
    

        
    weights=deepcopy(initial_weights)
    moments=deepcopy(initial_moments)
    
    
    response_var_list=[response_var]

    extra_mat=[]
    
    sim={'params':params,
            'weights':weights,
            'moments':moments,
            'moments_mat':moments_mat,
            'weights_mat':weights_mat,
            'response_mat':response_mat,
            'response_var_list':response_var_list,
            'initial_weights':weights,
            'initial_moments':moments,
            't_mat':t_mat,
            'start_time':start_time,
            'end_time':end_time,
            'sim_time':sim_time,
            'extra_mat':extra_mat}
        
    params_with_images=deepcopy(params)
    
    # make these point to the same thing
    params_with_images['saved_input_vectors']=params['saved_input_vectors']
    
    fix_images_directories(params_with_images)
    
    
    status('Preemtive Save: %s' % save_sim_file,parent)
    zpickle.save(sim,save_sim_file)
    
    
    w=weights[layer]
    m=moments[layer]
    
    
    t0=time.time()
    for epoch in range(start_epoch,start_epoch+params['epoch_number']):
        t1=time.time()
        
        extra=train(epoch-start_epoch,params_with_images,w,m)
    
        if extra:
            extra_mat.append(extra)
            
        
        # copy over mask stuff
        if epoch==start_epoch:
            for i,p in enumerate(params['pattern_input']):
                params['pattern_input'][i]['mask']=params_with_images['pattern_input'][i]['mask']

        dt1=time.time()-t1
        dt0=time.time()-t0
        
        frac=(epoch-start_epoch+1.0)/params['epoch_number']
        eta=sec2str(round(dt0/frac-dt0))
        
        status("%.4f...ETA %s" % (dt1,eta),parent)
        
        sim['moments_mat']=numpy.dstack( (sim['moments_mat'],m) )
        
        test_stimulus_type=params['test_stimulus'][layer]['type']
        
        if test_stimulus_type==1: # test OR single
            
            response_var=test_OR_single(params,weights)
            response_var_list[0]=response_var
            if not response_var:
                params['test_stimulus'][layer]['type']=0
            else:
                for r,mat in zip(response_var,response_mat):
                    mat.append(r[0])

        t_mat.append(t_mat[-1]+params['iter_per_epoch'])

        if params['keep_every_epoch']:
            weights_mat.append(deepcopy(weights))
           
        if params['display'] and epoch%params['epoch_per_display']==0:
            if parent:
                parent.Plot(sim)
            else:
                Plot(sim)
        
        if parent:
            parent.Yield()
            if parent.Stopping():
                break
            
        if dt0>(60*60*20):   # every 20 minutes
            status('Incremental Save: %s' % (save_sim_file),parent)
            zpickle.save(sim,save_sim_file)
        
    
    end_time=time.time()
    sim_time=end_time-start_time
        
    if params['display']:
        if parent:
            parent.Plot(sim)
        else:
            Plot(sim)

    status('Save: %s' % (save_sim_file),parent)
    zpickle.save(sim,save_sim_file)
Beispiel #10
0
def save(var, fname):
    print "Writing ", fname
    zpickle.save(var, fname)
    fname = hdf5_fname(fname)
    print "Writing ", fname
    hdf5_save_images(var, fname)
Beispiel #11
0
def run_sim(params=None, parent=None):

    if not params:
        params = default_params()
    elif isinstance(params, basestring):
        fname = params
        d = zpickle.load(fname)

        params = d['params']

    if parent:
        save_sim_file = params['tmpfile']
        params['display'] = 1
    else:
        save_sim_file = params['save_sim_file']
        if params['load_sim_file'] == params['tmpfile']:
            params['load_sim_file'] = ''

    if not save_sim_file is None and not save_sim_file:
        save_sim_file = 'sims/untitled.dat'

    # Deal the random number seed here

    if params['random_seed'] == 'clock':
        numpy.random.seed(None)
    else:
        numpy.random.seed(params['random_seed'])

    params['actual_random_seed'] = numpy.random.get_state()
    params['random_seed2'] = int(round(numpy.random.rand() * 1e6))

    start_time = time.time()
    end_time = None
    sim_time = None

    num_channels = len(params['pattern_input'])

    num_moments = get_num_moments(params)

    layer = 0
    test_stimulus = params['test_stimulus'][layer]['type']

    total_num_inputs = 0
    for p in params['pattern_input']:
        total_num_inputs = total_num_inputs + p['num_inputs']

    num_neurons = prod(params['num_neurons'])

    if params['load_sim_file']:

        d = zpickle.load(params['load_sim_file'])
        load_sim_params = d['params']

        weights = d['weights']
        moments = d['moments']
        individual_moments = d['individual_moments']

        initial_weights = d['weights']
        initial_moments = d['moments']
        initial_individual_moments = d['individual_moments']
        t_mat = None

        if params['continue']:
            t_mat = d['t_mat']
            moments_mat = d['moments_mat']
            individual_moments_mat = d['individual_moments_mat']
            response_mat = d['response_mat']
            weights_mat = d['weights_mat']

            if not t_mat:
                moments_mat = None
                individual_moments_mat = None
                response_mat = None
        else:
            params['initial_weights'] = deepcopy(weights)
            params['initial_moments'] = deepcopy(moments)
            params['initial_individual_moments'] = deepcopy(individual_moments)

            initial_weights = params['initial_weights']
            initial_moments = params['initial_moments']
            initial_individual_moments = params['initial_individual_moments']

    else:
        params['continue'] = 0

        full_mask = get_full_mask(params)

        if not params['initial_weights']:
            params['initial_weights'] = [
                numpy.asarray(
                    numpy.random.rand(num_neurons, total_num_inputs) *
                    (params['initial_weight_range'][1] -
                     params['initial_weight_range'][0]) +
                    params['initial_weight_range'][0], numpy.float64)
            ]

            # I love broadcasting! full_mask has a length of the number of inputs
            params['initial_weights'][
                layer] = params['initial_weights'][layer] * full_mask

        initial_weights = params['initial_weights']

        if not params['initial_moments']:
            params['initial_moments'] = [
                numpy.asarray(
                    numpy.random.rand(num_moments, num_neurons) *
                    (params['initial_moment_range'][1] -
                     params['initial_moment_range'][0]) +
                    params['initial_moment_range'][0], numpy.float64)
            ]

            # same size as the weights - make into a list if you need to
            # have more of these
            params['initial_individual_moments'] = [
                numpy.asarray(
                    numpy.random.rand(num_neurons, total_num_inputs) *
                    (params['initial_moment_range'][1] -
                     params['initial_moment_range'][0]) +
                    params['initial_moment_range'][0], numpy.float64)
            ]

        initial_moments = params['initial_moments']
        initial_individual_moments = params['initial_individual_moments']

        moments_mat = numpy.dstack((initial_moments[0], ))

        t_mat = None

    if not t_mat:  # not loaded from file

        t_mat = [0]
        start_epoch = 1
        moments_mat = numpy.dstack((initial_moments[0], ))

        if params['keep_every_epoch']:
            weights_mat = [initial_weights]
            individual_moments_mat = [initial_individual_moments]
        else:
            weights_mat = []
            individual_moments_mat = []

        response_mat = []
        response_var = []

        test_stimulus_type = params['test_stimulus'][layer]['type']
        if test_stimulus_type == 1:  # test OR single

            response_var = test_OR_single(params, initial_weights)
            if not response_var:
                params['test_stimulus'][layer]['type'] = 0
            else:
                for r in response_var:
                    response_mat.append([r[0]])

    else:
        start_epoch = len(t_mat)
        test_stimulus_type = params['test_stimulus'][layer]['type']
        response_var = []
        if test_stimulus_type == 1:  # test OR single

            response_var = test_OR_single(params, initial_weights)
            if not response_var:
                params['test_stimulus'][layer]['type'] = 0
            else:
                for r, m in zip(response_var, response_mat):
                    m.append(r[0])

    weights = deepcopy(initial_weights)
    moments = deepcopy(initial_moments)
    individual_moments = deepcopy(initial_individual_moments)

    response_var_list = [response_var]

    extra_mat = []

    sim = {
        'params': params,
        'weights': weights,
        'moments': moments,
        'individual_moments': individual_moments,
        'moments_mat': moments_mat,
        'individual_moments_mat': individual_moments_mat,
        'weights_mat': weights_mat,
        'response_mat': response_mat,
        'response_var_list': response_var_list,
        'initial_weights': initial_weights,
        'initial_moments': initial_moments,
        't_mat': t_mat,
        'start_time': start_time,
        'end_time': end_time,
        'sim_time': sim_time,
        'extra_mat': extra_mat
    }

    params_with_images = deepcopy(params)

    # make these point to the same thing
    params_with_images['saved_input_vectors'] = params['saved_input_vectors']

    fix_images_directories(params_with_images, parent)

    if not save_sim_file is None:
        status('Preemtive Save: %s' % save_sim_file, parent)
        zpickle.save(sim, save_sim_file)

    w = weights[layer]
    m = moments[layer]
    ind_m = individual_moments[layer]

    t0 = time.time()
    last_display_time = t0
    extra_input = []
    try:

        for epoch in range(start_epoch, start_epoch + params['epoch_number']):
            t1 = time.time()

            extra = train(epoch - start_epoch, params_with_images, w, m, ind_m,
                          extra_input)

            if extra:
                extra_mat.append(extra)

            # copy over mask stuff
            if epoch == start_epoch:
                for i, p in enumerate(params['pattern_input']):
                    params['pattern_input'][i]['mask'] = params_with_images[
                        'pattern_input'][i]['mask']

            dt1 = time.time() - t1
            dt0 = time.time() - t0
            if (time.time() -
                    last_display_time) > params['minimum_print_time']:
                last_display_time = time.time()

                frac = (epoch - start_epoch + 1.0) / params['epoch_number']
                eta = sec2str(dt0 / frac - dt0)

                status("%.4f...ETA %s" % (dt1, eta), parent)

            sim['moments_mat'] = numpy.dstack((sim['moments_mat'], m))

            test_stimulus_type = params['test_stimulus'][layer]['type']

            if test_stimulus_type == 1:  # test OR single

                response_var = test_OR_single(params, weights)
                response_var_list[0] = response_var
                if not response_var:
                    params['test_stimulus'][layer]['type'] = 0
                else:
                    for r, mat in zip(response_var, response_mat):
                        mat.append(r[0])

            t_mat.append(t_mat[-1] + params['iter_per_epoch'])

            if params['keep_every_epoch']:
                weights_mat.append(deepcopy(weights))
                individual_moments_mat.append(deepcopy(individual_moments))

            if params['display'] and epoch % params['epoch_per_display'] == 0:
                if parent:
                    parent.Plot(sim)
                else:
                    Plot(sim)

            if parent:
                parent.Yield()
                if parent.Stopping():
                    break

            if dt0 > (60 * 60 * 20):  # every 20 minutes
                if not save_sim_file is None:
                    status('Incremental Save: %s' % (save_sim_file), parent)
                    zpickle.save(sim, save_sim_file)

    except KeyboardInterrupt:
        status("Stopping!", parent)
        pass

    end_time = time.time()
    sim_time = end_time - start_time

    if params['display']:
        if parent:
            parent.Plot(sim)
        else:
            Plot(sim)

    tt = sec2str(time.time() - t0)
    if save_sim_file is None:
        status('Save: None. Total time %s' % (tt), parent)
    else:
        status('Save: %s. Total time %s' % (save_sim_file, tt), parent)
        zpickle.save(sim, save_sim_file)

    return sim
Beispiel #12
0
def save_params(params,fname):
    
    zpickle.save(params,fname)
Beispiel #13
0
def save_params(params, fname):

    zpickle.save(params, fname)
Beispiel #14
0
    for i in range(len(var['im'])):
        var['im'][i]=(var['im'][i]-mn)/d*maxval
        var['im'][i]=var['im'][i].astype(resolution)
        
    var['im_scale_shift']=[d/maxval, mn]
    
    


if __name__=="__main__":

    # cat stuff
    imfname='catim081604.pics'
    if not os.path.exists(imfname):
        var_raw=make_raw('cat',show=False)
        zpickle.save(var_raw,imfname)

    var_raw=zpickle.load('catim081604.pics')
#    var_raw['im']=[var_raw['im'][0]]  # for debugging: use 1 image
    imfname='catim081604_dog13.pics'
    if not os.path.exists(imfname):
        var=make_dog(var_raw)
        set_resolution(var,'uint8')
        zpickle.save(var,imfname)

    imfname='catim081604_white.pics'
    if not os.path.exists(imfname):
        var=make_white(var_raw)
        set_resolution(var,'uint8')
        zpickle.save(var,imfname)