通过 TensorFlow 消费大数据

Posted

技术标签:

【中文标题】通过 TensorFlow 消费大数据【英文标题】:Consuming big data by Tensorflow 【发布时间】:2018-10-24 15:51:42 【问题描述】:

假设,我有一个庞大的对象列表,例如,每个对象都可以是一个 numpy 数组列表。

将此数据集传递给 tensorflow 的最佳方法是什么?

我希望能够随机打乱数据并形成批次。是否值得使用标准 python(numpy) 程序对数据集进行洗牌并形成批次,然后使用 tf.data.Dataset.from_generator() 之类的东西?

由于tf.GraphDef 协议缓冲区的大小限制(根据 Tensorflow 文档),将完整数据集转换为 tf.Tensor 的直接方法似乎没用。

【问题讨论】:

你能用字节来定义“巨大”吗? @cricket_007 超过 10GB 您是否需要一次性获取整个数据集?还是你使用批处理? 尽管this thread 与 Tensorflow 无关,但它仍然可以为您提供很多想法。 【参考方案1】:

您的数据看起来很大,但仍然小到足以放入内存?如果是这样,那么您与tf.data.Dataset.from_generator() 走在了正确的轨道上。然后你可以用类似的东西洗牌和批处理

import itertools

# your data
data = range(1024)
def gen():
  for item in data:
    yield data

ds = Dataset.from_generator(
    gen, tf.int64, tf.TensorShape([])).shuffle(buffer_size=128).batch(batch_size=4)
value = ds.make_one_shot_iterator().get_next()

sess.run(value)  # array([0, 1, 2, 3])

或者,您可以将数据转储到 TFRecord 文件并使用 TFRecordDataset 从中读取。这个test 应该可以帮助您入门。

【讨论】:

以上是关于通过 TensorFlow 消费大数据的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow怎么训练tfrecords 数据集

吴裕雄--天生自然TensorFlow2教程:Tensor数据类型

如何理解TensorFlow中的tensor

tf.gather和tf.gather_nd的详细用法--tensorflow通过索引取tensor里的数据

你真的懂TensorFlow吗?Tensor是神马?为什么还会Flow?

对Tensorflow中tensor的理解