如何在gpflow中使用具有非变分GPR的迷你批次



我曾尝试调整本文档中的说明,以使用迷你批次来训练GPR模型,但我尝试过的都不起作用。我不能将批迭代器提供给training_loss_closure方法,也不能将批迭代器用于模型的数据属性。有没有一种方法可以在gpflow中使用具有非变分模型的迷你批次,如GPR或SGPR?

您可以将data元组构造为两个tf.Variable对象(如果您希望能够具有不同长度的迷你批次,则可以传递shape=Noneshape=(None, dim)参数(。类似的东西

X = tf.Variable(np.zeros(0, input_dim), shape=tf.TensorShape(None, input_dim), dtype=gpflow.default_float())
Y = tf.Variable(np.zeros(0, output_dim), shape=tf.TensorShape(None, output_dim), dtype=gpflow.default_float())
model = gpflow.models.GPR((X, Y), kernel)

然后,您可以编写一个损失函数,该函数接收当前批次,将其分配给变量,然后按照的行返回模型损失

@tf.function
def loss(data_batch):
model.data[0].assign(data_batch[0])
model.data[1].assign(data_batch[1])
return model.training_loss()

注意:虽然这在数值上是可行的,但对于非SVGP模型,这可能不会给你正确的答案(你从批次中计算的梯度可能不是对整个批次梯度的无偏估计(。

相关内容

  • 没有找到相关文章

最新更新