我有一个2d内核
k = gpflow.kernels.RBF(lengthscales=[24*5,1e-5])
m = gpflow.models.GPR(data=(X,Y), kernel=k, mean_function=None)
我想修正第二维度的长度比例,然后优化另一个维度
我可以使用
gpflow.set_trainable(m.kernel.lengthscales, False)
但是我不能只给这个方法传递一个维度
在GPy中,我们将称之为m.kern.lengthscale[1:].fixed()
或其他什么
也许我可以使用一个转换来大致实现这一点(例如here),但这相当复杂
GPflow为每个参数使用一个
tf.Variable
,比如内核的lengthscales
,而TensorFlow只允许您将变量的trainable
状态作为一个整体进行更改。对于任意维度,每个维度都有一个单独的参数并不容易实现,但是您可以很容易地对所需内核进行子类化,并使用如下属性覆盖lengthscales
:然后您可以简单地使用
k = MyKernel(lengthscales=[24*5, 1e-5])
。(虽然1e-5的长度刻度看起来不太合适!但这超出了这个问题的范围。)这是因为超类的
__init__
(在gpflow.kernels.stational中)分配self.lengthscales = Parameter(lengthscales, transform=positive())
,因此在这个自定义类中,它调用属性设置器,而属性设置器反过来创建两个单独的属性。属性getter然后将它们重新缝合在一起,用于实际需要二维向量的方法相关问题 更多 >
编程相关推荐