0

我想很多像我一样的人可能会对他们如何使用 GPFlow 来解决他们的特殊问题感兴趣。关键是如何定制 GPFlow,一个很好的例子会很有帮助。

就我而言,我在提出的问题中阅读并尝试了很多评论,但没有任何真正的成功。设置内核模型参数并不简单(使用默认值创建,然后通过删除对象方法进行)。变换方法模糊。

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

4

3 回答 3

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 的范围。对于它的价值(并且因为它之前已被询问过),该特定模型尤其成问题,因为尚不清楚如何定义测试点。

于 2019-04-02T15:13:33.397 回答
1

以下是有关如何访问和更改 GPflow 参数的更多信息:查看、获取和设置参数文档

@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()
于 2019-04-01T16:05:31.823 回答
1

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

如果您想要每个数据点的噪声,您将需要实现您自己的自定义似然性,您可以通过以Gaussian似然性likelihoods.py为例来做到这一点。

如果“边界”是指限制参数的优化范围,则可以使用Logistic转换。如果要为参数传入自定义转换,可以将构造的Parameter对象传递给带有自定义转换的构造函数。或者,您可以将新创建Parameter​​的带有新变换的模型分配给模型。

于 2019-04-01T15:06:04.940 回答