内核的超参数;初始化和设置范围

时间:2019-04-01 14:40:27

标签: process gaussian gpflow

我认为许多像我这样的人可能会对他们如何使用GPFlow解决特殊问题感兴趣。关键是GPFlow的可自定义方式,一个很好的例子将非常有帮助。

就我而言,我在提出的问题上阅读并尝试了很多评论,但均未获得任何成功。设置内核模型参数不是一件容易的事(创建默认值,然后通过delete object方法进行设置)。转换方法含糊不清。

如果您可以添加示例显示,那将非常有帮助。如何初始化和设置各向异性内核模型的边界(长度标度值和边界,方差等),并特别添加观察误差(作为数组形式的alpha参数)

3 个答案:

答案 0 :(得分:3)

如果您只想设置一个值,则可以

model = gpflow.models.GPR(np.zeros((1, 1)),
                          np.zeros((1, 1)),
                          gpflow.kernels.RBF(1, lengthscales=0.2))

或者

model = gpflow.models.GPR(np.zeros((1, 1)),
                          np.zeros((1, 1)),
                          gpflow.kernels.RBF(1))
model.kern.lengthscales = 0.2

如果要更改转换,则需要子类化内核,或者也可以这样做

with gpflow.defer_build():
     model = gpflow.models.GPR(np.zeros((1, 1)),
                               np.zeros((1, 1)),
                               gpflow.kernels.RBF(1))
     transform = gpflow.transforms.Logistic(0.1, 1.))
     model.kern.lengthscales = gpflow.params.Parameter(0.3, transform=transform)
model.compile()

在更改转换之前,您需要defer_build来停止图形的编译。使用上述方法,张量流图的编译被延迟(直到显式model.compile()为止),因此使用预期的边界变换来构建它。

使用数组参数进行似然方差不在gpflow的范围内。对于它的价值(并且因为之前已经有人问过),该特定模型尤其成问题,因为尚不清楚如何定义测试点。

答案 1 :(得分:1)

可以使用.assign()函数或直接分配来设置内核参数。请参阅笔记本https://github.com/GPflow/GPflow/blob/develop/doc/source/notebooks/understanding/tf_graphs_and_sessions.ipynb。您无需删除参数即可为其分配新值。

如果要具有每个数据点的噪声,则需要实现自己的自定义似然性,您可以通过以Gaussian中的likelihoods.py个似然性为例来实现。

如果用“界限”表示限制参数的优化范围,则可以使用Logistic变换。如果要传递参数的自定义转换,则可以将构造的Parameter对象传递给具有自定义转换的构造函数。另外,您可以为模型创建一个新创建的Parameter

答案 2 :(得分:1)

以下是有关如何访问和更改GPflow参数的更多信息:viewing, getting and settings parameters documentation

@ user1018464的额外内容是关于替换现有参数中的转换:更改转换有些棘手,一旦在TensorFlow中编译了模型,就无法更改转换。

例如

likelihood = gpflow.likelihoods.Gaussian()
likelihood.variance.transform = gpflow.transforms.Logistic(1., 10.)
----
GPflowError: Parameter "Gaussian/variance" has already been compiled.

相反,您必须重置GPflow对象:

likelihood = gpflow.likelihoods.Gaussian()  # All tensors compiled

likelihood.clear()
likelihood.variance.transform = gpflow.transforms.Logistic(2, 5)
likelihood.variance = 2.5
likelihood.compile()
相关问题