内核的超参数;初始化和设置边界

问题描述 投票:0回答:3

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

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

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

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


1
投票

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

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

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


1
投票

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

@ user1018464的额外位有关​​替换现有参数中的变换的答案:更改变换有点棘手,在TensorFlow中编译模型后无法更改变换。

EG

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()
© www.soinside.com 2019 - 2024. All rights reserved.