用于美国航班数据的SVGP

时间:2019-08-15 17:43:02

标签: gpflow

我的问题是美国飞行数据集中SVIGP的优化问题。 我针对Hensman 2014年提到的美国航班数据实施了SVGP模型,使用的诱导点数= 100,batch_size = 1000,学习率= 1e-5和maxiter = 500。

结果非常奇怪,无论我如何调整学习率,ELBO都不会增加并且方差很大

初始化

M = 100
D = 8
def init():
    kern = gpflow.kernels.RBF(D, 1, ARD=True)
    Z = X_train[:M, :].copy()
    m = gpflow.models.SVGP(X_train, Y_train.reshape([-1,1]), kern, gpflow.likelihoods.Gaussian(), Z, minibatch_size=1000)
    return m
m = init()

推断

m.feature.trainable = True
opt = gpflow.train.AdamOptimizer(learning_rate = 0.00001)
m.compile()
opt.minimize(m, step_callback=logger, maxiter = 500)
plt.plot(logf)
plt.xlabel('iteration')
plt.ylabel('ELBO')

结果:

result

添加的结果

一旦我添加了更多的迭代并使用了较大的学习率。很高兴看到ELBO随着迭代次数的增加而增加。但是,非常令人困惑的是,用于训练和测试数据的均方根误差(RMSE)也都增加了。你有什么建议吗? 图形和代码如下所示:

ELBO与迭代

ELBOs vs iterations

培训RMSE与迭代

Train RMSEs vs iterations

测试RMSE与迭代

Test RMSEs vs iterations

使用记录器

def logger(x):
    print(m.compute_log_likelihood())
    logx.append(x)
    logf.append(m.compute_log_likelihood())
    logt.append(time.time() - st)
    py_train = m.predict_y(X_train)[0]
    py_test = m.predict_y(X_test)[0]
    rmse_hist.append(np.sqrt(np.mean((Y_train - py_train)**2)))
    rmse_test_hist.append(np.sqrt(np.mean((Y_test - py_test)**2)))
    logger.i+=1
logger.i = 1

完整的代码通过link显示。

0 个答案:

没有答案