mirror of
https://github.com/SheffieldML/GPy.git
synced 2026-05-30 14:35:15 +02:00
update hmc for tie framework
This commit is contained in:
parent
c924536120
commit
2e9f63b7b4
2 changed files with 8 additions and 15 deletions
|
|
@ -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_
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue