我正在尝试使用大量不适合内存的数据来训练 gpflow 模型。
我正在考虑使用带有 minibatch 选项的 SVGP,但它似乎需要一个完整数据的 numpy 数组,而且我不想一次加载所有内容。
是否可以使用 gpflow 对不适合内存的数据进行训练?有没有这样做的例子?
谢谢你的帮助。
我正在尝试使用大量不适合内存的数据来训练 gpflow 模型。
我正在考虑使用带有 minibatch 选项的 SVGP,但它似乎需要一个完整数据的 numpy 数组,而且我不想一次加载所有内容。
是否可以使用 gpflow 对不适合内存的数据进行训练?有没有这样做的例子?
谢谢你的帮助。
您可以传递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 的更多信息,您可以在此处找到。