algorithm, optimization, or other problem?
Gerard Flanagan
grflanagan at yahoo.co.uk
Tue Feb 21 09:51:09 EST 2006
Gerard Flanagan wrote:
> Brian Blais wrote:
> > Hello,
> >
> > I am trying to translate some Matlab/mex code to Python, for doing neural
> > simulations. This application is definitely computing-time limited, and I need to
> > optimize at least one inner loop of the code, or perhaps even rethink the algorithm.
> > The procedure is very simple, after initializing any variables:
> >
> > 1) select a random input vector, which I will call "x". right now I have it as an
> > array, and I choose columns from that array randomly. in other cases, I may need to
> > take an image, select a patch, and then make that a column vector.
> >
> > 2) calculate an output value, which is the dot product of the "x" and a weight
> > vector, "w", so
> >
> > y=dot(x,w)
> >
> > 3) modify the weight vector based on a matrix equation, like:
> >
> > w=w+ eta * (y*x - y**2*w)
> > ^
> > |
> > +---- learning rate constant
> >
> > 4) repeat steps 1-3 many times
> >
>
>
> Brian
>
> ETA = 0.001
> INV_TAU = 1.0/100.0
>
> rather than:
>
> > params={}
> > params['eta']=0.001;
> > params['tau']=100.0;
>
or:
ETA = params['eta']
INV_TAU = 1.0/params['tau']
Gerard
> ie. take the dictionary lookup (and the repeated division) out?
>
> If you have a collection of random vectors do you gain anything by
> *choosing* them randomly?
>
> I'm not exactly sure if it's equivalent to your existing code, but how
> about:
>
> x=random((100,250000))
> w=random((100,1));
> th=random((1,1))
> for vector in x:
> ...
> w=w+ ETA * (y*vector - y**2*w)
> th = th + INV_TAU *(y**2-th)
> ...
>
> ? (I'm not familar with Numeric)
>
> Gerard
>
> > old_mx=0;
> > for e in range(100):
> >
> > rnd=randint(0,numpats,250000)
> > t1=time.time()
> > if 0: # straight python
> > for i in range(len(rnd)):
> > pat=rnd[i]
> > xx=reshape(x[:,pat],(1,-1))
> > y=matrixmultiply(xx,w)
> > w=w+params['eta']*(y*transpose(xx)-y**2*w);
> > th=th+(1.0/params['tau'])*(y**2-th);
> > else: # pyrex
> > dohebb(params,w,th,x,rnd)
> > print time.time()-t1
> >
> >
More information about the Python-list
mailing list