Example #1
0
  def gen_inputs_noisy_grids_scattered_fields(self,comp_scores=True):   
    """
    Generates regular grids and jitters the fields location
    """
    
    # parameter fitted by eye to match perfect-grid field size
    gau_sigma=self.grid_T/3.7
    seed(self.inputs_seed)
          
    # consider larger field for peaks in field but with center outside
    margin=self.grid_T
    XX,YY=np.mgrid[-self.L/2-margin:self.L/2+margin:self.dx,-self.L/2-margin:self.L/2+margin:self.dx]    

    # generate perfect grids  
    larger_pos=np.array([np.ravel(XX), np.ravel(YY)]).T   
    # generate perfect grids  
    seed(self.inputs_seed)
    
    self.phases,reg_grids,self.angle_vect,self.grid_T_vect=\
                                        gen_perfect_grids(larger_pos,self.n,self.grid_T,self.grid_angle,
                                        self.angle_sigma,jitter_axes_angle=self.jitter_axes_angle,
                                        grid_T_sigma=self.grid_T_sigma,jitter_axes_T=self.jitter_axes_T)
                                            
    
    inputs_large=np.zeros_like(reg_grids)     
    nx_large=int(np.sqrt(reg_grids.shape[0]))

    g_fun = lambda p: np.exp(-np.sum(p**2,2)/(2*gau_sigma**2))

    # add a gaussian for each noisy peak center      
    for grid_idx in xrange(self.N):
      grid=reg_grids[:,grid_idx].reshape(nx_large,nx_large)  
      noisy_peaks=get_noisy_peaks(grid,XX,YY,self.scatter_sigma)
      
      # gaussian input
      P0=larger_pos[np.newaxis,:,:]-noisy_peaks.T[:,np.newaxis,:]
      inputs_large[:,grid_idx]=g_fun(P0).astype(np.float32).sum(axis=0)
    
    
    # crop out the out the outer margin, we retain an inner square of size (self.nx, self.nx)
    margin_nx=np.int((nx_large-self.nx)/2.)
    inputs_unfolded=inputs_large.reshape(nx_large,nx_large,self.N)
    inputs=inputs_unfolded[margin_nx:margin_nx+self.nx,margin_nx:margin_nx+self.nx]     
    inputs=inputs.reshape(self.nx**2,self.N) 

    
    # shift down and clip (to mimic perfect grid inputs)
    inputs-=0.5
    inputs=inputs.clip(0,100)
    inputs=inputs/inputs.mean(axis=0)*self.input_mean
    
    self.inputs_flat=np.ascontiguousarray(inputs, dtype=np.float32)

    
    # compute scores
    if comp_scores:
      self.in_scores,self.in_spacings,self.in_angles,self.in_phases=compute_scores_evo(
      self.inputs_flat,self.nx,self.L,num_steps=50)
Example #2
0
  def gen_inputs_noisy_grids(self,comp_scores=True):
    """
    Generates regular grids and adds correlated Gaussian noise on top
    """
    # generate perfect grids  
    seed(self.inputs_seed)
    self.phases,grids,angle_vect,grid_T_vect=gen_perfect_grids(self.pos,self.n,self.grid_T,self.grid_angle)
    self.inputs_flat,grids_flat,noise_flat=add_noise_and_normalize(self.pos,self.nx,self.N,self.noise_sigma,
                                                  self.input_mean,self.signal_weight,grids)

    # compute scores
    if comp_scores:
      self.in_scores,self.in_spacings,self.in_angles,self.in_phases=compute_scores_evo(
      self.inputs_flat,self.nx,self.L,num_steps=50)
Example #3
0
  def gen_inputs_noisy_grids_two_angles(self,comp_scores=True):
    """
    Generates regular grids and adds correlated Gaussian noise on top
    """
    # generate perfect grids  
    seed(self.inputs_seed)
    phases1,grids1,angle_vect1,grid_T_vect1=gen_perfect_grids(self.pos,self.n1,self.grid_T,self.grid_angle1)
    phases2,grids2,angle_vect2,grid_T_vect2=gen_perfect_grids(self.pos,self.n2,self.grid_T,self.grid_angle2)
    
    self.phases=np.vstack([phases1,phases2])
    grids=np.hstack([grids1,grids2])
    
    self.inputs_flat,grids_flat,noise_flat=add_noise_and_normalize(self.pos,self.nx,self.N,self.noise_sigma,
                                                  self.input_mean,self.signal_weight,grids)

    # compute scores
    if comp_scores:
      self.in_scores,self.in_spacings,self.in_angles,self.in_phases=compute_scores_evo(
      self.inputs_flat,self.nx,self.L,num_steps=50)
Example #4
0
  def gen_inputs_noisy_grids_jitter(self,comp_scores=True):
    """
    Generates regular grids with nosy orientations and adds correlated Gaussian noise on top
    Grid scale and orientations are jittered (Gaussian distributed)
    """
    # generate perfect grids  
    seed(self.inputs_seed)
    self.phases,grids,self.angle_vect,self.grid_T_vect=\
                                        gen_perfect_grids(self.pos,self.n,self.grid_T,self.grid_angle,
                                        self.angle_sigma,jitter_axes_angle=self.jitter_axes_angle,
                                        grid_T_sigma=self.grid_T_sigma,jitter_axes_T=self.jitter_axes_T)
                                        
    self.inputs_flat,self.grids_flat,self.noise_flat=add_noise_and_normalize(self.pos,self.nx,self.N,
                                                                             self.noise_sigma,
                                                  self.input_mean,self.signal_weight,grids)

    # compute scores
    if comp_scores:
      self.in_scores,self.in_spacings,self.in_angles,self.in_phases=compute_scores_evo(
      self.inputs_flat,self.nx,self.L,num_steps=50)
Example #5
0
  def comp_scores(self):

    self.in_scores,self.in_spacings,self.in_angles,self.in_phases=compute_scores_evo(
    self.inputs_flat,self.nx,self.L,num_steps=50)
Example #6
0
    def post_run(self, do_print=True):

        # logging simulation end
        endTime = datetime.datetime.fromtimestamp(time.time())
        endTimeStr = endTime.strftime('%Y-%m-%d %H:%M:%S')
        elapsedTime = clock() - self.startClock

        logSim(self.hash_id,
               '',
               self.startTimeStr,
               endTimeStr,
               elapsedTime,
               self.paramMap,
               self.paramsPath,
               doPrint=False)

        if do_print:
            print 'Simulation ends: %s' % endTimeStr
            print 'Elapsed time: %s\n' % format_elapsed_time(elapsedTime)

        # estimated output rates (boundary input excluded)
        r_vect = np.dot(self.inputs_flat, self.J_vect)
        self.filt_r_vect = filter_r_vect(
            r_vect,
            self.paramMap) + self.r0 - self.gamma * self.J_vect.sum(axis=0)

        # real final output rate and score
        #self.final_space_visits[self.final_space_visits==0]=-1
        #self.final_space_r_out_mean=(self.final_space_r_out/self.final_space_visits).reshape(self.nx,self.nx)

        # compute final weight and rate scores
        self.final_weights = self.J_vect[:, -1].reshape(self.n, self.n)

        score, spacing, angle, phase, cx = get_grid_params(self.final_weights,
                                                           self.L,
                                                           self.n,
                                                           num_steps=50,
                                                           return_cx=True)

        self.final_weight_score = score
        self.final_weight_angle = angle
        self.final_weight_spacing = spacing
        self.final_weight_phase = phase
        self.final_weight_cx = cx

        self.final_rates = self.filt_r_vect[:, -1].reshape(self.nx, self.nx)

        score, spacing, angle, phase, cx = get_grid_params(self.final_rates,
                                                           self.L,
                                                           self.nx,
                                                           num_steps=50,
                                                           return_cx=True)

        self.final_rate_score = score
        self.final_rate_angle = angle
        self.final_rate_spacing = spacing
        self.final_rate_phase = phase
        self.final_rate_cx = cx

        # save variables
        toSaveMap = {
            'paramMap': self.paramMap,
            'J_vect': self.J_vect,
            'dJ_vect': self.dJ_vect,
            'r_out_vect': self.r_out_vect,
            'J0': self.J0,
            'filt_r_vect': self.filt_r_vect,
            #'tot_input_vect':self.tot_input_vect,
            'final_weights': self.final_weights,
            'final_weight_score': self.final_weight_score,
            'final_weight_angle': self.final_weight_angle,
            'final_weight_spacing': self.final_weight_spacing,
            'final_weight_phase': self.final_weight_phase,
            'final_weight_cx': self.final_weight_cx,
            'final_rates': self.final_rates,
            'final_rate_score': self.final_rate_score,
            'final_rate_angle': self.final_rate_angle,
            'final_rate_spacing': self.final_rate_spacing,
            'final_rate_phase': self.final_rate_phase,
            'final_rate_cx': self.final_rate_cx
        }

        #    'final_space_r_out':self.final_space_r_out,
        #    'final_space_visits':self.final_space_visits,
        #    'final_space_r_out_mean':self.final_space_r_out_mean}

        # compute scores
        if self.compute_scores is True:

            if self.inputs_type == InputType.INPUT_GAU_GRID:
                print 'Computing weight scores'
                # weight scores
                scores, spacings, angles, phases = compute_scores_evo(
                    self.J_vect, self.n, self.L)
                scoresVars = {
                    'scores': scores,
                    'spacings': spacings,
                    'angles': angles,
                    'phases': phases
                }
                toSaveMap = dict(toSaveMap.items() + scoresVars.items())

            print 'Computing rate scores'
            # rate scores
            rate_scores, rate_spacings, rate_angles, rate_phases = compute_scores_evo(
                self.filt_r_vect, self.nx, self.L, num_steps=20)
            scoresVars = {
                'rate_scores': rate_scores,
                'rate_spacings': rate_spacings,
                'rate_angles': rate_angles,
                'rate_phases': rate_phases
            }
            toSaveMap = dict(toSaveMap.items() + scoresVars.items())

        # add debug variables for saving
        if self.debug_vars is True:
            #debugVars={'h_act_vect':self.h_act_vect,'h_inact_vect':self.h_inact_vect,'gg_vect':self.gg_vect}
            debugVars = {
                'r1_vect': self.r1_vect,
                'r2_vect': self.r2_vect,
                'r3_vect': self.r3_vect,
                'gg_vect': self.gg_vect
            }
            toSaveMap = dict(toSaveMap.items() + debugVars.items())

        if self.correct_border_effects is True:
            toSaveMap = dict(toSaveMap.items() +
                             {'border_envelope': self.border_envelope}.items())

        # save
        ensureParentDir(self.dataPath)
        np.savez(self.dataPath, **toSaveMap)

        if do_print:
            print 'Result saved in: %s\n' % self.dataPath