标签: gpflow

我可以深度复制`gpflow.models.GPModel`吗?(GPflow2)

我们已经训练了一个模型,并希望在几种不同的方法中使用它,每种方法都会对其进行变异。但是,第一个方法调用会为后续调用污染模型。

理想情况下,我们只想深度复制模型,然后将副本传递给变异方法。

这可能吗?或者有更好的选择吗?

gpflow

5
推荐指数
1
解决办法
116
查看次数

使用 GPflow 进行多维高斯过程回归

我想使用高斯过程回归执行一些多变量回归,如使用版本 2 在 GPflow 中实现的那样。安装 pip install gpflow==2.0.0rc1

下面是一些示例代码,它生成一些 2D 数据,然后尝试使用 GPR 对其进行拟合,最后计算真实输入数据和 GPR 预测之间的差异。

最终,我想扩展到更高的维度,并针对验证集进行测试以检查是否过拟合并使用其他内核和“自动相关性确定”进行试验,但了解如何使其工作是第一步。

谢谢!

以下代码片段将在 jupyter notebook 中工作。

import gpflow
import numpy as np
import matplotlib
from gpflow.utilities import print_summary

%matplotlib inline
matplotlib.rcParams['figure.figsize'] = (12, 6)
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def gen_data(X, Y):
    """
    make some fake data.
    X, Y are np.ndarrays with shape (N,) where
    N is the number of samples.
    """

    ys = []
    for x0, x1 in zip(X,Y):
        y = …
Run Code Online (Sandbox Code Playgroud)

gpflow

5
推荐指数
1
解决办法
744
查看次数

N维GP回归

我正在尝试使用 GPflow 进行多维回归。但我对均值和方差的形状感到困惑。例如:应该预测形状为 (20,20) 的二维输入空间 X。我的训练样本的形状为 (8,2),这意味着两个维度总共有 8 个训练样本。y 值的形状为 (8,1),这当然意味着 2 个输入维度的每个组合的一个真实值。如果我现在使用 model.predict_y(X) 我希望得到形状的平均值 (20,20) 但获得形状 (20,1)。方差也是如此。我认为这个问题来自 y 值的形状,但我不知道如何解决它。

bound = 3
num = 20
X = np.random.uniform(-bound, bound, (num,num))
print(X_sample.shape)  # (8,2)
print(Y_sample.shape)  # (8,1)
k = gpflow.kernels.RBF(input_dim=2)
m = gpflow.models.GPR(X_sample, Y_sample, kern=k)
m.likelihood.variance = sigma_n
m.compile()
gpflow.train.ScipyOptimizer().minimize(m)
mean, var = m.predict_y(X)
print(mean.shape)  # (20, 1)
print(var.shape)  # (20, 1)
Run Code Online (Sandbox Code Playgroud)

gpflow

2
推荐指数
1
解决办法
634
查看次数

GPflow分类:后验方差的解释

GPflow 网站上的多类分类教程中,稀疏变分高斯过程 (SVGP) 用于一维玩具示例。与所有其他 GPflow 模型的情况一样,SVGP 模型有一个方法predict_y(self, Xnew)可以返回点处保留数据的均值和方差Xnew

从教程中可以清楚地看出,解压缩的第一个参数是三个类别(单元格和)predict_y中每一个类别的后验预测概率,如下图第二个面板中的彩色线所示。然而,作者没有详细说明可以从 中解压缩的第二个参数,即预测的方差。在回归设置中,它的解释对我来说很清楚,因为在这种情况下后验预测分布将是高斯分布。[7][8]predict_y


但我不明白这里的解释是什么。特别是,我想知道如何使用此度量来构建误差线,表示任何新数据点的类预测的不确定性。


我稍微修改了教程的代码,在下面的图中添加了一个附加面板:第三个面板以黑色显示最大标准差(从 获得的方差的平方根predict_y)。显然,它是衡量不确定性的一个很好的指标,而且最高可能值为 0.5 也可能并非巧合,但我找不到它的计算方式及其代表的含义。

黑线:三者中最高方差

此处包含所有代码的完整笔记本。

def plot(m):
f = plt.figure(figsize=(12,8))
a1 = f.add_axes([0.05, 0.05, 0.9, 0.5])
av = f.add_axes([0.05, 0.6, 0.9, 0.1])
a2 = f.add_axes([0.05, 0.75, 0.9, 0.1])
a3 = f.add_axes([0.05, 0.9, 0.9, 0.1])


xx = np.linspace(m.X.read_value().min()-0.3, m.X.read_value().max()+0.3, 200).reshape(-1,1)
mu, var = m.predict_f(xx)
mu, var = mu.copy(), var.copy()
p, v = m.predict_y(xx)

a3.set_xticks([]) …
Run Code Online (Sandbox Code Playgroud)

python classification machine-learning gpflow

2
推荐指数
1
解决办法
516
查看次数

将模型保存在 gpflow 2 中

我正在尝试保存 GPflow 模型(在 GPflow 2.0 版中)。

model = gpflow.models.VGP((X, Y_data), kernel=kernel, likelihood=likelihood, num_latent_gps=1)
Run Code Online (Sandbox Code Playgroud)

由于该gpflow包不再有saver模块,任何人都可以帮助我提供替代方法吗?

machine-learning tensorflow gpflow tensorflow2.0

2
推荐指数
1
解决办法
936
查看次数