comparison pylearn/gd/sgd.py @ 1474:a57f4839a9d8

merge
author James Bergstra <bergstrj@iro.umontreal.ca>
date Wed, 18 May 2011 10:52:42 -0400
parents ddda8d93c162 cac29ca79a74
children 0e6ca7eecc72
comparison
equal deleted inserted replaced
1473:91a475ca9b6d 1474:a57f4839a9d8
14 :param stepsizes: step by this amount times the negative gradient on each iteration 14 :param stepsizes: step by this amount times the negative gradient on each iteration
15 :type stepsizes: [symbolic] scalar or list of one [symbolic] scalar per param 15 :type stepsizes: [symbolic] scalar or list of one [symbolic] scalar per param
16 """ 16 """
17 try: 17 try:
18 iter(stepsizes) 18 iter(stepsizes)
19 except: 19 except Exception:
20 stepsizes = [stepsizes for p in params] 20 stepsizes = [stepsizes for p in params]
21 if len(params) != len(grads): 21 if len(params) != len(grads):
22 raise ValueError('params and grads have different lens') 22 raise ValueError('params and grads have different lens')
23 updates = [(p, p - step * gp) for (step, p, gp) in zip(stepsizes, params, grads)] 23 updates = [(p, p - step * gp) for (step, p, gp) in zip(stepsizes, params, grads)]
24 return updates 24 return updates
25 25
26 def sgd_momentum_updates(params, grads, stepsizes, momentum=0.9): 26 def sgd_momentum_updates(params, grads, stepsizes, momentum=0.9):
27 # if stepsizes is just a scalar, expand it to match params 27 # if stepsizes is just a scalar, expand it to match params
28 try: 28 try:
29 iter(stepsizes) 29 iter(stepsizes)
30 except: 30 except Exception:
31 stepsizes = [stepsizes for p in params] 31 stepsizes = [stepsizes for p in params]
32 try: 32 try:
33 iter(momentum) 33 iter(momentum)
34 except: 34 except Exception:
35 momentum = [momentum for p in params] 35 momentum = [momentum for p in params]
36 if len(params) != len(grads): 36 if len(params) != len(grads):
37 raise ValueError('params and grads have different lens') 37 raise ValueError('params and grads have different lens')
38 headings = [theano.shared(numpy.zeros_like(p.get_value(borrow=True))) for p in params] 38 headings = [theano.shared(numpy.zeros_like(p.get_value(borrow=True))) for p in params]
39 updates = [] 39 updates = []
77 77
78 if self.stepsize.ndim != 0: 78 if self.stepsize.ndim != 0:
79 raise TypeError('stepsize must be a scalar', stepsize) 79 raise TypeError('stepsize must be a scalar', stepsize)
80 80
81 self.params = params 81 self.params = params
82 self.gparams = theano.tensor.grad(cost, self.params) if gradients is None else gradients 82 self.gparams = [theano.tensor.grad(cost, self.params)] if gradients is None else gradients
83 assert len(self.params) == len(self.gparams)
83 84
84 self._updates = (dict((p, p - self.stepsize * g) for p, g in zip(self.params, self.gparams))) 85 self._updates = (dict((p, p - self.stepsize * g) for p, g in zip(self.params, self.gparams)))
85 if updates is not None: 86 if updates is not None:
86 self._updates.update(updates) 87 self._updates.update(updates)
87 88