【问题标题】:gpflow: Is it possible to use data that doesn't fit in memory?gpflow:是否可以使用不适合内存的数据?
【发布时间】:2019-05-28 18:25:57
【问题描述】:

我正在尝试使用大量无法放入内存的数据来训练 gpflow 模型。

我正在考虑使用带有 minibatch 选项的 SVGP,但它似乎需要一个完整数据的 numpy 数组,而且我不想一次加载所有内容。

是否可以使用 gpflow 对不适合内存的数据进行训练? 有这样的例子吗?

感谢您的帮助。

【问题讨论】:

    标签: python tensorflow gpflow


    【解决方案1】:

    您可以传递 tf.data.Dataset 迭代器而不是 numpy 数据。这是一个例子:

    buffer_size = 10000
    batch_size = 128
    
    # x_shape is a feature shape, e.g. for CIFAR it will be [32, 32, 3]
    xy_shapes = ([], [])
    xy_dtypes = (tf.float32, tf.float32)
    
    # Read data from disk
    def read_data():
        # Do something, read from disk or anything else...
        yield x, y
    
    # Make dataset, do batching and shuffling
    ds = tf.data.Dataset.from_generator(read_data, xy_dtypes, xy_shapes)
    ds = ds.prefetch(buffer_size)
    ds = ds.repeat()
    ds = ds.shuffle()
    ds = ds.batch(batch_size)
    
    # Get data iterators
    x_iter, y_iter = ds.make_one_shot_iterator().get_next()
    

    现在您可以使用 TensorFlow 迭代器创建模型。与标准方法的唯一区别是您必须传递 num_data 参数才能正确计算比例因子。

    kernel = ...
    likelihood = ...
    feature = ...
    
    num_data = ... # size of your dataset
    model = gpflow.models.SVGP(x_iter, y_iter, kernel, likelihood, feature, num_data=num_data)
    

    有关如何使用 tf.data 的更多信息,您可以找到 here。

    【讨论】:

    • 非常感谢您的回答和示例代码!我没有意识到您可以使用外部小批量,而不是使用 minibatch_size 选项。在我真正开始工作后,我会在这个答案上打勾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2010-12-23
    • 1970-01-01
    • 2010-09-22
    相关资源
    最近更新 更多