【问题标题】:Writing TFRecords in batches批量写入 TFRecord
【发布时间】:2018-04-11 16:06:48
【问题描述】:

我找到的所有关于 TFRecords 的文档都是一一生成tf.train.Example()s,并使用

writer = tf.python_io.TFRecordWrite(path)
ex = generate_example(features)  # Returns tf.train.Example() instance
writer.write(ex.SerializeToString())

由于我正在处理非常大的数据,我知道我会为单独编写示例付出高昂的开销

有没有办法一次将多个tf.train.Example() 写入 TFRecord?

【问题讨论】:

    标签: python tensorflow tfrecord


    【解决方案1】:

    由于 TFRecord 只是您的原始数据的序列化版本,其中包含一些额外的信息,我不确定您能否完成您的要求。我想到的一些问题:

    1. 您应该如何将多个示例写入文件 同时?
    2. 如果您成功实现了上述目标(处理所有并发问题等),tensorflow 仍将以相同的方式读取它们:连续读取它们,所以我不确定这里有什么好处。
    3. 另外,TFRecord 应该被写入一次并多次使用。这意味着它们不是任何培训或未来可能改变的过程的产物。它们应该是您模型的输入。因此,无论创建它们的努力如何,这都是一次性的工作。你的数据有多大。在这种情况下,我认为在训练过程中处理它们会比在 TFRecords 中编写它们更麻烦。
    4. 我能想到的一种(天真的)解决方法是同时创建多个 TFRecord 文件。例如,如果这让您感到困扰,您可以通过这种方式加快 TFRecord 的编写速度。然后,您可以使用记录列表而不是单个 TFRecord 文件来读取它们。当然,在这种情况下,tensorflow 会再次串行读取它们。

    【讨论】:

    • 好吧,如果ex.SerializeToString() 的输出是一个字符串,所以与其一一写,我宁愿事先加入字符串(以可接受的格式,我不知道它是什么is) 并将它们分批写入磁盘。这不是并行写作——它的批处理
    • 也许我错误地认为它是显而易见的,但大部分时间都花在了写作上,所以我更喜欢一次写 1000 个示例,而不是单行写 1000 次
    猜你喜欢
    • 1970-01-01
    • 2016-12-20
    • 2015-08-02
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多