update hmc for tie framework

This commit is contained in:
Zhenwen Dai 2014-10-13 16:20:44 +01:00
parent c924536120
commit 2e9f63b7b4
2 changed files with 8 additions and 15 deletions

View file

@ -954,21 +954,14 @@ class Parameterizable(OptimizationHandlable):
return self._param_array_ return self._param_array_
@property @property
def unfixed_param_array(self): def exposed_param_array(self):
""" """
Array representing the parameters of this class.
There is only one copy of all parameters in memory, two during optimization.
!WARNING!: setting the parameter array MUST always be done in memory:
m.param_array[:] = m_copy.param_array
""" """
if self.__dict__.get('_param_array_', None) is None: if self.__dict__.get('_param_array_', None) is None:
self._param_array_ = np.empty(self.size, dtype=np.float64) self._param_array_ = np.empty(self.size, dtype=np.float64)
if self.constraints[__fixed__].size !=0: if self._has_hidden():
fixes = np.ones(self.size).astype(bool) return self._param_array_[self._exposed_]
fixes[self.constraints[__fixed__]] = FIXED
return self._param_array_[fixes]
else: else:
return self._param_array_ return self._param_array_

View file

@ -20,7 +20,7 @@ class HMC:
self.p[:] = np.random.multivariate_normal(np.zeros(self.p.size),self.M) self.p[:] = np.random.multivariate_normal(np.zeros(self.p.size),self.M)
H_old = self._computeH() H_old = self._computeH()
theta_old = self.model.optimizer_array.copy() theta_old = self.model.optimizer_array.copy()
params[i] = self.model.unfixed_param_array params[i] = self.model.exposed_param_array
#Matropolis #Matropolis
self._update(hmc_iters) self._update(hmc_iters)
H_new = self._computeH() H_new = self._computeH()
@ -30,7 +30,7 @@ class HMC:
else: else:
k = np.exp(H_old-H_new) k = np.exp(H_old-H_new)
if np.random.rand()<k: if np.random.rand()<k:
params[i] = self.model.unfixed_param_array params[i] = self.model.exposed_param_array
else: else:
self.model.optimizer_array = theta_old self.model.optimizer_array = theta_old
return params return params
@ -64,7 +64,7 @@ class HMC_shortcut:
stepsize = np.exp(np.random.rand()*(self.stepsize_range[1]-self.stepsize_range[0])+self.stepsize_range[0]) stepsize = np.exp(np.random.rand()*(self.stepsize_range[1]-self.stepsize_range[0])+self.stepsize_range[0])
self.p[:] = np.random.multivariate_normal(np.zeros(self.p.size),self.M) self.p[:] = np.random.multivariate_normal(np.zeros(self.p.size),self.M)
H_old = self._computeH() H_old = self._computeH()
params[i] = self.model.unfixed_param_array params[i] = self.model.exposed_param_array
theta_old = self.model.optimizer_array.copy() theta_old = self.model.optimizer_array.copy()
#Matropolis #Matropolis
self._update(hmc_iters, stepsize) self._update(hmc_iters, stepsize)
@ -75,7 +75,7 @@ class HMC_shortcut:
else: else:
k = np.exp(H_old-H_new) k = np.exp(H_old-H_new)
if np.random.rand()<k: if np.random.rand()<k:
params[i] = self.model.unfixed_param_array params[i] = self.model.exposed_param_array
else: else:
self.model.optimizer_array = theta_old self.model.optimizer_array = theta_old
return params return params