通过 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 消费大数据的主要内容,如果未能解决你的问题,请参考以下文章
吴裕雄--天生自然TensorFlow2教程:Tensor数据类型
tf.gather和tf.gather_nd的详细用法--tensorflow通过索引取tensor里的数据