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
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)
# p.subplot(3,1,2) # p.imshow(dM) # p.title('dM') # p.draw() # p.subplot(3,1,3) # p.imshow(objective.inflate(pk)[0]['M']) # p.title('pk') # p.draw() # p.show() # raw_input('Press any key to continue..') # return (ip,gfk,pk) # return (symm(pp),symm(objective.inflate(gfk)),symm(objective.inflate(pk))) 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) )