algorithm, optimization, or other problem?

Gerard Flanagan grflanagan at yahoo.co.uk
Tue Feb 21 09:41:28 EST 2006


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;

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