我最近才开始尝试使用gpflow
软件包来为给定的训练集构建各自的GP模型。
我正在处理的数据具有很高的维度:
>>> X.shape; Y.shape
(3489, 416)
(3489, 1)
首先,我正在遵循提供的教程来重现基本模型:
k = gpflow.kernels.RBF(input_dim=X.shape[1], ARD=True) + gpflow.kernels.Linear(input_dim=X.shape[1], ARD=True) + gpflow.kernels.Matern12(input_dim=X.shape[1], ARD=True)
m = gpflow.models.GPR(X, Y, kern=k, mean_function=None)
opt = gpflow.train.ScipyOptimizer()
opt.minimize(m)
优化模型的时间大约是一个小时,在CPU上运行,而在GPU上运行则慢了大约4倍(移动工作站:Quadro P600,至强E3-1200 v5)。
我的问题是,这次是从具有该维度和样本大小的数据集中期望什么,还是可以做些事情来减少优化时间?优化有任何特殊原因完全不能从GPU使用中受益吗?
我知道结合多个内核并设置ADR=True
可能是一个很大的瓶颈。除此之外,还有什么可以调整的吗?
理想情况下,一旦添加了许多新参考点,我想连续地重新训练模型。
非常感谢您!
编辑:经过进一步的阅读,我发现GP的一般规模为N ^ 3阶,其中N是样本数。减少样本数量有助于提高速度。但是,GPU仍然慢很多。