【问题标题】:How can I use minibatches with a non-variational GPR in gpflow?如何在 gpflow 中使用带有非变分 GPR 的小批量?
【发布时间】:2021-12-25 07:02:58
【问题描述】:

我已尝试调整 this documentation 中的说明以使用 minibatch 来训练 GPR 模型,但我没有尝试过任何工作。我无法将批处理迭代器提供给 training_loss_closure 方法,也无法将批处理迭代器用于模型的数据属性。有没有办法在 gpflow 中使用具有非变分模型(如 GPR 或 SGPR)的小批量?

【问题讨论】:

    标签: tensorflow gpflow gaussian-process mini-batch


    【解决方案1】:

    您可以将data 元组构造为两个tf.Variable 对象(如果您希望能够拥有不同长度的小批量,您可以传递shape=None 或shape=(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 模型,这可能无法为您提供正确的答案(您从批次计算的梯度可能不是完整的无偏估计 -批量梯度)。

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 2021-12-12
      • 1970-01-01
      • 2020-01-26
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      相关资源
      最近更新 更多