diff --git a/GPy/kern/parts/bias.py b/GPy/kern/parts/bias.py index 2b72e7c9..7010db12 100644 --- a/GPy/kern/parts/bias.py +++ b/GPy/kern/parts/bias.py @@ -5,6 +5,7 @@ from kernpart import Kernpart import numpy as np import hashlib +from GPy.core.parameter import Param class Bias(Kernpart): def __init__(self,input_dim,variance=1.): @@ -14,20 +15,24 @@ class Bias(Kernpart): :param variance: the variance of the kernel :type variance: float """ + super(Bias, self).__init__(input_dim) self.input_dim = input_dim self.num_params = 1 self.name = 'bias' - self._set_params(np.array([variance]).flatten()) - def _get_params(self): - return self.variance + self.variance = Param(lambda: self.name+"_variance", variance, None) + self.set_as_parameters(self.variance) + #self._set_params(np.array([variance]).flatten()) - def _set_params(self,x): - assert x.shape==(1,) - self.variance = x - - def _get_param_names(self): - return ['variance'] +# def _get_params(self): +# return self.variance +# +# def _set_params(self,x): +# assert x.shape==(1,) +# self.variance = x +# +# def _get_param_names(self): +# return ['variance'] def K(self,X,X2,target): target += self.variance diff --git a/GPy/kern/parts/kernpart.py b/GPy/kern/parts/kernpart.py index 5ca8dd34..461a152c 100644 --- a/GPy/kern/parts/kernpart.py +++ b/GPy/kern/parts/kernpart.py @@ -22,35 +22,41 @@ class Kernpart(object): self.name = 'unnamed' # link to parameterized objects self._parameters_ = [] - - def set_as_parameter_named(self, name, gradient, index=None, *args, **kwargs): - """ - :param names: name of parameter to set as parameter - :param gradient: gradient method to get the gradient of this parameter - :param index: index of where to place parameter in printing - :param args, kwargs: additional arguments to gradient - Convenience method to connect Kernpart parameters: - parameter with name (attribute of this Kernpart) will be set as parameter with following name: - - kernel_name + _ + parameter_name + def set_as_parameters(self, *params): + self._parameters_.extend(params) - To add the kernels name to the parameter name use this method to - add parameters. - """ - self.set_as_parameter(name, getattr(self, name), gradient, index, *args, **kwargs) - def set_as_parameter(self, name, array, gradient, index=None, *args, **kwargs): - """ - See :py:func:`GPy.core.parameterized.Parameterized.set_as_parameter` - - Note: this method adds the kernels name in front of the parameter. - """ - p = Param(self.name+"_"+name, array, gradient, *args, **kwargs) - if index is None: - self._parameters_.append(p) - else: - self._parameters_.insert(index, p) - self.__dict__[name] = p + def parameters_changed(self): + pass + +# def set_as_parameter_named(self, name, gradient, index=None, *args, **kwargs): +# """ +# :param names: name of parameter to set as parameter +# :param gradient: gradient method to get the gradient of this parameter +# :param index: index of where to place parameter in printing +# :param args, kwargs: additional arguments to gradient +# +# Convenience method to connect Kernpart parameters: +# parameter with name (attribute of this Kernpart) will be set as parameter with following name: +# +# kernel_name + _ + parameter_name +# +# To add the kernels name to the parameter name use this method to +# add parameters. +# """ +# self.set_as_parameter(name, getattr(self, name), gradient, index, *args, **kwargs) +# def set_as_parameter(self, name, array, gradient, index=None, *args, **kwargs): +# """ +# See :py:func:`GPy.core.parameterized.Parameterized.set_as_parameter` +# +# Note: this method adds the kernels name in front of the parameter. +# """ +# p = Param(self.name+"_"+name, array, gradient, *args, **kwargs) +# if index is None: +# self._parameters_.append(p) +# else: +# self._parameters_.insert(index, p) +# self.__dict__[name] = p #set_as_parameter.__doc__ += set_as_parameter.__doc__ # @UndefinedVariable # def _get_params(self): # raise NotImplementedError diff --git a/GPy/kern/parts/rbf.py b/GPy/kern/parts/rbf.py index 93a7e607..4912d241 100644 --- a/GPy/kern/parts/rbf.py +++ b/GPy/kern/parts/rbf.py @@ -54,10 +54,11 @@ class RBF(Kernpart): lengthscale = np.ones(self.input_dim) #self._set_params(np.hstack((variance, lengthscale.flatten()))) - self.variance = variance - self.lengthscale = lengthscale - self.set_as_parameter('variance', self.variance, None) - self.set_as_parameter('lengthscale', self.lengthscale, None) + self.variance = Param(lambda: self.name+'_variance', variance, None) + self.lengthscale = Param(lambda: self.name+'_lengthscale', lengthscale, None) + self.set_as_parameters(self.variance, self.lengthscale) +# self.set_as_parameter('variance', self.variance, None) +# self.set_as_parameter('lengthscale', self.lengthscale, None) # initialize cache self._Z, self._mu, self._S = np.empty(shape=(3, 1)) diff --git a/GPy/kern/parts/white.py b/GPy/kern/parts/white.py index 2307c812..00422c9b 100644 --- a/GPy/kern/parts/white.py +++ b/GPy/kern/parts/white.py @@ -3,6 +3,7 @@ from kernpart import Kernpart import numpy as np +from ...core.parameter import Param class White(Kernpart): """ @@ -18,20 +19,20 @@ class White(Kernpart): self.input_dim = input_dim self.num_params = 1 self.name = 'white' - self.variance=variance - self.set_as_parameter_named('variance', None) + self.variance = Param(lambda: self.name+'_variance', variance, None) + self.set_as_parameters(self.variance) # self._set_params(np.array([variance]).flatten()) self._psi1 = 0 # TODO: more elegance here - def _get_params(self): - return self.variance - - def _set_params(self,x): - assert x.shape==(1,) - self.variance = x - - def _get_param_names(self): - return ['variance'] +# def _get_params(self): +# return self.variance +# +# def _set_params(self,x): +# assert x.shape==(1,) +# self.variance = x +# +# def _get_param_names(self): +# return ['variance'] def K(self,X,X2,target): if X2 is None: