Example #1
0
def FALMopt( objective , u, v2 , mus=np.array([30.,3.,0.3])): #mus=np.array([0.1,1.,10.])): #
    lambdas = np.zeros(v2.size)
    data = {'STAs':np.vstack(R['statistics']['stimulus']['STA']) , 
            'STCs':np.vstack([stc[np.newaxis,:] for stc in R['statistics']['stimulus']['STC']]), 
            'V2':v2 , 'U': u , 'N':NRGC , 'N_spikes':R['N_spikes'] ,
            'Ncones':Ncones , 'centers':centers , 'indices':indices , 'lam':lam , 'lambdas':lambdas }
    obj_V1 = objective.where(**data).with_callback(callback)
    optimize_L2 = FALMS.add_L2_term( obj_V1 , gtol=1e-3 )
    init = (0.001 + 0.01 * Rand.rand(NRGC,u.shape[0])).flatten()
    r = {}
    def falms_callback(falmer):  print '   L0: ', falmer[1][falmer[1]<>0].shape[0]
    for mu in mus:
        print
        print
        print 'mu: ', mu
        reg_L1 = FALMS.L1_L2( mu )
        params = FALMS.falms(init,optimize_L2,reg_L1,mu=0.01,ftol=2e-7,callback=falms_callback)
        r[mu] = params
        print [ (mu,par['M'][par['M']<>0].shape[0]) for mu,par in sorted(r.items())]
    return r
Example #2
0

data  = [{ 'STA':STA[i] , \
           'STC':STC[i] } for i in range(NRGC)]
init_params = [{'theta':data[i]['STA'] * 0.1 , \
                'M':data[i]['STC'] * 0.1} for i in range(NRGC)]

# quadratic Poisson LL in theta,M:
objective = kolia_theano.Objective(init_params=init_params[0],differentiate=['f'],
                                   f=quadratic_Poisson, barrier=eig_barrier) 

# fix particular data:
obj = objective.where(**data[0])

# LL + quadratic optimizer, for FALMS
optimize_L2 = FALMS.add_L2_term( obj )

# callback after each FALMS iteration:
def falms_callback(falmer):  print '   L0: ', falmer[1][falmer[1]<>0].shape[0]

r = {'L1':[{} for _ in init_params] , 'true':true}

def save():
    savefile = open('../../../Desktop/results.pyckle','w')
    cPickle.dump(r,savefile)  
    savefile.close()


r['ML'] = MaxLike(init_params,data)

r['analytical'] = analytical_ML(data)
Example #3
0
objective = kolia_theano.sum_objective(terms,callback=callback_one)

objective = FALMS.set_argument( objective , data )

#optimize  = optimize.optimizer( objective , callback=callback_one )

mu  = 1
rho = 1

true   = [{ 'theta' : np.dot( U.T , V1[i,:] ) , 'M' : 0.1*np.dot( U.T * V1[i,:] , U ) } for i in range(iii)]

def nuclearMatrix(params):
    return np.reshape(params,(Ncones,-1))

optimize_L2 = FALMS.add_L2_term( objective )

falmer = FALMS.initialize( objective.flatten(true) )

ranks  = {}
span   = {}
result = {}
for i,rho in enumerate( 0.1 * np.array([2.9,2.9,2.9])):
#for rho in 0.001 * np.array([2.,2.5,2.8,3.,3.5]):
#for rho in 0.005 * np.array([1.,2.,4.,8.,16.]):
    nuclear_L2 = FALMS.nuclear_L2( rho , get_matrix=nuclearMatrix )
    falmer = FALMS.initialize( objective.flatten(init_params) + 0.03*R.randn(756) )
    print
    print
    print 'RHO : ' , rho
    for j in range(100):