在 GPflow 中重置内核超参数值
Resetting kernel hyperparameter values in GPflow
我的用例是这样的:我有一个接受用户选择的内核的函数,然后我将遍历数据集中的每个日期,并使用高斯过程回归来估计使用指定内核的模型。但是,由于我指向内核对象,因此我需要在 运行 下一次迭代之前将其重置为默认值。
import gpflow
class WrapperClass(object):
def __init__(self, kernel):
super().__init__()
self.kernel = kernel
def fit(self, X, y):
m = gpflow.models.GPR(X, y, self.kernel) # I need to reset the kernel here
# some code later
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 + k2
f = 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.)}
干杯,
史蒂夫
您可以使用 assign() 设置参数化对象(模型、内核、可能性等)的参数:k1.assign(k1.read_trainables())
(或其他一些路径值对字典)。不过,您也可以创建一个新的内核对象!
请注意,每次您创建新的参数化对象时——这适用于内核和模型,就像在您的 fit() 方法中一样——您向张量流图添加操作,如果它增长很多。您可能想要研究手动处理 tf.Graph() 和 tf.Session() 以使它们对于每个模型都不同。 (请参阅新 GPflow 文档中 session handling and further tips and tricks 上的笔记本。)
我的用例是这样的:我有一个接受用户选择的内核的函数,然后我将遍历数据集中的每个日期,并使用高斯过程回归来估计使用指定内核的模型。但是,由于我指向内核对象,因此我需要在 运行 下一次迭代之前将其重置为默认值。
import gpflow
class WrapperClass(object):
def __init__(self, kernel):
super().__init__()
self.kernel = kernel
def fit(self, X, y):
m = gpflow.models.GPR(X, y, self.kernel) # I need to reset the kernel here
# some code later
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 + k2
f = 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.)}
干杯, 史蒂夫
您可以使用 assign() 设置参数化对象(模型、内核、可能性等)的参数:k1.assign(k1.read_trainables())
(或其他一些路径值对字典)。不过,您也可以创建一个新的内核对象!
请注意,每次您创建新的参数化对象时——这适用于内核和模型,就像在您的 fit() 方法中一样——您向张量流图添加操作,如果它增长很多。您可能想要研究手动处理 tf.Graph() 和 tf.Session() 以使它们对于每个模型都不同。 (请参阅新 GPflow 文档中 session handling and further tips and tricks 上的笔记本。)