updated white, bias and rbf to new parameter handling

This commit is contained in:
Max Zwiessele 2013-10-22 16:17:13 +01:00
parent 27724fd456
commit 21dd82f8d9
4 changed files with 64 additions and 51 deletions

View file

@ -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

View file

@ -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

View file

@ -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))

View file

@ -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: