Mercurial > pylearn
comparison pylearn/sampling/mcmc.py @ 1447:fbe470217937
Use .get_value() and .set_value() of shared instead of the .value property
author | Pascal Lamblin <lamblinp@iro.umontreal.ca> |
---|---|
date | Wed, 16 Mar 2011 20:20:02 -0400 |
parents | 492473059b37 |
children |
comparison
equal
deleted
inserted
replaced
1446:6e50d209b5f1 | 1447:fbe470217937 |
---|---|
53 callable such that energy_fn(positions) | 53 callable such that energy_fn(positions) |
54 returns theano vector of energies. | 54 returns theano vector of energies. |
55 The len of this vector is the batchsize. | 55 The len of this vector is the batchsize. |
56 """ | 56 """ |
57 | 57 |
58 batchsize = positions[0].value.shape[0] | 58 batchsize = positions[0].get_value(borrow=True).shape[0] |
59 self.s_rng = TT.shared_randomstreams.RandomStreams(seed) | 59 self.s_rng = TT.shared_randomstreams.RandomStreams(seed) |
60 self.positions = positions | 60 self.positions = positions |
61 self.prev_energy = shared(np.zeros(batchsize) + float('inf')) | 61 self.prev_energy = shared(np.zeros(batchsize) + float('inf')) |
62 self.avg_acceptance_rate = 0.5 | 62 self.avg_acceptance_rate = 0.5 |
63 self.stepsize = initial_stepsize | 63 self.stepsize = initial_stepsize |
64 | 64 |
65 s_stepsize = TT.scalar('stepsize') | 65 s_stepsize = TT.scalar('stepsize') |
66 | 66 |
67 new_positions = [p + s_stepsize * self.s_rng.normal(size=p.value.shape) | 67 new_positions = [p + s_stepsize * self.s_rng.normal(size=p.get_value(borrow=True).shape) |
68 for p in self.positions] | 68 for p in self.positions] |
69 | 69 |
70 # accept-reject according to Metropolis-Hastings | 70 # accept-reject according to Metropolis-Hastings |
71 | 71 |
72 energy = energy_fn(new_positions) | 72 energy = energy_fn(new_positions) |
88 self.stepsize = max(self.stepsize*self.stepsize_dec,self.stepsize_min) | 88 self.stepsize = max(self.stepsize*self.stepsize_dec,self.stepsize_min) |
89 else: | 89 else: |
90 self.stepsize = min(self.stepsize*self.stepsize_inc,self.stepsize_max) | 90 self.stepsize = min(self.stepsize*self.stepsize_inc,self.stepsize_max) |
91 | 91 |
92 def get_position(self): | 92 def get_position(self): |
93 return [q.value for q in self.positions] | 93 return [q.get_value(borrow=True) for q in self.positions] |
94 | 94 |
95 def draw(self, n_steps=None): | 95 def draw(self, n_steps=None): |
96 """Return the current sample in the Markov chain as a list of numpy arrays | 96 """Return the current sample in the Markov chain as a list of numpy arrays |
97 | 97 |
98 The size of the arrays will match the size of the `initial_position` argument to | 98 The size of the arrays will match the size of the `initial_position` argument to |