在GPflow中重置内核超参数值

我的使用场景是这样的:我有一个函数,它接受用户选择的内核,然后我会遍历数据集中每一个日期,并使用高斯过程回归来估计使用指定内核的模型。然而,由于我指向的是内核对象,我需要在运行下一次迭代之前将其重置为默认值。

import gpflowclass WrapperClass(object):    def __init__(self, kernel):        super().__init__()        self.kernel = kernel    def fit(self, X, y):        m = gpflow.models.GPR(X, y, self.kernel) # 我需要在这里重置内核# 后续代码def some_function(Xs, ys, ts, f):    for t in ts:        X = Xs.loc[t]    # pandas dataframe        y = ys.loc[t]    # pandas        f.fit(X, y)k1 = gpflow.kernels.RBF(1)k2 = gpflow.kernels.White(0.1)k = k1 + k2f = WrapperClass(k)sume_function(Xs, ys, ts, f)

我找到了内核上的read_trainables()方法,因此一种策略是保存用户提供的设置,但似乎没有办法设置它们?

In [7]: k1.read_trainables()Out[7]: {'Sum/rbf/lengthscales': array(1.), 'Sum/rbf/variance': array(1.)}

谢谢,Steve


回答:

您可以使用assign()方法来设置参数化对象(模型、内核、可能性等)的参数:k1.assign(k1.read_trainables())(或者其他路径-值对的字典)。不过,您也可以创建一个新的内核对象!

请注意,每次您创建新的参数化对象时 – 这适用于内核和模型,如您的fit()方法中 – 您会在tensorflow图中添加操作,如果图增长很多,可能会显著减慢图计算速度。您可能需要手动处理tf.Graph()和tf.Session(),以便为每个模型保持它们独立。(请参阅新版GPflow文档中的关于会话处理和更多技巧与窍门的笔记本。)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注